
图解 DynamicHead 原理从 FPN 多尺度特征到注意力增强检测头的完整数据流【免费下载链接】DynamicHead项目地址: https://gitcode.com/gh_mirrors/dy/DynamicHeadDynamicHead 是 CVPR 2021 提出的一种目标检测头统一框架它通过三种注意力机制尺度感知、空间感知、任务感知大幅提升检测头表示能力却几乎不增加计算开销。本文以 DynamicHead 官方实现为基础用图解方式带你走完从FPN 多尺度特征输入到注意力增强检测头输出的完整数据流零基础也能看懂。DynamicHead 是什么为什么检测头需要注意力传统的目标检测器如 Faster R-CNN、RetinaNet、ATSS通常把检测任务拆成两个独立的子任务分类判断框里是什么物体和回归预测框的位置和大小。它们的检测头往往是几层普通卷积堆叠而成结构固定、缺乏灵活性。而 DynamicHead 的核心思想是检测头不应该一成不变而应该根据输入特征动态调整。它把三种互补的注意力机制连贯地组合在一起尺度感知不同物体大小不同需要融合多个特征层的信息scale-aware空间感知不同空间位置的重要性不同spatial-aware任务感知分类和回归任务对特征的需求不同task-aware关键模块在 dyhead.py 中实现核心类为DyHead和DyConv。第一步FPN 多尺度特征是如何进入 DyHead 的在进入检测头之前输入图像先经过主干网络和 FPN 生成多尺度特征金字塔。以 dyhead_r50_atss_fpn_1x.yaml 为例主干网络ResNet-50输出 res3、res4、res5 三个阶段的特征FPN 进一步生成 P3~P7 五个层级的特征分别对应 stride 8/16/32/64/128每一层特征图的长宽逐层减半通道数统一为 256这些特征被组织成一个字典{level_name: feature_map}传入DyHead。在DyHead.forward中先是x self.backbone(x)得到 FPN 特征再送入由 6 个DyConv堆叠而成的dyhead_tower输入图片 │ ▼ ResNet-50 主干网络 ──► res3 / res4 / res5 │ ▼ FPN 特征金字塔 ──► P3 P4 P5 P6 P7多尺度特征 │ ▼ DyHead 塔6 × DyConv 堆叠 │ ▼ 分类分支 回归分支第二步DyConv——DynamicHead 的最小核心单元DyConv是 DynamicHead 的心脏每个DyConv内部做了三件事。这一节我们逐层拆解它的数据流参考 dyhead.py 中的DyConv.forward。1. 可变形卷积让卷积核学会移动普通卷积的采样点是固定的 3×3 网格而可变形卷积Deformable Conv让每个采样点额外学习一个偏移量 offset和一个调制权重 mask从而让感受野自适应物体的形状。在代码中偏移量由self.offset卷积生成输出 27 个通道18 个通道的偏移 9 个通道的 mask实现见 deform.py 中的ModulatedDeformConv。2. 跨层级特征融合尺度感知注意力的雏形对于第level层的特征DyConv 会同时处理三个来源来源处理方式作用当前层特征直接可变形卷积保持自身信息上一层更粗糙特征可变形卷积后下采样提供更大感受野下一层更精细特征可变形卷积后上采样补充细节信息然后对这三个候选特征分别计算全局平均池化 1×1 卷积得到注意力分数经过 h-sigmoid 归一化后加权融合实现尺度感知——网络学会在哪个尺度上看更清楚。当前层特征 ──┐ 上一层特征 ──┼─► 可变形卷积 ──► 注意力加权融合 ──► DYReLU ──► 输出 下一层特征 ──┘3. DYReLU动态激活函数实现任务感知最后一个关键组件是DYReLUDynamic ReLU实现于 dyrelu.py。普通 ReLU 对所有输入通道一视同仁而 DYReLU 会根据输入特征动态生成激活函数的斜率a和截距bout max(x * a1 b1, x * a2 b2)也就是说不同通道、不同输入激活函数本身都在变化。这一机制让检测头能自适应地区分分类任务和回归任务的不同需求这就是论文中所说的任务感知。第三步6 层 DyConv 堆叠成 DyHead 塔DyHead通过配置NUM_CONVS默认 6控制塔的深度通道数CHANNELS默认为 256配置项定义在 config.py。每一层 DyConv 的输出都作为下一层的输入逐层细化特征最终输出仍保持 FPN 的多尺度结构P3~P7因此可以无缝接入各种检测器RetinaNet直接在特征上做 anchor-based 分类和回归COCO mAP 39.9Faster R-CNN作为 RPN 和 R-CNN 的共享检测头COCO mAP 40.3ATSS自适应训练样本选择 DyHeadCOCO mAP 42.4最优配置第四步更强主干 多尺度训练效果还能再涨DyHead 的另一个亮点是即插即用。把 ResNet-50 换成 Swin-Tiny 主干见 swint.py 和 dyhead_swint_atss_fpn_2x_ms.yaml配合多尺度训练COCO mAP 直接飙到49.8。官方 Model Zoo 的完整对比配置主干检测器COCO mAPdyhead_r50_rcnn_fpn_1xResNet-50Faster R-CNN40.3dyhead_r50_retina_fpn_1xResNet-50RetinaNet39.9dyhead_r50_atss_fpn_1xResNet-50ATSS42.4dyhead_swint_atss_fpn_2x_msSwin-TinyATSS49.8总结一张图看懂 DynamicHead 完整数据流输入图像 ▼ 主干网络ResNet / Swin-T── 提取基础特征 ▼ FPN 特征金字塔P3~P7 多尺度特征── 不同 stride 的特征层 ▼ DyHead 塔 ── 6 × DyConv 逐层堆叠 │ ├─ 可变形卷积offset mask── 自适应形状 │ ├─ 跨层注意力加权 ── 尺度感知 │ └─ DYReLU 动态激活 ── 任务感知 ▼ 分类分支 / 回归分支 ── 输出最终检测结果简单来说DynamicHead 用注意力机制统一了目标检测头用可变形卷积适配目标形状用跨层加权融合多尺度信息用动态激活函数区分任务差异。它不需要增加网络深度和宽度就能让检测精度普遍提升 2~4 个点是花小钱办大事的经典设计。如果你想亲手跑通官方训练命令非常简单python train_net.py --config configs/dyhead_r50_atss_fpn_1x.yaml --num-gpus 8克隆仓库地址为 https://gitcode.com/gh_mirrors/dy/DynamicHead 配合 Detectron2 即可开始你的 DynamicHead 实验之旅。【免费下载链接】DynamicHead项目地址: https://gitcode.com/gh_mirrors/dy/DynamicHead创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考