本文主要是对YOLO
系列的网络结构总结、优缺点和改进分析,主要包括YOLOv1
, YOLOv2
, YOLOv3
, YOLOv4
, YOLOv5
, YOLOX
这6个网络
论文下载:https://arxiv.org/abs/1506.02640
代码下载:https://github.com/pjreddie/darknet
核心思想: 将整张图作为网络的输入,直接在输出层对BBox的位置和类别进行回归。
因为YOLO v1
时间比较长了,也就不多讲网络了,大概说一下网络的主要逻辑:
(1) 给个一个输入图像,首先将图像划分成 7 × 7 7 \times 7 7×7的网格
(2) 对于每个网格,我们都预测 2 2 2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出 7 × 7 × 2 7 \times 7 \times 2 7×7×2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可
YOLO v1
对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM
和RCNN
系列检测方法。YOLO v1
训练模型只支持与训练图像相同的输入分辨率。YOLO v1
方法的一个缺陷。YOLO v1
loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。论文下载:https://arxiv.org/abs/1612.08242
代码下载:https://github.com/yjh0410/yolov2-yolov3_PyTorch
核心思想:
YOLOv2
可以在不同的尺寸下运行,在速度和精度之间提供了一个简单的权衡。在 67 F P S 67 FPS 67FPS的情况下,YOLO v2
在VOC 2007上获得 76.8 76.8 76.8mAP。在 40 F P S 40 FPS 40FPS的情况下,YOLO v2
获得 78.6 78.6 78.6 mAP。YOLO 9000
,它可以预测 9000 9000 9000多种不同的物体类别的检测结果。YOLO v2
相对v1
版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),**识别对象更多(Stronger)**这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测 9000 9000 9000种不同对象,称之为YOLO 9000
。
文章提出了一种新的训练方法–联合训练算法,这种算法可以把这两种的数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集,从而把两种不同的数据集混合起来。
联合训练算法的基本思路就是:同时在检测数据集和分类数据集上训练物体检测器(Object Detectors ),用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升健壮性。
YOLO9000
就是使用联合训练算法训练出来的,他拥有 9000 9000 9000类的分类信息,这些分类信息学习自ImageNet分类数据集,而物体位置检测则学习自COCO检测数据集。
YOLO v2
相比于 YOLO v1
的改进如下:
mAP提升 2.4 % 2.4\% 2.4%。
关于BN的详细信息,感兴趣的可以看本人专栏深度学习基础下的深度学习七 —— BN & LN & IN & GN
这里不多做讲述
mAP提升了 3.7 % 3.7\% 3.7%。
图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1
使用ImageNet的图像分类样本采用 224 × 224 224 \times 224 224×224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448 × 448 448 \times 448 448×448 的图像作为输入。但这样切换对模型性能有一定影响。
所以YOLO v2
在采用 224 × 224 224 \times 224 224×224 图像进行分类模型预训练后,再采用 448 × 448 448 \times 448 448×448 的高分辨率样本对分类模型进行微调( 10 10 10个epoch),使网络特征逐渐适应 448 × 448 448 \times 448 448×448 的分辨率。然后再使用 448 × 448 448 \times 448 448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。
召回率大幅提升到 88 % 88\% 88%,同时mAP轻微下降了 0.2 0.2 0.2左右。
YOLO v1
包含有全连接层,从而能直接预测Bounding Boxes的坐标值。 Faster R-CNN
的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。
借鉴Faster RCNN
的做法,YOLO v2
也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。
之前YOLO v1
并没有采用先验框,并且每个grid只预测 2 2 2个bounding box,整个图像 98 98 98个。YOLO v2
如果每个grid采用 9 9 9个先验框,总共有 13 × 13 × 9 = 1521 13 \times 13 \times 9=1521 13×13×9=1521个先验框。所以最终YOLO v2
去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在 416 × 416 416 \times 416 416×416 而不是 448 × 448 448 \times 448 448×448。
由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO v2
的卷积层采用 32 32 32这个值来下采样图片,所以通过选择 416 × 416 416 \times 416 416×416用作输入尺寸最终能输出一个 13 × 13 13 \times 13 13×13的Feature Map。 使用Anchor Box会让精度稍微下降,但用了它能让YOLO v2
能预测出大于一千个框,同时recall从 81 % 81\% 81%达到 88 % 88\% 88%,mAP达到 69.2 % 69.2\% 69.2%。
召回率升高,mAP轻微下降的原因是: 因为YOLO v2
不使用anchor boxes时,每个图像仅预测 98 98 98个边界框。但是使用anchor boxes,YOLO v2
模型预测了一千多个框,由于存在很多无用的框,这就导致了mAP值的下降。但是由于预测的框多了,所以能够预测出来的属于ground truth的框就多了,所以召回率就增加了。目标检测不是只以mAP为指标的,有些应用场景下要求召回率高。
之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。 YOLO v2
尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO v2
的做法是对训练集中标注的边框进行K-mean聚类分析,以寻找尽可能匹配样本的边框尺寸
关于K-Means聚类的详细内容,有需要可以看本人专栏 图像算法 中的图像算法六 —— K-Means和KNN
借鉴Faster RCNN
的先验框的方法,在训练的早期阶段,其位置预测容易不稳定。位置预测公式通常为:
x = ( t x × w a ) + x a x = (t_x \times w_a) + x_a x=(tx×wa)+xa
y = ( t y × h a ) + y a y = (t_y \times h_a) + y_a y=(ty×ha)+ya
其中,
x , y x, y x,y——预测边框的中心,
x a , y a x_a, y_a xa,ya——anchor的中心点坐标,
w a , h a w_a, h_a wa,ha——anchor的宽和高,
t x , t y t_x, t_y tx,ty——学习的参数。
注意:YOLO
中用的是 x = ( t x × w a ) − x a x = (t_x \times w_a) - x_a x=(tx×wa)−xa,Fasteer RCNN
中用的是 + + +。
由于 t x , t y t_x, t_y tx,ty 的取值没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。
YOLO v2
调整了预测公式,将预测边框的中心约束在特定gird网格内,如下图所示:
其中,
b x , b y , b w , b h b_x, b_y, b_w, b_h bx,by,bw,bh——预测框的中心点和宽高,
c x , c y c_x, c_y cx,cy——当前网格左上角到图像左上角的距离,
σ \sigma σ—— s i g m o i d sigmoid sigmoid函数,
t x , t y , p w , p h t_x, t_y, p_w, p_h tx,ty,pw,ph——学习参数,用于预测边框的中心和宽高。
因为使用了限制让数值变得参数化,也让网络更容易学习、更稳定。
passthrough层检测细粒度特征使mAP提升 1 % 1\% 1%。
对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO v2
中输入 416 × 416 416 \times 416 416×416经过卷积网络下采样最后输出是 13 × 13 13 \times 13 13×13),较小的对象可能特征已经不明显甚至被忽略掉了。
为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。
YOLO v2
引入一种称为passthrough层的方法在特征图中保留一些细节信息。
具体来说,就是在最后一个pooling之前,特征图的大小是 26 × 26 × 512 26 \times 26 \times 512 26×26×512,将其 1 1 1拆 4 4 4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。
另外,根据YOLO v2
的代码,特征图先用 1 × 1 1 \times 1 1×1卷积从 26 × 26 × 512 26 \times 26 \times 512 26×26×512 降维到 26 × 26 × 64 26 \times 26 \times 64 26×26×64,再做 1 1 1拆 4 4 4并passthrough。
作者希望YOLO v2
能健壮的运行于不同尺寸的图片之上,所以把这一想法用于训练model中。
区别于之前的补全图片的尺寸的方法,YOLO v2
每迭代几次都会改变网络参数。每 10 10 10个Batches,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是 32 32 32,所以不同的尺寸大小也选择为 32 32 32的倍数 320 , 352 … . . 608 {320,352…..608} 320,352…..608,最小 320 × 320 320 \times 320 320×320,最大 608 × 608 608 \times 608 608×608,网络会自动改变尺寸,并继续训练的过程。
这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以你可以在YOLO v2
的速度和精度上进行权衡。
Darknet-19有 19 19 19个卷积层和 5 5 5个maxpooling层,采用全局平均池化的方法进行预测,并采用 1 × 1 1 \times 1 1×1 卷积来压缩 3 × 3 3 \times 3 3×3 卷积之间的特征表示。使用批处理归一化来稳定训练,加快收敛速度,并对模型进行规范化。
作者提出了一种在分类数据集和检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding boxes 坐标预测,是否包含物体以及属于各个物体的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。
作者通过ImageNet训练分类、COCO和VOC数据集来训练检测,这是一个很有价值的思路,可以让我们达到比较优的效果。 通过将两个数据集混合训练,如果遇到来自分类集的图片则只计算分类的Loss,遇到来自检测集的图片则计算完整的Loss。
但是ImageNet对应分类有 9000 9000 9000种,而COCO则只提供 80 80 80种目标检测,作者使用multi-label模型,即假定一张图片可以有多个label,并且不要求label间独立。
通过作者Paper里的图来说明,由于ImageNet的类别是从WordNet选取的,作者采用以下策略重建了一个树形结构(称为分层树):
这个分层树我们称之为 WordTree,作用就在于将两种数据集按照层级进行结合。
论文下载:https://arxiv.org/abs/1804.02767
代码下载:https://github.com/yjh0410/yolov2-yolov3_PyTorch
核心思想:
YOLO v3
的核心思想在于多尺度的预测,也就是使用三种不同的网格来划分原始图像。其中 13 × 13 13 \times 13 13×13的网格划分的每一块最大,用于预测大目标。 26 × 26 26 \times 26 26×26的网格划分的每一块中等大小,用于预测中等目标。 52 × 52 52 \times 52 52×52的网格划分的每一块最小,用于预测小目标。
由于原作者并没有给出网络图,就自己画了一个网络图,有问题请大家指正。
下图是Darknet-53
的网络结构图
此结构主要由 53 53 53个卷积层构成,卷积层对于分析物体特征最为有效。由于没有使用全连接层,该网络可以对应任意大小的输入图像。
此外,池化层也没有出现在其中,取而代之的是将卷积层设置 s t r i d e = 2 stride=2 stride=2来达到下采样的效果,同时将尺度不变特征传送到下一层。
除此之外,Darknet-53
中还使用了类似ResNet
的结构
一个回归框是由 4 4 4个参数决定—— x , y , w , h x, y, w, h x,y,w,h 。YOLO v3
是在训练的数据集上聚类产生prior boxes的一系列宽高(是在图像 416 × 416 416 \times 416 416×416的坐标系里),默认 9 9 9种。YOLO v3
思想理论是将输入图像分成 S × S S \times S S×S个格子(有三处进行检测,分别是在 52 × 52 52 \times 52 52×52, 26 × 26 26 \times 26 26×26, 13 × 13 13 \times 13 13×13的feature map上,即 S S S会分别为 52 , 26 , 13 52,26,13 52,26,13),若某个物体Ground truth的中心位置的坐标落入到某个格子,那么这个格子就负责检测中心落在该栅格中的物体。
三次检测,每次对应的感受野不同:
所以当输入为 416 × 416 416 \times 416 416×416时,实际总共有 ( 52 × 52 + 26 × 26 + 13 × 13 ) × 3 = 10647 (52 \times 52+26 \times 26+13 \times 13) \times 3 = 10647 (52×52+26×26+13×13)×3=10647个proposal boxes。
YoLo v3
对每个bounding box预测偏移量和尺度缩放四个值 t x , t y , t w , t h t_x, t_y, t_w, t_h tx,ty,tw,th (网络学习的参数),对于预测的cell(一幅图划分成 S × S S \times S S×S个网格cell)根据图像左上角的偏移 ( c x , c y ) (cx, cy) (cx,cy) ,每个grid cell在feature map中的宽和高均为 1 1 1,以及预先设的anchor box的宽和高 p w , p h p_w, p_h pw,ph (预设聚类的宽高需要除以 s t r i d e stride stride映射到feature map上)。最终得到的边框坐标值是 b b b,而网络学习目标是 t ∗ t^* t∗,用 s i g m o d sigmod sigmod函数、指数转换。可以对bounding box按如上图的方式进行预测。
每种尺度预测 3 3 3个box, anchor的设计方式仍然使用聚类,得到 9 9 9个聚类中心,将其按照大小均分给 3 3 3个尺度.
之后在 Y O L O v 3 YOLO v3 YOLOv3中,采用FPN层对多尺度的特征进行融合使用。
YOLO v3
中使用了ResNet
结构(对应着在上面的YOLO v3
结构图中的ResBlock
)。ResBlock是有一系列卷基层和一条shortcut path组成。shortcut如下图所示:
图中曲线箭头代表的便是shortcut path。除此之外,此结构与普通的CNN结构并无区别。
但是,随着网络越来越深,学习特征的难度也就越来越大。但是如果我们加一条shortcut path的话,学习过程就从直接学习特征,变成在之前学习的特征的基础上添加某些特征,来获得更好的特征。这样一来,一个复杂的特征 H ( x ) H(x) H(x),之前是独立一层一层学习的,现在就变成了这样一个模型。 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x,其中 x x x是shortcut开始时的特征,而 F ( x ) F(x) F(x)就是对x进行的填补与增加,成为残差。因此学习的目标就从学习完整的信息,变成学习残差了。这样学习优质特征的难度就大大减小了。
S o f t m a x Softmax Softmax层被替换为一个 1 × 1 1 \times 1 1×1的卷积层 + + + l o g i s t i c logistic logistic激活函数的结构。使用 s o f t m a x softmax softmax层的时候其实已经假设每个输出仅对应某一个单个的 c l a s s class class,但是在某些 c l a s s class class存在重叠情况(例如woman和person)的数据集中,使用 s o f t m a x softmax softmax就不能使网络对数据进行很好的拟合。
主要考虑因素有两个:
S o f t m a x Softmax Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此 S o f t m a x Softmax Softmax不适用于多标签分类。
S o f t m a x Softmax Softmax可被独立的多个logistic分类器替代,且准确率不会下降。
分类损失采用binary cross-entropy loss。
YOLO v3
不预测边界框中心的绝对坐标,它预测的是偏移量,预测的结果通过一个 s i g m o i d sigmoid sigmoid函数,迫使输出的值在 0 0 0~ 1 1 1之间。
例如,若对中心的预测是 ( 0.4 , 0.7 ) (0.4,0.7) (0.4,0.7),左上角坐标是 ( 6 , 6 ) (6,6) (6,6),那么中心位于 13 × 13 13\times13 13×13特征地图上的(6.4,6.7)。若预测的 x , y x,y x,y坐标大于 1 1 1,比如 ( 1.2 , 0.7 ) (1.2,0.7) (1.2,0.7),则中心位于 ( 7.2 , 6.7 ) (7.2,6.7) (7.2,6.7)。注意现在中心位于图像的第 7 7 7排第 8 8 8列单元格,这打破了 Y O L O v 3 YOLO v3 YOLOv3背后的理论,因为如果假设原区域负责预测某个目标,目标的中心必须位于这个区域中,而不是位于此区域旁边的其他网格里。
为解决这个问题,输出是通过一个 s i g m o i d sigmoid sigmoid函数传递的,该函数在 0 0 0~ 1 1 1的范围内缩放输出,有效地将中心保持在预测的网格中。
论文下载:https://arxiv.org/abs/2004.10934
代码下载:https://github.com/AlexeyAB/darknet
核心思想:
从本质上,YOLO v4
就是筛选了一些从YOLO v3
发布至今,被用在各式各样检测器上,能够提高检测精度的tricks,并以YOLO v3
为基础进行改进的目标检测模型。YOLO v4
在保证速度的同时,大幅提高模型的检测精度(相较于YOLO v3
)。
由于YOLO v4
实在是综合了太多的技巧,就从知乎一个大佬那借图一展,我主要从下一节的网络改进来详细讲
YOLO v4
由于结合了太多的技巧,所以就大概列一部分主要的,如下:
YOLO v3
的DarkNet53,YOLO v4
用了CSPDarkNet53YOLO v3
的FPN,YOLO v4
用了SPP+PAN作者在选在BackBone的时候选择了CSPDarknet53,原因也很简单,在论文中也有提到,当时在目标检测领域,该网络精度最好。
有兴趣的可以去看CSPDarknet53的原文,不多讲述:CSPNet: A New Backbone that can Enhance Learning Capability of CNN
SSP不多讲,有兴趣看何凯明大神的论文
SSP:Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition
而SSP+PAN借鉴的是18年CVPR的PANet,当时主要应用于图像分割领域,作者将其拆分应用到YOLO v4
中,进一步提高特征提取的能力。
YOLO v4
在FPN层的后面还添加了一个自底向上的特征金字塔, 其中包含两个PAN结构。
这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合
CutMix数据增强:就是将一部分区域cut掉但不填充 0 0 0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配
Mosaic数据增强:核心思想是随机 4 4 4张图拼合成一张送入网络
Dropout 被广泛地用作全连接层的正则化技术,但是对于卷积层,通常不太有效。Dropout 在卷积层不 work 的原因可能是由于卷积层的特征图中相邻位置元素在空间上共享语义信息, 所以尽管某个单元被 dropout 掉,但与其相邻的元素依然可以保有该位置的语义信息,信息仍然可以在卷积网络中流通。
因此,针对卷积神经网络就需要一种结构形式的dropout 来正则化,即按块来丢弃。
DropBlock是一种结构化的 dropout 形式,它将 feature map 相邻区域中的单元放在一起 drop 掉。除了卷积层外,在跳跃连接中应用 DropBlock 可以提高精度。
此外,在训练过程中,逐渐增加 dropped unit 的数量会有更好的准确性和对超参数选择的鲁棒性。
2020年2月YOLO
之父Joseph Redmon宣布退出计算机视觉研究领域,2020 年 4 月 23 日YOLOv4
发布,2020 年 6 月 10 日YOLO v5
发布,但是两个版本的改进都属于多种技术堆积版本,且两个版本差异不大。
YOLO v5
性能与YOLO v4
不相伯仲,同样也是现今最先进的对象检测技术,并在推理速度上是目前最强。
论文下载:YOLO v5目前暂无论文
代码下载:https://github.com/ultralytics/yoloV5
Pytorch
框架,对用户非常友好,能够方便地训练自己的数据集,相对于YOLO v4
采用的Darknet
框架,Pytorch
框架更容易投入生产。模型训练也非常快速
,并且批处理推理产生实时结果。Pytorch
权重文件转化为安卓使用的ONXX
格式,然后可以转换为OpenCV
的使用格式,或者通过CoreML
转化为IOS
格式,直接部署到手机应用端。YOLO v5
的大小仅有 27 M B 27MB 27MB , 使用 Darknet
架构的 YOLO v4
有 244 M B 244MB 244MBYOLO v5
高达 140 F P S 140FPS 140FPS的对象识别速度令人印象非常深刻,使用体验非常棒。YOLO X
是旷视科技在目标检测方面的最新技术总结,同时也是CVPR2021自动驾驶竞赛冠军方案的技术总结。其将近两年来目标检测领域的各个角度的优秀进展与YOLO
进行了巧妙地集成组合(比如解耦头、数据增广、标签分配、Anchor-free机制等)得到了YOLO X
,性能取得了大幅地提升,同时仍保持了YOLO系列一贯地高效推理。
论文下载:https://arxiv.org/abs/2107.08430
代码下载:https://github.com/Megvii-BaseDetection/YOLOX
作者将YOLO
检测器调整为了Anchor-Free
形式并集成了其他先进检测技术(比如decoupled head、label assignment SimOTA)取得了SOTA性能,比如:
YOLO-Nano
,所提方法仅需 0.91 M 0.91M 0.91M参数 + 1.08 G +1.08G +1.08G FLOPs取得了 25.3 % 25.3\% 25.3%AP指标,以 1.8 % 1.8\% 1.8%超越了NanoDet;YOLO v3
,所提方法将指标提升到了 47.3 % 47.3\% 47.3%,以 3 % 3\% 3%超越了当前最佳;YOLOv4-CSP
、YOLOv5-L
相当的参数量,YOLOX-L
取得了 50.0 % 50.0\% 50.0%AP指标同事具有 68.9 f p s 68.9fps 68.9fps推理速度(Tesla V100),指标超过YOLOv5-L
1.8 % 1.8\% 1.8%;YOLOX-L
凭借单模型取得了Streaming Perception(Workshop on Autonomous Driving at CVPR 2021)竞赛冠军。值得一提的是,作者使用的baseline是 YOLO v3 + DarkNet53
(所谓的YOLO v3-SSP
)
作者研究发现,检测头耦合会影响模型性能。采用解耦头替换YOLO
的检测头可以显著改善模型收敛速度。因此,作者将YOLO
的检测头替换为轻量解耦头:它包含一个 1 × 1 1\times 1 1×1卷积进行通道降维,后接两个并行分支(均为 3 × 3 3 \times 3 3×3卷积)。注:轻量头可以带来 1.1 m s 1.1ms 1.1ms的推理耗时。
YOLO v4
、YOLO v5
均采用了YOLO v3
原始的anchor设置。然而anchor机制存在诸多问题:
Anchor-free检测器在过去两年得到了长足发展并取得了与anchor检测器相当的性能。
将YOLO转换为anchor-free形式非常简单,我们将每个位置的预测从3下降为1并直接预测四个值:即两个offset以及高宽。这种改进可以降低检测器的参数量于GFLOPs进而取得更快更优的性能:42.9%AP。
为确保与YOLOv3的一致性,前述anchor-free版本仅仅对每个目标赋予一个正样本,而忽视了其他高质量预测。参考FCOS,我们简单的赋予中心3×3区域为正样本。此时模型性能提升到45.0%,超过了当前最佳U版YOLOv3的44.3%。
OTA从全局角度分析了标签分配并将其转化为最优运输问题取得了SOTA性能。
然而,作者发现:最优运输问题优化会带来 25 % 25\% 25%的额外训练耗时。因此,我们将其简化为动态 t o p − k top-k top−k策略以得到一个近似解(SimOTA)。SimOTA不仅可以降低训练时间,同时可以避免额外的超参问题。SimOTA的引入可以将模型的性能从 45.0 % 45.0\% 45.0%提升到 47.3 % 47.3\% 47.3%,大幅超越U版YOLOv的 44.3 % 44.3\% 44.3%。
YOLO X
参考PSS添加了两个额外的卷积层,one-to-one标签分配以及stop gradient。这些改进使得目标检测器进化成了端到端形式,但会轻微降低性能与推理速度。
因此,我们将该改进作为可选模块,并未包含在最终模型中。