1. 解决了什么问题?
单阶段目标检测器能很好地平衡速度和精度,YOLO 系列是其中的代表。YOLOX 采用了 anchor-free 范式,加入了动态标签分配以提升检测表现,在 Tesla V100 上取得了 50.1 mAP,速度是 68.9 FPS。本文提出的 PP-YOLOE 为了适配各种硬件平台,没有使用可变形卷积、Matrix NMS 等操作。如下图,PP-YOLOE 在速度和精度方面领先于 YOLOX 和 YOLOv5。
2. 提出了什么方法?
2.1 PP-YOLOv2
基线模型使用的是 PP-YOLOv2,
- 主干网络是 ResNet50-vd(使用可变形卷积);
- neck 是带 SPP 层和 DropBlock 的 PAN;
- head 是一个轻量级的 IoU-aware head;
- 在主干网络中使用 ReLU,而在 neck 里面替换为 mish 激活函数;
- 对于每个 ground-truth 目标,只分配一个 anchor box;
- 除了分类损失、回归损失及 objectness 损失,也使用了 IoU loss 和 IoU-aware loss 来提升表现。
2.2 PP-YOLOE 改进
Anchor-free
Anchor 机制会引入不少的超参数,宽高比、个数等人为设计使其对其它数据集的泛化性不好。作者参照 FCOS,在每个像素点只放置一个 anchor point,为将 ground-truths 分配到相应的特征图上,设置三个检测 heads 的上界和下界。然后计算出边框的中心点,选择最接近该中心点的像素作为正样本。参照 YOLO 系列,预测一个 4D 向量
(
x
,
y
,
w
,
h
)
(x,y,w,h)
(x,y,w,h)完成回归。如下表,该改进能提高计算速度,但会牺牲 0.3 AP。下表中,作者在 COCO-val 上做的消融实验,使用
640
×
640
640\times 640
640×640的输入分辨率,精度是 FP32,在 Tesla-V100 上做的测试,没加后处理。
Backbone and Neck
SOTA 网络普遍采用了残差连接、密集连接等技术。残差连接缓解了梯度消失问题,可以看作为模型集成方法。密集连接通过多样的感受野来聚合中间特征,在目标检测任务上效果不错。CSPNet 使用 cross stage 密集连接,降低了计算量,却没有牺牲精度。该方法在 YOLOX、YOLOv5、VoVNet、TreeNet 等目标检测和实例分割任务上都有不错的表现。本文将残差连接和密集连接结合,提出了 RepResBlock,应用在主干网络和 neck 里面。
训练时,RepResBlock 结构如下图(b) 所示,推理时如下图© 所示。推理时,将 RepResBlock 重参数化为一个 RepVGG 风格的、ResNet-34 的残差模块,如下图(d) 所示。使用该 RepResBlock 构建主干网络和 neck。与 ResNet 相似,CSPRepResNet 包括一个主干和三个卷积层,后面是由 RepResBlock 组成的四个 stages。在每个 stage,cross stage partial connections 避免了
3
×
3
3\times 3
3×3卷积造成的大量的参数及计算开支。在主干网络中,作者使用了 ESE (Effective Squeeze and Extraction) 来施加通道注意力。作者使用了 RepResBlock 和 CSPRepResStage 来构建 neck,但是移除了 RepResBlock 和 ESE 层的短路连接。
作者使用了一个宽度乘数
α
\alpha
α和深度乘数
β
\beta
β来缩放主干网络和 neck。因此,我们可以得到一系列不同参数量和计算量的检测网络。主干网络的宽度设定范围是
[
64
,
128
,
256
,
512
,
1024
]
\left[64,128,256,512,1024\right]
[64,128,256,512,1024],深度设定范围是
[
3
,
6
,
6
,
3
]
\left[3,6,6,3\right]
[3,6,6,3]。Neck 的宽度设定范围为
[
192
,
384
,
768
]
\left[192,384,768\right]
[192,384,768],深度设定为 3。下表展示了不同模型的
α
,
β
\alpha,\beta
α,β取值。这些改进能带来
0.7
%
0.7\%
0.7% AP 的提升。
Task Alignment Learning
为了进一步提升准确率,作者使用了标签分配策略。YOLOX 使用 SimOTA 标签分配的策略。TOOD 使用 TAL 进一步解决了分类和定位错位的问题,包括一个动态标签分配和一个任务对齐损失。动态标签分配的意思就是随着检测结果和损失而变化。根据预测结果,它为每个 ground-truth 动态分配若干个 positive anchors。通过对齐这俩任务,TAL 取得了最高的分类得分和最准确的边框。
对于任务对齐损失,TOOD 使用了归一化的
t
t
t,即
t
^
\hat{t}
t^代替损失中的目标值。归一化:对于每个实例,
t
^
\hat{t}
t^的最大值等于各 anchor 的 IoU 的最大值。分类损失使用了 BCE:
L
c
l
s
−
p
o
s
=
∑
i
=
1
N
p
o
s
B
C
E
(
p
i
,
t
^
i
)
L_{cls-pos}=\sum_{i=1}^{N_{pos}}BCE(p_i,\hat{t}_i)
Lcls−pos=i=1∑NposBCE(pi,t^i)
作者研究了不同标签分配策略的表现,使用的模型就是上述优化后的模型,主干网络是 CSPRepResNet。在 COCO train2017 上训练了 36 个 epochs,在 COCO val 上验证。如下表,TAL 的表现最好。
Efficient Task-aligned Head
在目标检测中,分类和定位任务之间会有冲突。YOLOX 将 head 进行了解耦,以提升准确率。但是解耦后的 head 可能造成分类和定位任务相互独立,缺乏具体任务的学习。于是作者参照 TOOD 改进了 head,提出了 ET-head。如下图,作者使用 ESE 替换了 TOOD 的层注意力,将分类分支的对齐简化为短路连接,将回归分支的对齐替换为 DFL 层。通过这些变化,ET-head 在 V100 上提速了 0.9ms。
对于分类和定位任务,作者分别选用了 Varifocal Loss 和 DFL。Varifocal Loss 与 QFL 不同,它使用目标得分加权正样本的损失,这样 IoU 高的正样本对损失的贡献就更大,在训练时模型就更能关注于高质量样本。Varifocal Loss 和 QFL 都使用了 IACS 作为目标来训练,IACS 是分类得分和定位质量预测的联合表征,从而在训练和推理时都能保持一致。
对于 DFL,为了解决边框表征不灵活的问题,GFLv1 提出了使用 general distribution 预测边框。本文使用的损失函数如下:
L
o
s
s
=
α
⋅
l
o
s
s
V
F
L
+
β
⋅
l
o
s
s
G
I
o
U
+
γ
⋅
l
o
s
s
D
F
L
∑
i
N
p
o
s
t
^
Loss=\frac{\alpha\cdot loss_{VFL}+\beta\cdot loss_{GIoU}+\gamma\cdot loss_{DFL}}{\sum_i^{N_{pos}}\hat{t}}
Loss=∑iNpost^α⋅lossVFL+β⋅lossGIoU+γ⋅lossDFL
其中 t ^ \hat{t} t^是归一化的目标得分,如下表所示,ET-head 能提升约 0.5 % 0.5\% 0.5%AP。