当前位置: 首页 > news >正文

[2025CVPR-小目标检测方向]基于特征信息驱动位置高斯分布估计微小目标检测模型

核心问题

  • 小目标检测性能差:​​ 尽管通用目标检测器(如 Faster R-CNN, YOLO, SSD)在常规目标上表现出色,但在检测微小目标(如 AI-TOD 基准定义的:非常小目标 2-8 像素,小目标 8-16 像素,较小目标 16-32 像素)时性能急剧下降。
  • 根本原因:​​ 微小目标极其有限的像素导致其特征表示非常微弱且缺乏区分度。深度神经网络的下采样过程导致信息丢失,这对微小目标尤其致命,使它们在特征图上几乎与背景无法区分(如图 1(b) 所示)。
  • 现有方法的不足:​​ 现有的解决方案(如尺度感知特征融合、注意力机制、模仿学习)部分缓解了问题,但未能有效解决由极度有限像素引起的弱表示问题。注意力机制尤其容易受到微小目标稀疏像素的影响,导致注意力图不可靠。

解决方案:FIP-GDE 框架

论文提出了一种名为 ​Feature ​Information driven ​Position ​Gaussian ​Distribution ​Estimation (FIP-GDE) 的即插即用架构,旨在增强因信息丢失而变得微弱和难以区分的区域(即微小目标)。核心思想是从像素级信息量的角度出发来识别需要增强的区域。

  1. 像素特征信息建模 (Pixels Feature Information Modeling - PFIM)​

    • 目标:​​ 无监督地识别图像中信息量丰富的区域(通常是显著目标,包括微小目标)。
    • 原理:​​ 基于信息论(香农熵)。信息量 I(x) = -log₂p(x),信息量大的区域(显著目标)出现概率 p(x) 小,信息量小(平滑背景)出现概率大。
    • 方法:​
      • 对底层特征图 P₂(记为 y)进行量化(添加均匀噪声模拟训练)。
      • 使用 CNN 参数估计模块预测每个像素元素的均值图 μ 和尺度图 σ(代表其高斯分布的参数)。
      • 关键创新:​​ 最小化信息熵损失 (Information Entropy Loss - L_IE)​。该损失是量化特征 ŷ 的整体编码成本(比特数)的反映:L_IE = Σᵢ -log₂ pŷᵢ(ŷᵢ|μᵢ, σᵢ)
      • 优化过程的作用:​​ 最小化 L_IE 促使网络学习 y 的分布模型,使其能高效压缩特征。在此过程中,信息量大的区域(如目标)需要更多的编码比特(成本高),而背景区域需要的比特少(成本低)。
    • 输出 - 信息图 (Information Map σ):​
      • 预测的尺度图 σ 被发现与信息量图(每个像素的编码成本)高度正相关,且视觉上更显著(如图 3(b) 所示)。
      • σ 值大的区域对应信息量大、需要增强的显著区域(目标)。
      • 使用 σ 初步增强 P₂y₁ = y ⊗ (1 + Mean(σ))Mean 为通道维度平均)。

 

​2.位置高斯分布预测 (Position Gaussian Distribution Prediction - PGDP)​

  • 目标:​​ 提供监督信号,使信息图 σ 和增强过程更关注微小目标。微小目标需要在分布图中获得比普通目标更高的强度值
  • 核心组件 - 位置高斯分布图 (Position Gaussian Distribution Map M_GT):​
    • 使用高斯混合模型 (Gaussian Mixture Model)​​ 建模。每个目标实例对应一个高斯分量。
    • 关键创新 (缩放因子 αᵢ):​​ 高斯分量的协方差矩阵 Σᵢ^box 根据目标框的大小动态调整:Σᵢ^box = diag((wᵢ/αᵢ)², (hᵢ/αᵢ)²)
    • αᵢ 取值:非常小目标 (vt) = 4, 小目标 (t) = 6, 较小目标 (s) = 8, 普通目标 = 10。这导致微小目标的协方差更小,在分布图中峰值更高​(如图 4 所示)。
    • 最终 M_GT 通过组合所有高斯分量、乘以实例数 N 并应用阈值处理来增强前景背景对比度获得。
  • 预测模块:​
    • 使用多尺度特征 P₂, P₃, P₄ 来预测 M_GT
    • 关键设计:​​ 将信息图 σ ​作为先验知识引导预测。输入为 [P₄ + (1/4)σ, P₃ + (1/2)σ, P₂ + σ] (1/41/2 表示下采样)。
    • 网络结构包含卷积、反卷积和跨层连接(如图 2 所示),输出三个尺度的预测图 M_pd₂, M_pd₃, M_pd₄
    • 使用加权均方误差损失 (L_pred) 进行深度监督,对目标区域(值 > 阈值 th)赋予更高权重(10 vs 背景的 0.1)。
  • 协同作用:​​ σ 指导 M_pd 的预测;反过来,优化 L_pred 也有助于生成能更好识别微小目标信息丰富区域的 σ
  • 增强:​​ 使用预测的 M_pd₂ 增强 P₂y₂ = y ⊗ (1 + M_pd₂)

 

  1. 特征融合与最终输出

    • 将两个增强特征 y₁ (由 σ 增强) 和 y₂ (由 M_pd₂ 增强) 分别送入 ​CBAM (Convolutional Block Attention Module)​​ 模块进行进一步的空间和通道注意力优化。
    • 将两个经过注意力优化的特征图按元素相加 (Element-wise Addition)​​ 融合,得到最终的增强特征图 P₂'
    • P₂' 替换原始 FPN 中的 P₂,送入检测头执行检测任务。
  2. 损失函数
    总损失函数结合了检测损失、信息熵损失和分布图预测损失:
    L = L_det + λ₁L_IE + λ₂L_pred (λ₁=0.01λ₂=1.0

实验结果

  • 数据集:​​ 在三个公开的小目标检测数据集上进行了广泛实验:VisDrone2019, AI-TOD, AI-TODv2。

  • 评估指标:​​ 遵循 AI-TOD 基准,包括 AP, AP₀.₅, AP₀.₇₅, APvt (非常小目标), APt (小目标), APs (较小目标)。

  • 主要发现:​

    • 显著提升:​​ 作为即插即用模块集成到多种主流检测器(Faster R-CNN, Cascade R-CNN, DetectoRS, RFLA)中,均带来了显著性能提升,尤其在检测微小目标(APvt, APt)上提升最大(例如,在 VisDrone 上 Faster R-CNN 的 APt 提升 5.8 点)。
    • SOTA 性能:​​ 当与 RFLA 结合时,在 VisDrone2019 上取得了所有指标的最佳性能(AP=29.0, APvt=7.4)。在 AI-TOD 和 AI-TODv2 上,与 DetectoRS 结合也获得了极具竞争力的结果(通常是最好或次好)。
    • 超越现有方法:​​ 性能优于近期专门针对小目标检测的方法(如 NWD-RKA, RFLA, SR-TOD, Salience DETR),证明了提出方法的优越性。特别指出 SR-TOD 的差异图依赖图像复原质量且会损失信息,而 FIP-GDE 直接在特征图层面识别信息损失区域。
  • 消融研究 (Ablation Study):​

    • 模块有效性:​​ PFIM 和 PGDP 模块均独立有效,结合使用效果最佳。
    • 分布图建模:​​ 提出的基于目标大小动态调整 αᵢ 的高斯建模方法优于固定缩放因子、二值掩码或自注意力生成权重图。
    • 先验引导:​​ 将 σ 通过 Pₙ + (scale)σ 的方式添加到输入进行引导效果最佳。
    • 融合策略:​​ 元素相加融合 y₁ 和 y₂ 效果优于元素相乘或拼接。
  • 分析:​

    • 信息图有效性:​​ 可视化(图 5, 图 6(a))和信息熵损失分析(比特每像素 bpp 与场景密集度正相关,如图 7 所示)证明了 PFIM 能有效捕获信息量大的显著区域和目标的空间结构。

    • 分布图有效性:​​ 可视化(图 6(b))表明预测的分布图 M_pd₂ 能清晰区分前景背景,并赋予微小目标更高强度。最终增强特征 P₂'(图 6(c))中的目标更显著,检测结果(图 6(f))也证明了能检测出更多困难的微小目标。

 

主要贡献

  1. 首次从像素级信息量的角度提出增强微小目标弱特征表示的方法,通过最小化信息熵损失无监督地生成注意力信息图 σ
  2. 引入由高斯混合模型建模的位置高斯分布图​ M_GT,并创新性地根据目标大小动态调整高斯分量协方差,使微小目标获得更高强度。
  3. 构建了以信息图为先验指导的多尺度分布图预测模块,协同调制信息图和分布图聚焦于微小目标。
  4. 提出的 FIP-GDE 框架是即插即用的,可灵活集成到类似 FPN 的检测器中,在三个公开数据集上的大量实验证明了其有效性和优越性,超越了当前最先进的方法。

核心代码实现

1. 像素特征信息建模模块(PFIM)

 

import torch
import torch.nn as nn
import torch.nn.functional as Fclass PFIM(nn.Module):def __init__(self, in_channels):super().__init__()# 参数估计网络:预测高斯分布的μ和σself.param_net = nn.Sequential(nn.Conv2d(in_channels, 64, 3, padding=1),nn.ReLU(),nn.Conv2d(64, in_channels * 2, 3, padding=1)  # 输出μ和σ)def forward(self, y):"""y: 输入特征图 [B, C, H, W]返回: 信息熵损失, 增强特征y1, 信息图σ"""# 1. 参数估计params = self.param_net(y)  # [B, 2*C, H, W]mu, sigma = torch.split(params, params.size(1)//2, dim=1)sigma = torch.exp(sigma)  # 确保正值# 2. 量化处理(添加均匀噪声)if self.training:y_hat = y + torch.rand_like(y) - 0.5  # U(-0.5, 0.5)else:y_hat = torch.round(y)  # 推理时直接取整# 3. 计算似然概率(公式5)upper = (y_hat + 0.5 - mu) / sigmalower = (y_hat - 0.5 - mu) / sigmap_yhat = self.std_normal_cdf(upper) - self.std_normal_cdf(lower)# 4. 计算信息熵损失(公式7)p_yhat = torch.clamp(p_yhat, min=1e-10)  # 避免log(0)loss_IE = -torch.log2(p_yhat).sum()# 5. 生成信息图(通道平均)info_map = sigma.mean(dim=1, keepdim=True)  # [B, 1, H, W]# 6. 特征初步增强(公式8)y1 = y * (1 + info_map)return loss_IE, y1, info_mapdef std_normal_cdf(self, x):"""标准正态分布累积函数近似"""return 0.5 * (1 + torch.erf(x / torch.sqrt(torch.tensor(2.0))))
2. 位置高斯分布预测模块(PGDP)
class PGDP(nn.Module):def __init__(self, in_channels):super().__init__()# 多尺度融合网络(P2-P4)self.conv_p2 = nn.Conv2d(in_channels, 64, 3, padding=1)self.conv_p3 = nn.Conv2d(in_channels, 64, 3, padding=1)self.conv_p4 = nn.Conv2d(in_channels, 64, 3, padding=1)# 上采样和融合层self.upsample = nn.ModuleList([nn.ConvTranspose2d(64, 64, 4, stride=2, padding=1),nn.ConvTranspose2d(64, 64, 4, stride=2, padding=1)])# 预测头self.pred_head = nn.Sequential(nn.Conv2d(64 * 3, 64, 3, padding=1),nn.ReLU(),nn.Conv2d(64, 1, 1)  # 输出单通道分布图)def forward(self, p2, p3, p4, info_map):"""输入: p2, p3, p4 - 多尺度特征图 [B, C, H, W]info_map - 信息图 [B, 1, H, W]返回: 预测分布图M_pd2, 增强特征y2"""# 1. 信息图下采样适配各尺度info_p4 = F.interpolate(info_map, size=p4.shape[2:]) * 0.25info_p3 = F.interpolate(info_map, size=p3.shape[2:]) * 0.5# 2. 特征与信息图融合p4_in = self.conv_p4(p4 + info_p4)p3_in = self.conv_p3(p3 + info_p3)p2_in = self.conv_p2(p2 + info_map)# 3. 上采样和特征融合p4_up = self.upsample[0](p4_in)  # P4->P3尺寸p3_fused = p3_in + p4_upp3_up = self.upsample[1](p3_fused)  # P3->P2尺寸p2_fused = torch.cat([p2_in, p3_up, p3_up], dim=1)# 4. 预测最终分布图M_pd2 = torch.sigmoid(self.pred_head(p2_fused))# 5. 特征增强y2 = p2 * (1 + M_pd2)return M_pd2, y2
3. 特征增强与融合模块
class FeatureEnhancer(nn.Module):def __init__(self, in_channels):super().__init__()# CBAM注意力模块(简化实现)self.channel_att = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(in_channels, in_channels//8, 1),nn.ReLU(),nn.Conv2d(in_channels//8, in_channels, 1),nn.Sigmoid())self.spatial_att = nn.Sequential(nn.Conv2d(2, 1, 7, padding=3),nn.Sigmoid())def forward(self, y1, y2):"""输入: PFIM增强特征y1, PGDP增强特征y2返回: 融合后的增强特征P2'"""# 1. 分别应用CBAM注意力y1_att = self.cbam(y1)y2_att = self.cbam(y2)# 2. 特征融合(元素相加)y_fused = y1_att + y2_attreturn y_fuseddef cbam(self, x):"""简化版CBAM"""# 通道注意力channel_att = self.channel_att(x)x_channel = x * channel_att# 空间注意力avg_out = torch.mean(x_channel, dim=1, keepdim=True)max_out, _ = torch.max(x_channel, dim=1, keepdim=True)spatial_att = self.spatial_att(torch.cat([avg_out, max_out], dim=1))return x_channel * spatial_att
4. 整体框架集成
class FIPGDE(nn.Module):def __init__(self, backbone_channels):super().__init__()# 实例化核心模块self.pfim = PFIM(backbone_channels)self.pgdp = PGDP(backbone_channels)self.enhancer = FeatureEnhancer(backbone_channels)# 损失权重self.lambda1 = 0.01self.lambda2 = 1.0def forward(self, p2, p3, p4, gt_bboxes=None):"""输入: p2, p3, p4 - FPN特征图gt_bboxes - 训练时提供GT框用于生成M_GT返回: 增强后的P2'特征, 总损失"""# 1. PFIM模块loss_IE, y1, info_map = self.pfim(p2)# 2. PGDP模块M_pd2, y2 = self.pgdp(p2, p3, p4, info_map)# 3. 计算PGDP损失(训练时)loss_pred = 0if gt_bboxes is not None:M_GT = self.generate_M_GT(gt_bboxes, p2.shape)# 加权MSE损失(公式13)mask = (M_GT > self.threshold).float()weights = mask * 10 + (1 - mask) * 0.1loss_pred = F.mse_loss(M_pd2, M_GT, reduction='none')loss_pred = (loss_pred * weights).mean()# 4. 特征增强与融合p2_prime = self.enhancer(y1, y2)# 5. 总损失total_loss = loss_IE * self.lambda1 + loss_pred * self.lambda2return p2_prime, total_lossdef generate_M_GT(self, gt_bboxes, feat_shape):"""生成位置高斯分布图(公式9-12)gt_bboxes: [N, 5] (batch_idx, x1, y1, x2, y2)feat_shape: [B, C, H, W]"""# 初始化M_GT为零矩阵B, _, H, W = feat_shapeM_GT = torch.zeros(B, 1, H, W, device=gt_bboxes.device)# 遍历所有GT框for box in gt_bboxes:b, x1, y1, x2, y2 = boxb = int(b)# 计算中心点(映射到特征图坐标)cx = ((x1 + x2) / 2) / 4  # P2尺寸是原图1/4cy = ((y1 + y2) / 2) / 4w = (x2 - x1) / 4h = (y2 - y1) / 4# 确定缩放因子α(基于目标大小)area = w * hif area < 8:    alpha = 4   # very tinyelif area < 16: alpha = 6   # tinyelif area < 32: alpha = 8   # smallelse:           alpha = 10  # general# 生成高斯分布(公式10)x_grid, y_grid = torch.meshgrid(torch.arange(W, device=M_GT.device), torch.arange(H, device=M_GT.device))gaussian = torch.exp(-(((x_grid - cx) / (w/alpha))​**2 + ((y_grid - cy) / (h/alpha))​**2))# 累加到M_GT(公式11)M_GT[b, 0] += gaussian# 后处理(公式12)M_GT *= len(gt_bboxes) / (B * len(gt_bboxes))  # 平均化threshold = M_GT.mean()M_GT = ((M_GT > threshold).float() * 0.5 + M_GT)return M_GT

论文地址:https://openaccess.thecvf.com/content/CVPR2025/papers/Bian_Feature_Information_Driven_Position_Gaussian_Distribution_Estimation_for_Tiny_Object_CVPR_2025_paper.pdf​​​​​​​

http://www.xdnf.cn/news/1169497.html

相关文章:

  • AI视频-剧本篇学习笔记
  • LeetCode 633.平方数之和
  • Leetcode力扣解题记录--第73题(矩阵置零)
  • RabbitMQ-交换机(Exchange)
  • 【大模型记忆实战Demo】基于SpringAIAlibaba通过内存和Redis两种方式实现多轮记忆对话
  • Arraylist与LinkedList区别
  • STM32-SPI全双工同步通信
  • LWIP学习记录2——MAC内核
  • mybatis多对一一对多的关联及拼接操作以及缓存处理
  • 【学习路线】Python全栈开发攻略:从编程入门到AI应用实战
  • Custom SRP - Draw Calls
  • Claude Code Kimi K2 环境配置指南 (Windows/macOS/Ubuntu)
  • python小工具:测内网服务器网速和延迟
  • Qt资源系统:如何有效管理图片和文件
  • Canmv k230 DAC案例——TLV5638
  • 104.二叉树的最大深度
  • API是什么,如何保障API安全?
  • 刀客doc:Netflix与YouTube开始在广告战场正面交锋
  • [学习] 笛卡尔坐标系的任意移动与旋转详解
  • 洛谷 B3939:[GESP样题 四级] 绝对素数 ← 素数判定+逆序整数
  • 深入解析 Pandas:Python 数据分析的强大工具
  • Jenkins接口自动化测试(构建)平台搭建
  • Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案
  • NLP自然语言处理的一些疑点整理
  • JavaScript AJAX 实现,演示如何将 Token 添加到 Authorization
  • 怎么在Mac系统中使用不坑盒子?
  • 交叉编译opencv(Cpp)于arm64架构开发板上
  • .NET使用EPPlus导出EXCEL的接口中,文件流缺少文件名信息
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——1、导航编辑器界面(Navigating the editor UI)介绍
  • numpy库的基础知识(二)