目录
论文相关信息
1.论文题目:OneNet: Towards End-to-End One-Stage Object Detection
2.发表时间:2020.12
3.文献地址:https://arxiv.org/abs/2012.05780
4.论文源码:https://github.com/PeizeSun/OneNet
摘要
端到端的一阶段目标检测目前发展滞后。这篇文章指出一阶段的检测器将样本分配给真实框时没有考虑分类的代价,这是一阶段检测器移除NMS从而实现端到端的主要障碍。现存的一阶段目标检测器只根据位置代价(如box IoU或者point distance)来给样本分配标签,而不考虑分类的代价,这导致推断时产生冗余的高置信度的边框,从而必须使用NMS做后处理。
图1.之前一阶段的检测器的标签分配只根据位置代价,这里提出的最小代价分配将分类代价也纳入考虑,使得每个真实框只有一个正样本,从而可以剩去NMS等后处理。
为了设计出端到端的目标检测器,作者提出最小代价分配(Minimum Cost Assignment),即在给样本分配真实框的时候以分类代价和位置代价的和作为匹配标准,如图1所示,对于每个真实框,只有与其代价最小的样本被视为该真实框的正样本,其余的样本都是负样本。为了评估该方法的有效性,作者设计了一个极为简单的一阶段检测器OneNet 。
实验证明,使用最小代价分配训练得到的OneNet可以避免处理重复的边框,实现端到端的目标检测器。在COCO数据集上,使用ResNet-101骨干网的OneNet在512的图片尺寸下达到了35.0 AP/80 FPS 和37.7 AP/50 FPS 。
创新:
- 提出新的标签分配策略最小代价匹配,加入了分类代价的考虑。
- 改进了多网络头的训练,增大网络学习率并只使用一个网络头做推断。
- 去掉了NMS后处理,实现了端到端的一阶段目标检测器。
1. 介绍
标签分配是当前目标检测领域里一个具有挑战性的任务,即如何定义每个物体的正样本以及对应背景的负样本以及成为一个公开问题。
基于anchor的检测器种标签分配是采用的**“边框分配**(Box Assignment.)”——指基于候选边框和真实框的IoU来样本正负,如图2a所示。因为基于anchor检测器的性能受anchor设置影响很大,并且很复杂,后续出现了anchor-free的检测器,如FCOS,他们直接把每个特征图上的每个点视为样本(目标候选),然后预测每个点到目标健康的偏移,这种anchor-free的检测器采用的标签分配方法是**“点分配(Point Assignment.)”**,即简单的根据每个点到目标边框中心的距离来判断是否正样本,如图2b。
但是这两种分配方法都属于多对一的分配,即一个真实框有多个正样本,这使得检测器的性能受分配的参数设置影响较大,并且会产生重复、冗余的结果,最终不得不采用NMS后处理。
近期一对一分配在离散候选框和多阶段精炼检测器上取得了成功,这表明密集候选框和一阶段精炼的检测器也有潜力更快更简单。一种直观的方式是将一对一的标签分配应用到端到端的一阶段检测器上,但是由于没有加入分类代价作为一对一标签分配的依据,这种实验表现很差,最后作者考虑了分类代价,并提出最小代价分配,如图2c,并为此设计了一个一阶段的且只有一个正样本的检测器OneNet。OneNet优点如下:
- 整个网络都是全卷积和端到端的训练,没有使用RoI操作或者注意力交互。
- 标签分配采用位置和分类的最小代价分配。
- 没有后处理操作。
2. 相关工作
介绍了目标检测,一阶段目标检测和二阶段目标检测器,端到端的目标检测器。这里主要挑一些自己不是很了解的。一阶段中,提到了ATSS,其揭示了基于anchor和anchor-free的检测器之间的本质不同在于怎样定义正负训练样本,这是他们性能差异的主要原因。虽然ATSS性能很好,但是需要NMS后处理。二阶段检测器种,提到了Libra R-CNN和Grid R-CNN,其中前者尝试接近样本level、特征层level和目标level之间的不平衡(还没看,不确定level是否单纯指网络层级);Grid R-CNN则采用格子指引的定位机制来取代传统边框回归来获得精准的定位。由于二阶段的检测器引入很多超参数和模块来设计区域建议阶段和目标识别阶段,一次二阶段检测器不容易应用到工业上。端到端的目标检测提到了DETR,Deformable-DETR和Sparse R-CNN , 这些都是基于稀疏候选框和多阶段精炼的检测器。其中DETR直接输出预测,不需要手动设置标签分配,也不需要后处理NMS,可以说是第一个真正的端到端目标检测方法。正是受益于全局注意力机制和二分匹配法,DETR才可以丢弃NMS过程并且实现较高的性能。后续Deformable-DETR对目标的查询做了限制,使之位于一个参考点范围内。Sparse R-CNN 则是从一个稀疏的可学习的建议框集合开始迭代的执行分类和定位。
3. 标签分配
最小代价分配是设计来解决端到端一阶段检测器的标签分配问题的,这里将从之前一阶段检测器的标签分配介绍,如边框分配和点分配。
3.1 匹配代价
之前的分配样本的方法基于样本和真实物体的边框IoU或者点距离,可以将它们归纳为基于位置代价做标签分配,他们的位置代价可以定义如下:
C
l
o
c
=
λ
i
o
u
⋅
C
i
o
u
+
λ
L
1
⋅
C
L
1
C_{loc}=\lambda_{iou}·C_{iou}+\lambda_{L1}·C_{L1}
Cloc=λiou⋅Ciou+λL1⋅CL1, (1)
其中 C L 1 C_{L1} CL1和 C i o u C_{iou} Ciou是L1loss和IoUloss,如果是边框分配,则 λ L 1 = 0 \lambda_{L1}=0 λL1=0,如果是点分配则 λ i o u = 0 \lambda_{iou}=0 λiou=0。
根据位置代价做标签分配概念上是直机关的,并且目前也取得了很好的性能,但是外面的目标检测器是多任务的,包括定位和分类,只考虑位置代价会使得分类表现不好,并且产生冗余的结果,必须使用NMS后处理。
为了实现端到端的一阶段目标检测器,将分类代价与位置代价的和作为最终的匹配代价,定义如下:
C
=
λ
c
l
s
⋅
C
c
l
s
+
C
l
o
c
C=\lambda_{cls}·C_{cls}+C_{loc}
C=λcls⋅Ccls+Cloc, (2)
其中 C c l s C_{cls} Ccls是预测类别和真实物体类别的分类代价。 C l o c C_{loc} Cloc是公式1中所定义的。 λ c l s \lambda_{cls} λcls是系数,在边框分配和点分配中, λ c l s = 0 \lambda_{cls}=0 λcls=0。
3.2 最小代价分配
最小代价分配很直接:对于每个真实物体,只有最小代价的一个样本被标记为正样本,其余为负样本。没有其余复杂的认为设置和二分匹配法,下面算法是最小代价分配的例子,其中使用了交叉熵损失作为分类代价,L1 loss作为位置代价。
最终,最小代价定义如下:
C
=
λ
c
l
s
⋅
C
c
l
s
+
λ
L
1
⋅
C
L
1
+
λ
g
i
o
u
⋅
C
g
i
o
u
C=\lambda_{cls}·C_{cls}+\lambda_{L1}·C_{L1} +\lambda_{giou}·C_{giou}
C=λcls⋅Ccls+λL1⋅CL1+λgiou⋅Cgiou , (3)
其中,分类loss为focal loss, C g i o u C_{giou} Cgiou是GIoU loss。λ*是各自系数。
'''Algorithm 1 Pseudocode of Minimum Cost Assignment in
a PyTorch-like style.'''
# For simplicity,
# cross entropy loss as classification cost
# L1 loss as location cost
# Input:
# class_pred, box_pred: network output(HxWxK, HxWx4)
# gt_label, gt_box: ground-truth (N, Nx4)
# Output:
# src_ind: index of positive sample in HW sequence(N)
# tgt_ind: index of corresponding ground-truth (N)
# flattened class: HWxK
output_class = class_pred.view(-1, K)
# flattened box: HWx4
output_box = box_pred.view(-1, 4)
# classification cost: HWxN
cost_class = -torch.log(output_class[:, gt_label])
# location cost: HWxN
cost_loc = torch.cdist(out_box, gt_bbox, p=1)
# cost matrix: HWxN
cost_mat = cost_class + cost_loc
# index of positive sample: N
_, src_ind = torch.min(cost_mat, dim=0)
# index of ground-truth: N
tgt_ind = torch.arange(N)
4. OneNet
OneNet是一个基本的全卷积一阶段检测器,没有NMS等后处理操作。其pipeline如图3所示。
图3. OneNet 的工作流。对于H ×W ×3的输入图片,骨干网生成 H 4 × W 4 × C \frac{H}{4}×\frac{W}{4}×C 4H×4W×C的特征图,网络头生成 H 4 × W 4 × K \frac{H}{4}×\frac{W}{4}×K 4H×4W×K的分类预测,K为类别数,回归预测生成 H 4 × W 4 × 4 \frac{H}{4}×\frac{W}{4}×4 4H×4W×4 的回归预测,最后的输出结果是直接的top-k(如前100)得分边框。图中方框内的数字代表的是特征图相对输入图片的stride。
骨干网:骨干网是由ResNet和FPN组成的是线自底向上再自顶向下的网络,最终输出的特征图stride为4.
网络头:head部分将特征图H/4×W/4上的每个格子点传入两个平行的卷积层做分类和回归。分类层预测K个不同类别目标在每个grid点出现的可能性,定位层预测每个grid点到真实框4个边界的距离。
训练: 标签分配采用是最小代价分配,训练损失和匹配损失类似,由 Focal Loss, L1 loss, 和GIoU loss组成。
推断: 最终的输出是前K个得分边框。没有如NMS或最大池化操作这样的后处理。
4.1. 多网络头训练(Multi-head Training)
我们提出了一个可选的多头训练策略,该策略包括层叠式网络头和权重共享机制。
图4.Multi-head Training。训练时应用了Cascading prediction heads,分类卷积和回归卷积的参数在不同的heads间共享。推断时,只使用第一个head,所以推断的速度不会受影响。虚线箭头表示的Identity恒等映射。
Cascading heads。 对于第一个阶段,输入的特征图为 F 0 F_0 F0,通过广播将其通道变为两倍,即(H/4 × W/4 × C → H/4 × W/4 × 2C),然后送入一个卷积层得到H/4 × W/4 × C的输出特征图 F 1 F_1 F1,基于 F 1 F_1 F1生成回归和分类预测。随后的下一阶段j,原始的特征图 F 0 F_0 F0和上一阶段的输出特征图 F j − 1 F_{j-1} Fj−1通过在维度上的concatenated生成H/4 × W/4 × 2C的特征图,然后再此特征图上卷积生成j阶段的特征图 F j F_j Fj,shape 为H/4 × W/4 × C,然后基于这个特征图上也生成分类和回归预测。这个过程正如上面的图所示。
Weight-sharing。 多个head上的分类和回归分支分别共享参数,简单的应用多网络头并不能提高检测精度,并且推理速度也会下降。因此,对多网络头做了两点修改:1)使用大学习率(Large learning rate) ;2)只使用一个网络头推断(Single-head Inference)
Large learning rate 。直接提高单个预测头的学习率会使训练不稳定,并降低检测精度。但是在带有级联结构和权重共享检测头的模型中,直接提高学习率将增加模型性能。
Single-head Inference。 推断时,只使用第一个阶段的网络头来输出最终的结果,其它阶段的网络头忽略。和多网络头的推断相比,这样带来的精度损失可忽略。
多网络头训练对于OneNet来说是一个可选项。实验证明,三个阶段 的多网络头(如图4所示)训练能够在COCO数据集上提高1AP。
5.Experiments
数据集:MS COCO benchmark,COCO train2017分支(∼118k images) 上训练, val2017 (5k images)上评估。
实现细节:
- optimizer 采用 AdamW,weight decay 0.0001。
- 8 NVIDIA V100 GPUs,batch size 64。
- 初始学习率:单网络头训练: 5 × 1 0 − 5 5 × 10^{−5} 5×10−5,多网络头训练: 4 × 1 0 − 5 4 × 10^{−5} 4×10−5。
- lr_scheduler:总共270k iter, 210k 和250k时除10
- 骨干网使用ImageNet初始化的ResNet-50
- 和DETR一样, λ c l s = 2 , λ L 1 = 5 , λ g i o u = 2 \lambda_{cls}=2,\lambda_{L1}=5,\lambda_{giou}=2 λcls=2,λL1=5,λgiou=2
- 数据增强包括:随机水平翻转, scale jitter使得输入图片的尺度最小边在416到512像素之间。
- 默认的推断时图片尺寸是最短板512,最长边853像素。
- 推断时选取前100个得分的边框作为最终输出。
5.1. Visualization of Positive Sample
图5.正样本的可视化。第一行显示的是只是用位置代价作为标签分配的正样本。第二行则是加入了分类代价的最小代价分配所匹配的正样本。为了更好的可视化,正样本点使用远点表示,矩形框框为真实框。可见仅依据位置代价分配得到的正样本点基本位于真实框的中心;而依据最小代价分配得到的正样本点则位于真实框中更具分辨力的位置,如斑马的头。所以,最小代价分配得到的样本更有利于分类。
5.2. Ablation Study
表1.标签分配的消融实验。 pre-defined location cost 是指特征图上固定的格子点和真实框中心的距离。predicted box的位置代价和 classification loss在第三节定义了。
表2 .多网络头训练的消融实验。多网络头使用大学习率训练AP更高,而推断时使用一个网络头推断的精度和多个网络头推断差不多,而且速度和单网络头训练的检测器差不多。
表3.图片尺寸的影响。size 的第一列是最短边,第二列是最大边。大尺寸的图片有更高的精度,但是推断速度降低。
表4.训练时学习率schedule的影响。144epochs后精度的提高减慢,因此使用144epoch作为基准配置以获得精度和训练时间的平衡。
5.3. Comparison to CenterNet
将OneNet和CenterNet相比,OneNet像是将CenterNet中的标签分配策略替换为最小代价分配,如表5所示,在精度和推断速度上和CenterNet相当。这表明OneNet成功的移除了NMS后处理,实现了端到端的一阶段检测器。
表5.CenterNet和OneNet的比较。
5.4. Label assignment in sparse detectors
表6.稀疏检测器上添加分类代价作为分配依据的影响。无分类代价时,若不使用NMS则精度大大下将,加上NMS后精度才能提高很多。
5.5. Discussion
为什么提出的最小代价分配策略能够成功消除重复结果并避免NMS?
之前的方法使用的标签分配策略和网络优化目标不一致。总体来说,目标检测器的优化目标一个是分类代价和位置代价的总和,即目标检测器包括定位和识别任务。但是之前的标签分配策略只考虑位置,在一对一的只考虑位置代价的网络中,网络优化时所选择的正样本能够使得位置代价最小,但是却不能减小分类代价,也就是说可能存在其它潜在的正样本也能够是的总代价最小,但是却倍视为负样本。最终训练得到的网络就是次优的。
采用最小代价分配之后同时考虑了分类和定位,找的正样本是总代价最小的,最终训练得到的网络也就是最优的,每个真实物体对应一个预测。
6. Conclusion
标签分配策略中加入分类代价是消除NMS等后处理实现端到端检测器的核心,每个真实物体只有一个预测框。
参考:
- Sun P, Jiang Y, Xie E, et al. OneNet: Towards End-to-End One-Stage Object Detection[J]. arXiv preprint arXiv:2012.05780, 2020.
- https://blog.csdn.net/Skies_/article/details/112332400