【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection
论文地址:https://arxiv.org/abs/2405.14458
文章目录
- 论文小结
- 论文简介
- 论文方法
- 为NMS-free训练的一致性双标签分配
- 双标签分配
- 一致性匹配度量
- 效率-精度整体驱动的模型设计
- 效率驱动模型设计
- 轻量级分类检测头
- Spatial-channel 解耦下采样
- Rank-guided block design
- 精度驱动模型设计
- 大Kernel卷积
- Attention
- 论文实验
- 对比实验
- 消融实验
- 模块消融实验
- NMS-free训练实验
- 效率驱动模型设计
- 精度驱动模型设计
论文小结
简单来说,本文介绍了一个无NMS后处理的检测方法,并在COCO数据集上达到与NMS-based的方法一致的精度。因为无NMS,所以速度更快。
一般情况来说,一对一(gt object VS positive sample, o2o)的标签分配策略会导致模型收敛性能较低。作者提出使用一对多(o2m)的标签分配策略来辅助训练,并提出一个一致性指标来协调o2o标签和o2m标签。
此外,文中提出使用dwConv来加速模型推理,使用基于dwConv的attention来提升精度。同时,作者对分类检测头和回归检测头进行消融实验,明确分类检测头存在优化空间。
论文简介
YOLO系列的前作基本都含有网络的前馈部分以及NMS后处理部分。使用NMS的原因是因为o2m的标签分配策略(单个GT框对应多个正样本训练,也是平衡正负样本的一种方式)会导致预测时产生密集正样本,需要在最后选出最佳预测。此外,NMS对参数敏感,也让YOLO无法实现最佳端到端部署。
摆脱NMS的限制有两个思路:
- 采用端到端的DETR架构。采用混合模型将DETR推向实时应用领域,如RT-DETR。此种方法复杂度高;
- 探索端到端的CNN-based检测器,使用one-to-one的标签分配方式。
有一些论文探索了端到端的CNN-based检测器,但由于缺乏像one-to-many标签分配的大量监督信息,最终检测器的性能差点意思。作者为NMS-free YOLO提出了双标签分配策略和一致性匹配度量。简单来说,就是使用o2m的作为辅助监督分支,从而为网络训练提供大量监督信息。然后再提出一个指标来让辅助监督与推理时的o2o分支监督和谐。
作者在模型架构设计上,从效率和性能上分别进行考虑。
从效率上来说,作者做了三点优化:
- 作者发现分类检测头的重要性不如回归检测头,所以对分类检测头进行了优化;
- 对下采样层做了优化。一般使用下采样卷积的时候,会同时提升channel,这会在较高分辨率多进行计算。所以作者采用dwConv的策略,即使用pwConv升channel,使用dwConv下采样;
- 排序引导块设计。简单来说,对block的重要性进行排序,逐步进行高效率block的替换,直至性能有所下降;
从性能上考虑,作者也做了两点尝试:
- 大kernel卷积的应用。但即使是大核dwConv,也会带来不少计算量的增加,降低延迟。故作者选择在网络的后半部分应用;
- attention的应用。attention的设计是transformer block的样式,但由于复杂度较高,所以在attention的输入上做了个channel split处理,以降低计算量;
速度的测试是在Tesla T4 GPU上进行的,性能和效率如上图1所示。对比YOLOv8,YOLOv10的参数量和AP都要更优;对比YOLOv9,YOLOv10的参数量更低,速度更快。
论文方法
为NMS-free训练的一致性双标签分配
双标签分配
在前作的YOLOs中,经常使用TAL方法为每个实例分配多个正样本。这种一对多分配会产生大量监督信号,帮助模型优化和达到优秀性能。这也让YOLOs依赖于NMS后处理。
一对一分配只有一个预测对应GT来避免NMS后处理,这就导致了弱监督,进而导致次优精度和次优收敛速度。其他作者的一对一分配方法,通常需要引入额外的推理开销或产生次优性能。
本文提出的NMS-free训练方法,是使用双标签分配及使用一致性匹配度量来达到高效高性能的结果。换句话说,是在训练时使用双检测头分支,一个o2o分支,一个o2m分支,如下图所示。如此设计,backbone和neck能充分接受o2m标签分配带来的大量监督信息,且在推理时丢弃o2m分支即可。
一致性匹配度量
使用一个指标来量化预测和实例之间的一致性水平,如下面公式所示:其中
b
^
\hat{b}
b^为预测框,
b
b
b为实例框,
s
s
s是空间先验(anchor point),
α
\alpha
α和
β
\beta
β是平衡因子。o2o(
m
o
2
o
=
m
(
α
o
2
m
,
β
o
2
m
)
m_{o2o}=m(\alpha_{o2m}, \beta_{o2m})
mo2o=m(αo2m,βo2m))和o2m(
m
o
2
m
=
m
(
α
o
2
o
,
β
o
2
o
)
m_{o2m}=m(\alpha_{o2o}, \beta_{o2o})
mo2m=m(αo2o,βo2o))分开统计该度量。
m
(
α
,
β
)
=
s
⋅
p
α
⋅
I
O
U
(
b
^
,
b
)
β
m(\alpha,\beta)=s\cdot p^{\alpha} \cdot {IOU}(\hat{b}, b)^{\beta}
m(α,β)=s⋅pα⋅IOU(b^,b)β
作者发现o2m和o2o分支的监督差异主要在不同分类目标上面。其中,预测最大的IoU为 u ∗ u^\ast u∗,最大的o2m和o2o分别为 m o 2 m ∗ 和 m o 2 o ∗ m^\ast_{o2m}和m^\ast_{o2o} mo2m∗和mo2o∗,假定o2m产生的正样本集为 Ω \Omega Ω,o2o分支选择第 i i i个预测的指标 m o 2 o , i = m o 2 o ∗ m_{o2o,i}=m^\ast_{o2o} mo2o,i=mo2o∗。我们获得的分类目标 t o 2 m , i = u ∗ ⋅ m o 2 m , j m o 2 m ∗ < u ∗ t_{o2m,i}=u^{\ast}\cdot \dfrac{m_{o2m,j}}{m^\ast_{o2m}}\lt u^\ast to2m,i=u∗⋅mo2m∗mo2m,j<u∗对于 j ∈ Ω j\in\Omega j∈Ω, t o 2 o , i = u ∗ ⋅ m o 2 o , i m o 2 o ∗ = u ∗ t_{o2o,i}=u^\ast\cdot\dfrac{m_{o2o,i}}{m^\ast_{o2o}}=u^\ast to2o,i=u∗⋅mo2o∗mo2o,i=u∗。两个分支的监督差距由 1 - Wasserstein距离1获得。
A = t o 2 o , i − I ( i ∈ Ω ) t o 2 m , i + ∑ k ∈ Ω ∖ { i } t o 2 m , k (1) A=t_{o2o,i}-\mathbb{I}(i\in \Omega)t_{o2m,i}+\sum_{k\in\Omega\setminus\{i\}}t_{o2m,k}\tag{1} A=to2o,i−I(i∈Ω)to2m,i+k∈Ω∖{i}∑to2m,k(1)
上述公式(1),当 t o 2 m , i t_{o2m,i} to2m,i上升时,gap会下降。当 t o 2 m , i = u ∗ t_{o2m,i}=u^\ast to2m,i=u∗时,gap达到最小,如上面的图2(a)所示。o2o和o2m的两个权重参数 α \alpha α和 β \beta β之间也存在关系,作者认为应该 α o 2 o = r ⋅ α o 2 m \alpha_{o2o}=r\cdot \alpha_{o2m} αo2o=r⋅αo2m, β o 2 o = r ⋅ β o 2 m \beta_{o2o}=r\cdot\beta_{o2m} βo2o=r⋅βo2m,即 r r r为一样的。故o2m最好的正样本,也是o2o检测最好的。因此两个检测头可以持续和谐地优化。为简化,作者设 r = 1 r=1 r=1。
一致性匹配的作用如上图2(b)所示。
效率-精度整体驱动的模型设计
效率驱动模型设计
轻量级分类检测头
在YOLO系列中,分类头和回归头通常用一样的架构。但其表现出不一样的计算量。在类别较多时,分类头的计算量是回归头的好几倍。以YOLOv8为例,分类图的参数量和计算量是检测头的2.5倍和2.4倍。但从下表的消融实验结果来看,回归头承担了YOLOs大部分的性能,故作者打算简化分类头。使用2个dwCon 3 × 3 3\times3 3×3接着1个Conv 1 × 1 1\times1 1×1来组成分类头。
Spatial-channel 解耦下采样
常规的下采样是使用 stride 为 2 2 2的Conv 3 × 3 3\times3 3×3,同时让channel变为输入的 2 2 2倍。在高分辨率进行更多的卷积,这会导致计算量较大。所以作者采用如下方案进行下采样:使用Conv 1 × 1 1\times1 1×1升channel,使用dwConv 3 × 3 3\times3 3×3下采样。这让计算量从 O ( 9 2 H W C 2 ) \Omicron(\frac92HWC^2) O(29HWC2)降到 O ( 2 H W C 2 + 9 2 H W C ) \Omicron(2HWC^2+\frac92HWC) O(2HWC2+29HWC),参数量从 O ( 18 C 2 ) \Omicron(18C^2) O(18C2)降到 O ( 2 C 2 + 18 C ) \Omicron(2C^2+18C) O(2C2+18C)。
Rank-guided block design
YOLOs经常在不同的stage中使用一样的基础block。作者统计每个stage上最后一个基础block的最后一个Conv,统计大于阈值的数量。统计结果如下图3(a)所示,深stage和大模型有更多的冗余。这表示简单应用一样的block是次优的,有冗余的。
作者首先设计了一个紧凑可逆块(Compact Invert Block,CIB),主要是采用了dwConv和pwConv,如上图3(b)。以此block为基础,构建ELAN block等复杂Block。
然后,作者提出一种排序引导的block分配策略,即按照图3(a)这样的统计顺序,一步步将冗余度较高的stage进行基础block的替换,直到性能下降为止。伪代码如下图所示
精度驱动模型设计
大Kernel卷积
大Kernel dwConv能扩大感受野,加强模型容量。但简单应用它们可能会导致用于检测小目标的浅层特征受到污染。同时,在高分辨率阶段应用会带来 I/O 开销和延迟。所以,作者选择只在深层stage的CIB中使用大kernel dwConv。具体来说,是从dwConv 3 × 3 3\times3 3×3提升到dwConv 7 × 7 7\times7 7×7。此外,加入重参数分支dwConv 3 × 3 3\times3 3×3来缓解优化问题。
当深度增加时,感受野自然会扩大。所以,作者选择只在小尺度模型上应用大kernel卷积。
Attention
本文使用的attention叫做 Partial self-attention(PSA) ,主题结构是transformer的attention block。
整体结构如上图3©所示:输入经过Conv 1 × 1 1\times1 1×1之后按照channel划分为 2 2 2部分。只有一部分放入 N P S A N_{PSA} NPSA 个attention block中。然后两部分再Concat起来,接着Conv 1 × 1 1\times1 1×1。
此外,遵循[21]将Query和Key的维度设为MHSA的一半,并将LN替换为BN,从而快速推理。
为了快速推理,作者选择只在低分辨率的stage4之后使用,避免自注意机制的二次计算复杂度带来的太大开销。在此情况下,就可以将全局表示学习能力融入到YOLO中,而只需少量计算开销。
论文实验
论文实验以YOLOv8为baseline,可能是因为论文发布时,YOLOv9-t 和YOLOv9-s 模型未开放出来,无法测试延迟等。YOLOv10的相关性能指标都是training from scratch的,同YOLOv9一样。YOLOv10-B模型是YOLOv10-M模型的factor放大版。
论文的延迟都是在Tesla T4 GPU,TensorRT FP16上测试的。
训练参数如下表所示:
YOLOv10相关指标如下表所示:
对比实验
与其他SOTA方法的对比如下表所示:YOLOv10比YOLOv8的AP高,延迟低,参数少,计算量少。 L a t e n c y f Latency^f Latencyf是只看网络forward过程,不计算后处理耗时。只看forward过程,YOLOv10也是最有效率的。
消融实验
模块消融实验
YOLOv10每个模块的消融实验如下表所示,对中等模型和小模型都进行了实验。
在小模型上,NMS-free快了
4.63
4.63
4.63ms,AP少了
0.6
%
0.6\%
0.6%,Accuracy有效涨点
1.8
%
1.8\%
1.8%AP,时间只增加
0.18
0.18
0.18ms。
在中模型上,efficiency就有较大区别,能够快
0.65
0.65
0.65ms,Accuracy涨
0.7
%
0.7\%
0.7%AP。
NMS-free训练实验
从表
3
3
3可以看出,双标签分配方式达到与o2m相近的结果,简单的o2o标签分配方式有较大的AP下降(
1.5
%
↓
1.5\%\downarrow
1.5%↓)。
从表
4
4
4可以看出,引入一致性匹配让o2o和o2m检测头更协调。
α
\alpha
α和
β
\beta
β使用相同
r
r
r有最佳性能。默认
α
o
2
m
=
0.5
,
β
o
2
m
=
6.0
\alpha_{o2m}=0.5,\beta_{o2m}=6.0
αo2m=0.5,βo2m=6.0,
α
o
2
o
=
r
⋅
α
o
2
m
,
β
o
2
o
=
r
⋅
β
o
2
m
\alpha_{o2o}=r\cdot\alpha_{o2m},\beta_{o2o}=r\cdot\beta_{o2m}
αo2o=r⋅αo2m,βo2o=r⋅βo2m。
效率驱动模型设计
下表 5 5 5展示了(1) lightweight classification head;(2) spatial-channel decouple downsample;(3) rank-guided block的消融实验结果。
下表
6
6
6展示了无class error和regression error的对照组。
A
P
w
/
o
r
v
a
l
AP^{val}_{w/o\ r}
APw/o rval比
A
P
w
/
o
c
v
a
l
AP^{val}_{w/o\ c}
APw/o cval更高,表示消除回归误差有更大的改善。性能瓶颈更多地在回归任务上。
下表
7
7
7展示了采用了pwConv和dwConv后,原策略优化性能和本文优化策略的对比。
下表
8
8
8展示了以IRB(Inverted Residual block)作为baseline(
43.7
%
43.7\%
43.7%AP),添加一个dwCon
3
×
3
3\times3
3×3命名为“IRB-DW”,这带来了
0.5
%
0.5\%
0.5%AP的增长。对比
I
R
B
−
D
W
IRB-DW
IRB−DW,本文的CIB又增长了
0.3
%
0.3\%
0.3%AP。
下表
9
9
9展示了使用高效CIB逐步代替各阶段的瓶颈块,按照图
3
3
3(a)的顺序
S
t
a
g
e
8
−
4
−
7
−
3
−
5
−
1
−
6
−
2
Stage\ 8-4-7-3-5-1-6-2
Stage 8−4−7−3−5−1−6−2,在阶段
7
7
7才有所下降。故本文CIB替换应用只在stage8和stage4.
精度驱动模型设计
下表
10
10
10展示了Large Kernel和PSA的消融实验,
下表
11
11
11,Large Kernnel的Kernel Size实验,Kernel Size为
7
7
7效果最好。此外,没有重参数分支时,少
0.1
%
0.1\%
0.1%AP。
下表
12
12
12,在YOLOv10-N/S上,Large Kernel带来小幅提升。
下表
13
13
13,引入transformer快,标为"Trans"。对比下,PSA带来
0.3
%
0.3\%
0.3%AP提升,且降低
0.05
0.05
0.05ms的延迟。对PSA block的重复数量进行实验,
N
P
S
A
N_{PSA}
NPSA=2能带来
0.2
%
0.2\%
0.2%AP提升,但增加了
0.1
0.1
0.1ms延迟。故选择
N
P
S
A
=
1
N_{PSA}=1
NPSA=1。
https://arxiv.org/abs/1806.05500 ↩︎