赞
踩
工业界追求高性能、低延迟的目标检测算法,研究人员于是聚焦于单阶段目标检测,探索高效的网络结构和训练策略。YOLOv5/v6/v7、YOLOX 和 PP-YOLOE 在 COCO 数据集上实现了不错的精度-速度平衡,得到广泛应用,但它们仍有提升空间。
本文提出的 DAMO-YOLO,对 YOLO 做的改进包括 MAE-NAS 主干网络、高效的 RepGFPN neck、ZeroHead、AlignedOTA 和蒸馏增强。
作者使用 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。
特征金字塔网络聚合由主干网络提取的不同分辨率的特征,是目标检测算法中关键而有效的一环。传统的 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 严重。通过分析,总结出原因有以下几点:
于是作者提出了 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。如下表所示,这些改进没有增加计算成本,却实现了更高的精度。
目前先进的目标检测方法都使用了解耦 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。下表
中比较了各标签分配方法。
知识蒸馏是提升小模型性能的有效办法。但是直接在 YOLO 模型上使用知识蒸馏并不一定能取得显著改进,因为超参数很难优化,而且特征包含很多噪声。作者采用基于特征的蒸馏,在中间特征图上蒸馏识别和定位信息。作者进行了多个快速验证实验,选择合适的蒸馏方法,结果如下表所示。CWD 最适合本文方法。
本文提出的蒸馏策略包含两步:
DAMO-YOLO 对蒸馏做了两点改进:
此外,关于蒸馏,作者有两个发现可以改进蒸馏。一是平衡蒸馏和任务损失。如下图,当我们关注在蒸馏( 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 的特征蒸馏。原因是,当最终输出和蒸馏的特征图之间的差距较小时,蒸馏对决策的影响要更好。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。