告别冗余!AAAI 2025 HFP模块:即插即用的双路DCT设计,在多个任务上实现SOTA
其设计灵感来源于传统图像处理:微小目标的边缘、纹理等细节信息主要对应频域中的高频分量,而大面积的平滑背景则对应低频分量。从图4可以看出,原始特征图(左)中,微小目标的响应非常微弱,几乎淹没在背景中。经过HFP模块处理后(右),目标的特征响应被显著增强,轮廓更加清晰,与背景的区分度也更高。HS-FPN的整体结构与FPN相似,保留了自底向上和自顶向下的双路径设计。SDP通过在局部区域内精确匹配高低层特

论文标题: HS-FPN: High Frequency and Spatial Perception FPN for Tiny Object Detection
论文链接: https://arxiv.org/abs/2402.10116
代码链接: https://github.com/ShiZican/HS-FPN
01 研究动机
特征金字塔网络(FPN)通过融合多尺度特征,极大地提升了通用目标检测的性能。然而,在处理“微小目标检测”(Tiny Object Detection, TOD)任务时,FPN 仍面临严峻挑战。根据论文的分析,其核心问题可归结为三点:
- 特征信息匮乏:微小目标本身像素面积小,经过骨干网络的多次下采样后,其在特征图上的表示可能仅剩几个像素,有效特征信息严重不足。FPN虽融合了多层特征,但并未直接增强微小目标自身的特征表达。
- 网络关注度不足:微小目标的特征响应微弱,易被背景噪声淹没。FPN对各层特征采用统一的处理方式(如1x1卷积、特征相加),缺乏对微小目标特征的特殊“关照”,无法有效聚焦于这些关键但微弱的信号。
- 空间感知能力缺失:FPN通过简单的逐像素相加来融合高层与低层特征。这种方式忽略了特征的空间依赖关系,尤其是在上采样过程中可能引入的像素偏移,会导致微小目标的特征在不同层级间无法精确对齐。
为解决上述问题,该研究从频域分析和空间依赖建模两个角度出发,提出了一个新颖的特征金字塔网络——HS-FPN。
02 HS-FPN 整体架构
HS-FPN的整体结构与FPN相似,保留了自底向上和自顶向下的双路径设计。其核心创新在于横向连接(Lateral Connection)部分,引入了两个关键模块:高频感知模块(HFP)和空间依赖感知模块(SDP)。

- 自底向上:骨干网络(如ResNet)提取不同阶段的特征图 { C 2 , C 3 , C 4 , C 5 } \{C_2, C_3, C_4, C_5\} {C2,C3,C4,C5}。
- 自顶向下:高层特征图 P i + 1 P_{i+1} Pi+1 经过上采样后,与经过增强的当前层特征图 C i C_i Ci 进行融合,生成新的金字塔特征 P i P_i Pi。
- 横向连接创新:
- C i C_i Ci 首先通过 HFP 模块,以增强其中微小目标的特征表达。
- 增强后的 C i C_i Ci 与上采样后的 P i + 1 P_{i+1} Pi+1 一同送入 SDP 模块,以建立跨层级的空间依赖关系,精确融合特征。
03 核心模块详解
3.1 高频感知模块 (High Frequency Perception, HFP)
HFP模块旨在解决FPN特征信息匮乏和关注度不足的问题。其设计灵感来源于传统图像处理:微小目标的边缘、纹理等细节信息主要对应频域中的高频分量,而大面积的平滑背景则对应低频分量。通过增强高频信号,可以有效凸显微小目标。
设计思路:高频信息提取 → 双路径注意力(通道与空间)→ 特征融合

-
高频响应生成 (High Frequency Response Generation):
- 输入特征图 C i C_i Ci 首先通过离散余弦变换 (DCT) 转换到频域。
- 应用一个预设的高通滤波器 (High-Pass Filter),该滤波器是一个二值矩阵,通过屏蔽左上角的低频区域,仅保留右下角的高频信息。
- 最后通过逆离散余弦变换 (iDCT) 将保留的高频信息转换回空间域,得到高频响应图 F i F_i Fi。 F i F_i Fi 的维度与 C i C_i Ci 相同。
-
双路径注意力机制 (Dual-path Attention):
- 通道路径 (Channel Path):高频响应图 F i F_i Fi 富含微小目标的特征信息。通过对其进行全局平均池化(GAP)和全局最大池化(GMP)来提取通道统计量,再经过卷积层生成通道注意力权重 u C P u_{CP} uCP。该权重作用于原始特征图 C i C_i Ci,使得网络能够重点关注那些包含更多微小目标信息的特征通道。
- 空间路径 (Spatial Path):直接利用高频响应图 F i F_i Fi 作为空间掩码。通过一个1x1卷积聚合 F i F_i Fi 的通道信息,生成空间注意力权重 u S P u_{SP} uSP。将其与原始特征图 C i C_i Ci 逐像素相乘,能够强化微小目标所在的空间区域,抑制背景干扰。
-
特征融合与输出:
- 将通道路径和空间路径的输出特征相加,并经过一个3x3卷积和归一化处理,进一步整合信息并稳定分布。
- 最终输出增强后的特征图 C i H F P C_i^{HFP} CiHFP,其维度与输入 C i C_i Ci 保持一致,确保了模块的即插即用性。
3.2 空间依赖感知模块 (Spatial Dependency Perception, SDP)
SDP模块旨在解决FPN缺乏空间感知能力的问题,尤其用于修正上采样带来的特征错位。它借鉴了Transformer中的注意力机制,但计算方式有所不同。

- 输入:经过HFP增强的当前层特征 C i C_i Ci 和上采样后的高层特征 P i + 1 u P_{i+1}^u Pi+1u。
- 计算过程:
- 通过三个独立的1x1卷积,分别从 C i C_i Ci 生成Query (Q),从 P i + 1 u P_{i+1}^u Pi+1u 生成Key (K) 和 Value (V)。
- 将Q, K, V划分为若干个特征块 (Feature Blocks)。
- 在每个特征块内部,计算Q中每个像素与K中所有像素的相似度,得到注意力矩阵。这是一种块内像素级的交叉注意力。
- 该注意力矩阵随后作用于V,生成加权后的新特征。
- 最后,将所有处理后的特征块拼接回原始尺寸,并与输入特征 C i C_i Ci 相加,得到富含空间依赖信息的融合特征。
这个过程的数学表达如下,其中 j j j 代表第 j j j 个特征块:
a j = Softmax ( q j × k j T C ) , 1 ≤ j ≤ n a_j = \text{Softmax}\left(\frac{q_j \times k_j^T}{\sqrt{C}}\right), \quad 1 \le j \le n aj=Softmax(Cqj×kjT),1≤j≤n
公式1: SDP 模块中注意力矩阵的计算(源自论文 Formula 3)。
SDP通过在局部区域内精确匹配高低层特征,有效缓解了因上采样导致的像素不对齐问题,并利用高层特征丰富的语义信息来指导和丰富低层的微小目标特征。
04 实验效果与分析
4.1 模块有效性验证(消融实验)
论文在AI-TOD数据集上进行了详细的消融实验,验证了HFP及其各组件(通道路径CP、空间路径SP)以及SDP模块的有效性。

- 基线 (Baseline):标准的FPN(表1第一行),AP为20.2。
- HFP效果:单独加入HFP模块后(第四行),AP提升至22.4(+2.2),其中对微小目标( A P t AP_t APt)和小型目标( A P s AP_s APs)的提升尤为显著。这證明了HFP通过增强高频特征,确实改善了对小目标的检测能力。
- SDP效果:单独加入SDP模块后(第五行),AP提升至21.3(+1.1),说明建模空间依赖关系是有效的。
- HS-FPN (HFP+SDP):当HFP和SDP同时使用时(最后一行),AP达到了23.6(+3.4),取得了最佳性能,显示了两个模块之间的协同增益效应。
4.2 特征可视化
通过可视化HFP处理前后的特征图,可以直观地看到其增强效果。

从图4可以看出,原始特征图(左)中,微小目标的响应非常微弱,几乎淹没在背景中。经过HFP模块处理后(右),目标的特征响应被显著增强,轮廓更加清晰,与背景的区分度也更高。
05 代码使用方式
HS-FPN被设计为FPN的直接替代品,可以轻松集成到现有的基于MMDetection的目标检测框架中。
适用范围:最适用于微小目标检测任务,如遥感影像分析、无人机视觉、自动驾驶等场景。也可用于任何需要增强高频细节特征的视觉任务。
模块位置:在FPN的横向连接处,替代原有的 1x1卷积 + 相加 结构。
开发者在mmdet/models/necks/fpn.py等FPN实现文件中,可以通过以下步骤集成HS-FPN:
- 定义HFP和SDP模块:实现论文中描述的HFP和SDP模块的PyTorch代码。
- 修改
forward函数:在FPN的forward函数中,修改横向连接的逻辑。# 伪代码示例 # laterals 是骨干网络输出的特征 C2, C3, C4, C5 # used_backbone_levels = [0, 1, 2, 3] # 1. 对每一层应用 HFP 模块 hfp_laterals = [ self.hfp_modules[i](laterals[i]) for i in used_backbone_levels ] # 2. 自顶向下构建金字塔 # 从顶层 P5 开始 prev_feat = hfp_laterals[-1] pyramid_feats = [prev_feat] # 逆序遍历 for i in range(len(used_backbone_levels) - 2, -1, -1): # 上采样高层特征 upsampled_feat = F.interpolate(prev_feat, scale_factor=2, mode='bilinear') # 应用 SDP 模块进行融合 # SDP输入为 (当前层特征, 上采样后的高层特征) prev_feat = self.sdp_modules[i](hfp_laterals[i], upsampled_feat) pyramid_feats.append(prev_feat) # 3. 对输出进行 3x3 卷积 outs = [ self.fpn_convs[i](pyramid_feats[i]) for i in range(len(pyramid_feats)) ]
注意:上述伪代码仅为逻辑展示,具体实现需参考作者提供的源码。该模块具有良好的即插即用性,对原有代码结构的侵入性较低。
更多推荐


所有评论(0)