1. 解决了什么问题?
工业界追求高性能、低延迟的目标检测算法,研究人员于是聚焦于单阶段目标检测,探索高效的网络结构和训练策略。YOLOv5/v6/v7、YOLOX 和 PP-YOLOE 在 COCO 数据集上实现了不错的精度-速度平衡,得到广泛应用,但它们仍有提升空间。
- 网络结构对于目标检测非常关键,通过 NAS 技术搜索出检测友好的网络结构,许多要领先于人工设计的网络。
- 对于检测器来说,融合高层级语义特征和低层级空间特征非常重要,neck 对于检测框架来说非常关键。本文通过一系列实验发现,“大 neck、小 head” 能取得更好的表现。因此作者舍弃了以前 YOLO 的检测 head,只保留了一个任务映射层,节省下来的计算量被移动到 neck 里面。
- 动态标签分配策略如 OTA 和 TOOD 效果都要比静态标签分配好,但是错位问题仍然存在。
- 知识蒸馏通过大模型的监督信号,能提升小模型的表现,非常适合实时目标检测的设计。但由于超参数很难优化,而且特征里面的噪声太多,直接在 YOLO 系列使用知识蒸馏通常不会取得明显提升。
2. 提出了什么方法?
本文提出的 DAMO-YOLO,对 YOLO 做的改进包括 MAE-NAS 主干网络、高效的 RepGFPN neck、ZeroHead、AlignedOTA 和蒸馏增强。
2.1 MAE-NAS 主干网络
作者使用 MAE-NAS 来获得不同计算成本下最优的网络结构。MAE-NAS 根据信息理论对初始化网络做排序,无需训练网络,构建一个代理。该搜索过程只需几个小时,要远远短于训练耗时。
作者使用搜索模块 “ k1kx \text{k1kx} k1kx” 来设计网络空间的主干部分,该模块与 Darknet-53 里的模块相似。受 YOLOv6 启发,作者用 GPU 推理延迟而非 FLOPs 作为目标预算。搜索完成后,作者在主干网络使用空间金字塔池化(SPP)、Focus 和 Cross Stage Partial(CSP) 模块。
下表列出了不同尺度的 CSP-Darknet 和 MAE-NAS 主干网络的比较,MAE-ResNet 表示 MAE-NAS 主干里面只有 SPP 和 Focus 模块,MAE-CSP 表示里面还包括了 CSP 模块。此外,“S”(small) 和 “M”(medium) 分别表示大小不同的主干网络。为了平衡精度和速度,在 “T”(tiny) 和 “S” 中使用了 MAE-ResNet,在 “M” 中使用了 MAE-CSP。
2.2 Efficient RepGFPN
特征金字塔网络聚合由主干网络提取的不同分辨率的特征,是目标检测算法中关键而有效的一环。传统的 FPN 加入了一个 top-down 路径来融合多尺度特征。PAFPN 增加了一个 bottom-up 路径聚合网络,计算成本也上升了。BiFPN 去除了只有一个输入 edge 的 nodes,在同一层级的原始输入的位置增加了 skip-link。Generalized-FPN(GFPN) 能充分地交换高层级语义信息和低层级空间信息,取得了 SOTA 表现。在前一层和当前层的特征中,GFPN 融合多尺度特征。此外, log 2 ( n ) \log_2(n) log2(n)个 skip-layer 连接提供了更有效的信息交流,使信息深入到网络内部。GFPN 能有效提高 YOLO 模型的精度,但是延迟也要比 YOLO 系列的 PANet 严重。通过分析,总结出原因有以下几点:
- 不同尺度的特征图共享相同的通道维度;
- Queen-fashion 操作无法满足实时检测的要求;
- 基于卷积的跨尺度特征融合的效率比较低。
于是作者提出了 Efficient-RepGFPN,满足实时检测的要求。
-
由于不同尺度特征图的 FLOPs 差异巨大,很难在有限的计算成本下,让每一个尺度的特征图共享同一个通道维度。因此在 neck 融合特征时,不同尺度的特征图对应着不同的通道维度设定。上表展示了通道数相同和不同时的表现,可以看到 neck 深度(bottleneck 重复次数)和宽度的平衡对模型表现很有益。当深度为 3、宽度为 ( 96 , 192 , 384 ) (96,192,384) (96,192,384)时的表现是最佳的。
-
GFPN 通过 queen-fashion 增强特征交流,但会增加许多上采样和下采样操作。下表比较了这些上采样和下采样操作, ↘ , ↗ \searrow,\nearrow ↘,↗分别表示下采样和上采样操作。可以看到,上采样操作只增加了 0.3 0.3 0.3mAP,但延迟增加了 0.6 0.6 0.6ms。因此作者去除了 queen-fashion 里的上采样操作。
-
在特征融合模块,先用 CSPNet 替换原 3 × 3 3\times 3 3×3卷积特征融合,取得了 4.2 4.2 4.2mAP 的提升。然后对 CSPNet 做改进,加入了重参数化和 ELAN。如下表所示,这些改进没有增加计算成本,却实现了更高的精度。
2.3 ZeroHead and AlignOTA
目前先进的目标检测方法都使用了解耦 head,虽然提高了 AP,但延迟也明显增加了。作者进行了一系列实验,发现“大 neck、小 head” 效果最好。因此,在 head 里面只保留了一个映射层,即分类任务一个线性层、回归任务一个线性层。因为 head 里没有了需要训练的层,作者将该 head 命名为 ZeroHead,它节省出的计算量可以用于 RepGFPN neck。ZeroHead 可以看作为一个耦合的 head。在损失函数中,分类使用的 QFL,回归监督使用的 DFL 和 GIoU 损失。QFL 让网络学习分类和定位的联合表征。DFL 用 general distribution 对边框坐标建模,预测的边框更加可靠和准确。训练损失如下:
L o s s = α ⋅ l o s s Q F L + β ⋅ l o s s D F L + γ ⋅ l o s s G I o U Loss=\alpha\cdot loss_{QFL}+\beta\cdot loss_{DFL}+\gamma\cdot loss_{GIoU} Loss=α⋅lossQFL+β⋅lossDFL+γ⋅lossGIoU
标签分配也很关键,它为 anchors 分配分类目标和回归目标。像 OTA 和 TOOD 这些分配方法取得了明显的性能改进。动态标签分配会根据预测框和目标框之间的分配代价来分配标签。虽然在损失里面,对齐分类和回归任务被广泛研究,但是在标签分配里面,对齐分类和回归任务却鲜有提及。尽管动态分配缓解了该问题,但由于分类和回归损失(如交叉熵损失和 IoU 损失)的不均衡,该问题仍然存在。于是作者在分类代价中加入了 focal loss,将预测框和目标框的 IoU 作为软标签,形式如下:
A
s
s
i
g
n
C
o
s
t
=
C
r
e
g
+
C
c
l
s
AssignCost=C_{reg} + C_{cls}
AssignCost=Creg+Ccls
α
=
I
o
U
(
r
e
g
g
t
,
r
e
g
p
r
e
d
)
\alpha=IoU(reg_{gt}, reg_{pred})
α=IoU(reggt,regpred)
C
r
e
g
=
−
ln
(
α
)
C_{reg}=-\ln(\alpha)
Creg=−ln(α)
C
c
l
s
=
(
α
−
c
l
s
p
r
e
d
)
2
×
C
E
(
c
l
s
p
r
e
d
,
α
)
C_{cls}=(\alpha-cls_{pred})^2\times CE(cls_{pred},\alpha)
Ccls=(α−clspred)2×CE(clspred,α)
这样,我们就可以为每个目标选择分类和回归对齐的样本。本文是从全局的角度来表示对齐的分配代价,命名为 AlignOTA。下表
中比较了各标签分配方法。
2.4 蒸馏
知识蒸馏是提升小模型性能的有效办法。但是直接在 YOLO 模型上使用知识蒸馏并不一定能取得显著改进,因为超参数很难优化,而且特征包含很多噪声。作者采用基于特征的蒸馏,在中间特征图上蒸馏识别和定位信息。作者进行了多个快速验证实验,选择合适的蒸馏方法,结果如下表所示。CWD 最适合本文方法。
本文提出的蒸馏策略包含两步:
- 在第一个阶段(前 284 个 epochs),打开 strong mosaic,教师网络对学生网络进行蒸馏。面对极端增强的数据分布,学生网络在教师网络指导下能进一步平滑地提取出信息。
- 在第二个阶段(后 16 个 epochs),关闭 mosaic,学生网络自己做微调。这一阶段不做蒸馏,是因为教师网络会凭借经验,想要在一个陌生的环境里面拉住学生网络,破坏学生网络的表现。
DAMO-YOLO 对蒸馏做了两点改进:
- Align Module。它是一个线性映射层,将学生特征的分辨率( C , H , W C,H,W C,H,W)适配到与教师特征一样。迫使学生特征直接去近似教师特征,所带来的提升不如自适应模仿所带来的显著。
- 通道动态调节。对教师和学生特征使用归一化操作,弱化真实数值差异造成的影响。减去均值后,各通道的标准差就作为 KL 损失的调节系数使用。
此外,关于蒸馏,作者有两个发现可以改进蒸馏。一是平衡蒸馏和任务损失。如下图,当我们关注在蒸馏( w e i g h t = 10 weight=10 weight=10)时,学生网络的分类损失收敛就较慢,副作用明显。当损失权重较小( w e i g h t = 0.5 weight=0.5 weight=0.5)时,能很好地平衡蒸馏和分类任务。其次,检测器的 head 的深浅。合理地降低 head 的深度有助于 neck 的特征蒸馏。原因是,当最终输出和蒸馏的特征图之间的差距较小时,蒸馏对决策的影响要更好。