YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX

文章目录

YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX

前言

本文主要是对YOLO系列的网络结构总结、优缺点和改进分析,主要包括YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX6个网络

YOLO v1: You Only Look Once: Unified, Real-Time Object Detection

简介

论文下载https://arxiv.org/abs/1506.02640

代码下载https://github.com/pjreddie/darknet

核心思想: 将整张图作为网络的输入,直接在输出层对BBox的位置和类别进行回归。

网络简介

在这里插入图片描述

因为YOLO v1时间比较长了,也就不多讲网络了,大概说一下网络的主要逻辑:

(1) 给个一个输入图像,首先将图像划分成7 × 7 7 \times 77×7的网格

(2) 对于每个网格,我们都预测2 22个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)

(3) 根据上一步可以预测出7 × 7 × 2 7 \times 7 \times 27×7×2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可

优缺点

优点

  • 快速,pipline简单.
  • 背景误检率低。
  • 通用性强。YOLO v1对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPMRCNN系列检测方法。

缺点

  • 由于输出层为全连接层,因此在检测时,YOLO v1训练模型只支持与训练图像相同的输入分辨率。
  • 虽然每个格子可以预测B BB个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO v1方法的一个缺陷。
  • YOLO v1 loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性

YOLO v2: YOLO9000: Better, Faster, Stronger

简介

论文下载https://arxiv.org/abs/1612.08242

代码下载https://github.com/yjh0410/yolov2-yolov3_PyTorch

核心思想

  • 该论文使用一种新颖的多尺度训练方法YOLOv2可以在不同的尺寸下运行,在速度和精度之间提供了一个简单的权衡。在67 F P S 67 FPS67FPS的情况下,YOLO v2在VOC 2007上获得76.8 76.876.8mAP。在40 F P S 40 FPS40FPS的情况下,YOLO v2获得78.6 78.678.6 mAP。
  • 最后提出了一种目标检测与分类的联合训练方法,利用该方法在COCO检测数据集和ImageNet分类数据集上同时训练YOLO 9000,它可以预测9000 90009000多种不同的物体类别的检测结果

网络简介

YOLO v2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better)速度更快(Faster),**识别对象更多(Stronger)**这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000 90009000种不同对象,称之为YOLO 9000

文章提出了一种新的训练方法–联合训练算法,这种算法可以把这两种的数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集,从而把两种不同的数据集混合起来。

联合训练算法的基本思路就是:同时在检测数据集和分类数据集上训练物体检测器(Object Detectors ),用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升健壮性。

YOLO9000就是使用联合训练算法训练出来的,他拥有9000 90009000类的分类信息,这些分类信息学习自ImageNet分类数据集,而物体位置检测则学习自COCO检测数据集。

网络改进

YOLO v2相比于 YOLO v1的改进如下:

在这里插入图片描述

1. Batch Normalization

mAP提升2.4 % 2.4\%2.4%

关于BN的详细信息,感兴趣的可以看本人专栏深度学习基础下的深度学习七 —— BN & LN & IN & GN
这里不多做讲述

2. High resolution classifier(高分辨率图像分类器)

mAP提升了3.7 % 3.7\%3.7%

图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224 × 224 224 \times 224224×224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448 × 448 448 \times 448448×448 的图像作为输入。但这样切换对模型性能有一定影响。

所以YOLO v2在采用 224 × 224 224 \times 224224×224 图像进行分类模型预训练后,再采用 448 × 448 448 \times 448448×448 的高分辨率样本对分类模型进行微调(10 1010个epoch),使网络特征逐渐适应 448 × 448 448 \times 448448×448 的分辨率。然后再使用 448 × 448 448 \times 448448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

3. Convolution with anchor boxes(使用先验框)

召回率大幅提升到88 % 88\%88%,同时mAP轻微下降了0.2 0.20.2左右。

YOLO v1包含有全连接层,从而能直接预测Bounding Boxes的坐标值。 Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易

借鉴Faster RCNN的做法,YOLO v2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

之前YOLO v1并没有采用先验框,并且每个grid只预测2 22个bounding box,整个图像98 9898个。YOLO v2如果每个grid采用9 99个先验框,总共有13 × 13 × 9 = 1521 13 \times 13 \times 9=152113×13×9=1521个先验框。所以最终YOLO v2去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在416 × 416 416 \times 416416×416 而不是448 × 448 448 \times 448448×448

由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO v2的卷积层采用32 3232这个值来下采样图片,所以通过选择416 × 416 416 \times 416416×416用作输入尺寸最终能输出一个13 × 13 13 \times 1313×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 9898个边界框。但是使用anchor boxes,YOLO v2模型预测了一千多个框,由于存在很多无用的框,这就导致了mAP值的下降。但是由于预测的框多了,所以能够预测出来的属于ground truth的框就多了,所以召回率就增加了。目标检测不是只以mAP为指标的,有些应用场景下要求召回率高。

4. Dimension clusters(聚类提取先验框的尺度信息)

之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。 YOLO v2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO v2的做法是对训练集中标注的边框进行K-mean聚类分析,以寻找尽可能匹配样本的边框尺寸

关于K-Means聚类的详细内容,有需要可以看本人专栏 图像算法 中的图像算法六 —— K-Means和KNN

5. Direct location prediction(约束预测边框的位置)

借鉴Faster RCNN的先验框的方法,在训练的早期阶段,其位置预测容易不稳定。位置预测公式通常为:

x = ( t x × w a ) + x a x = (t_x \times w_a) + x_ax=(tx×wa)+xa

y = ( t y × h a ) + y a y = (t_y \times h_a) + y_ay=(ty×ha)+ya

其中,

x , y x, yx,y——预测边框的中心,

x a , y a x_a, y_axa,ya——anchor的中心点坐标,

w a , h a w_a, h_awa,ha——anchor的宽和高,

t x , t y t_x, t_ytx,ty——学习的参数。

注意YOLO中用的是x = ( t x × w a ) − x a x = (t_x \times w_a) - x_ax=(tx×wa)xaFasteer RCNN中用的是+ ++

由于 t x , t y t_x, t_ytx,ty 的取值没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。

YOLO v2调整了预测公式,将预测边框的中心约束在特定gird网格内,如下图所示:

在这里插入图片描述

其中,

b x , b y , b w , b h b_x, b_y, b_w, b_hbx,by,bw,bh——预测框的中心点和宽高,

c x , c y c_x, c_ycx,cy——当前网格左上角到图像左上角的距离,

σ \sigmaσ——s i g m o i d sigmoidsigmoid函数,

t x , t y , p w , p h t_x, t_y, p_w, p_htx,ty,pw,ph——学习参数,用于预测边框的中心和宽高。

因为使用了限制让数值变得参数化,也让网络更容易学习、更稳定

6. Fine-Grained Features(passthrough层检测细粒度特征)

passthrough层检测细粒度特征使mAP提升1 % 1\%1%

对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO v2中输入416 × 416 416 \times 416416×416经过卷积网络下采样最后输出是13 × 13 13 \times 1313×13),较小的对象可能特征已经不明显甚至被忽略掉了。

为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息

YOLO v2引入一种称为passthrough层的方法在特征图中保留一些细节信息。

具体来说,就是在最后一个pooling之前,特征图的大小是26 × 26 × 512 26 \times 26 \times 51226×26×512,将其1 114 44,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。

在这里插入图片描述

另外,根据YOLO v2的代码,特征图先用1 × 1 1 \times 11×1卷积从 26 × 26 × 512 26 \times 26 \times 51226×26×512 降维到 26 × 26 × 64 26 \times 26 \times 6426×26×64,再做1 114 44并passthrough。

7. Multi-ScaleTraining(多尺度图像训练)

作者希望YOLO v2健壮的运行于不同尺寸的图片之上,所以把这一想法用于训练model中。

区别于之前的补全图片的尺寸的方法YOLO v2每迭代几次都会改变网络参数。每10 1010个Batches,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32 3232,所以不同的尺寸大小也选择为32 3232的倍数320 , 352 … . . 608 {320,352…..608}320352..608,最小320 × 320 320 \times 320320×320,最大608 × 608 608 \times 608608×608,网络会自动改变尺寸,并继续训练的过程。

这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以你可以在YOLO v2的速度和精度上进行权衡。

8. Darknet-19(backbone网络)

Darknet-1919 1919个卷积层和5 55个maxpooling层,采用全局平均池化的方法进行预测,并采用 1 × 1 1 \times 11×1 卷积来压缩 3 × 3 3 \times 33×3 卷积之间的特征表示。使用批处理归一化来稳定训练,加快收敛速度,并对模型进行规范化。

9. Hierarchical classification(分层分类)

作者提出了一种在分类数据集和检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding boxes 坐标预测,是否包含物体以及属于各个物体的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。

作者通过ImageNet训练分类、COCO和VOC数据集来训练检测,这是一个很有价值的思路,可以让我们达到比较优的效果。 通过将两个数据集混合训练,如果遇到来自分类集的图片则只计算分类的Loss,遇到来自检测集的图片则计算完整的Loss。

但是ImageNet对应分类有9000 90009000种,而COCO则只提供80 8080种目标检测,作者使用multi-label模型,即假定一张图片可以有多个label,并且不要求label间独立。

通过作者Paper里的图来说明,由于ImageNet的类别是从WordNet选取的,作者采用以下策略重建了一个树形结构(称为分层树):

  1. 遍历Imagenet的label,然后在WordNet中寻找该label到根节点(指向一个物理对象)的路径;
  2. 如果路径直有一条,那么就将该路径直接加入到分层树结构中;
  3. 否则,从剩余的路径中选择一条最短路径,加入到分层树。

在这里插入图片描述

这个分层树我们称之为 WordTree,作用就在于将两种数据集按照层级进行结合

YOLOv3: An Incremental Improvement

简介

论文下载https://arxiv.org/abs/1804.02767

代码下载https://github.com/yjh0410/yolov2-yolov3_PyTorch

核心思想

YOLO v3的核心思想在于多尺度的预测,也就是使用三种不同的网格来划分原始图像。其中13 × 13 13 \times 1313×13的网格划分的每一块最大,用于预测大目标。26 × 26 26 \times 2626×26的网格划分的每一块中等大小,用于预测中等目标。52 × 52 52 \times 5252×52的网格划分的每一块最小,用于预测小目标。

网络介绍

由于原作者并没有给出网络图,就自己画了一个网络图,有问题请大家指正。

网络改进

简述

  • 多尺度预测 (引入FPN)。
  • 更好的基础分类网络(darknet-53, 类似于ResNet引入残差结构)。
  • 分类器不在使用Softmax,分类损失采用binary cross-entropy loss(二分类交叉损失熵)

1. Darknet-53

下图是Darknet-53的网络结构图

  • 此结构主要由53 5353个卷积层构成,卷积层对于分析物体特征最为有效。由于没有使用全连接层,该网络可以对应任意大小的输入图像。

  • 此外,池化层也没有出现在其中,取而代之的是将卷积层设置s t r i d e = 2 stride=2stride=2来达到下采样的效果,同时将尺度不变特征传送到下一层。

  • 除此之外,Darknet-53中还使用了类似ResNet的结构

在这里插入图片描述

2. 边框回归

一个回归框是由4 44个参数决定—— x , y , w , h x, y, w, hx,y,w,hYOLO v3是在训练的数据集上聚类产生prior boxes的一系列宽高(是在图像416 × 416 416 \times 416416×416的坐标系里),默认9 99种。YOLO v3思想理论是将输入图像分成S × S S \times SS×S个格子(有三处进行检测,分别是在52 × 52 52 \times 5252×52, 26 × 26 26 \times 2626×26, 13 × 13 13 \times 1313×13的feature map上,即S SS会分别为52 , 26 , 13 52,26,1352,26,13),若某个物体Ground truth的中心位置的坐标落入到某个格子,那么这个格子就负责检测中心落在该栅格中的物体。
三次检测,每次对应的感受野不同:

  • 32 3232倍降采样的感受野最大( 13 × 13 ) (13 \times 13)(13×13),适合检测大的目标,每个cell的3 33个anchor boxes为( 116 , 90 ) , ( 156 , 198 ) , ( 373 , 326 ) (116 ,90),(156 ,198),(373 ,326)(116,90),(156,198)(373,326)
  • 16 1616( 26 × 26 ) (26 \times 26)(26×26)适合一般大小的物体,anchor boxes为( 30 , 61 ) , ( 62 , 45 ) , ( 59 , 119 ) (30,61), (62,45),(59,119)(30,61)(62,45)(59,119)
  • 8 88倍的感受野最小( 52 × 52 ) (52 \times 52)(52×52),适合检测小目标,因此anchor boxes为( 10 , 13 ) , ( 16 , 30 ) , ( 33 , 23 ) (10,13), (16,30), (33,23)(10,13),(16,30),(33,23)

所以当输入为416 × 416 416 \times 416416×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_htx,ty,tw,th (网络学习的参数),对于预测的cell(一幅图划分成S × S S \times SS×S个网格cell)根据图像左上角的偏移 ( c x , c y ) (cx, cy)(cx,cy) ,每个grid cell在feature map中的宽和高均为1 11,以及预先设的anchor box的宽和高 p w , p h p_w, p_hpw,ph (预设聚类的宽高需要除以s t r i d e stridestride映射到feature map上)。最终得到的边框坐标值是b bb,而网络学习目标是t ∗ t^*t,用s i g m o d sigmodsigmod函数、指数转换。可以对bounding box按如上图的方式进行预测。

3. 多尺度预测:更好地对应不同大小的目标物体

每种尺度预测3 33个box, anchor的设计方式仍然使用聚类,得到9 99个聚类中心,将其按照大小均分给3 33个尺度.

  • 尺度1 11: 在基础网络之后添加一些卷积层再输出box信息.
  • 尺度2 22: 从尺度1中的倒数第二层的卷积层上采样(× 2 \times 2×2)再与最后一个16 × 16 16 \times 1616×16大小的特征图相加,再次通过多个卷积后输出box信息。相比尺度1 11变大2 22倍。
  • 尺度3 33: 与尺度2 22类似,使用了32 × 32 32 \times 3232×32大小的特征图。

之后在Y O L O v 3 YOLO v3YOLOv3中,采用FPN层对多尺度的特征进行融合使用。

在这里插入图片描述

4. ResNet残差结构:更好地获取物体特征

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)+xH(x)=F(x)+x,其中x xx是shortcut开始时的特征,而F ( x ) F(x)F(x)就是对x进行的填补与增加,成为残差。因此学习的目标就从学习完整的信息,变成学习残差了。这样学习优质特征的难度就大大减小了。

5. 替换softmax层:对应多重label分类

S o f t m a x SoftmaxSoftmax层被替换为一个1 × 1 1 \times 11×1的卷积层+ ++ l o g i s t i c logisticlogistic激活函数的结构。使用s o f t m a x softmaxsoftmax层的时候其实已经假设每个输出仅对应某一个单个的c l a s s classclass,但是在某些c l a s s classclass存在重叠情况(例如woman和person)的数据集中,使用s o f t m a x softmaxsoftmax就不能使网络对数据进行很好的拟合。

常见问题

YOLOv3为什么不使用Softmax对每个框进行分类?

主要考虑因素有两个:

  • S o f t m a x SoftmaxSoftmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此S o f t m a x SoftmaxSoftmax不适用于多标签分类。

  • S o f t m a x SoftmaxSoftmax可被独立的多个logistic分类器替代,且准确率不会下降

分类损失采用binary cross-entropy loss

Bounding box的预测公式中,为什么使用sigmoid函数呢?

YOLO v3不预测边界框中心的绝对坐标,它预测的是偏移量,预测的结果通过一个s i g m o i d sigmoidsigmoid函数,迫使输出的值在0 00~1 11之间。

例如,若对中心的预测是( 0.4 , 0.7 ) (0.4,0.7)(0.4,0.7),左上角坐标是( 6 , 6 ) (6,6)(6,6),那么中心位于13 × 13 13\times1313×13特征地图上的(6.4,6.7)。若预测的x , y x,yxy坐标大于1 11,比如( 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 77排第8 88列单元格,这打破了Y O L O v 3 YOLO v3YOLOv3背后的理论,因为如果假设原区域负责预测某个目标,目标的中心必须位于这个区域中,而不是位于此区域旁边的其他网格里

为解决这个问题,输出是通过一个s i g m o i d sigmoidsigmoid函数传递的,该函数在0 00~1 11的范围内缩放输出,有效地将中心保持在预测的网格中。

YOLO v4: Optimal Speed and Accuracy of Object Detection

简介

论文下载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由于结合了太多的技巧,所以就大概列一部分主要的,如下:

  1. 相较于YOLO v3的DarkNet53,YOLO v4用了CSPDarkNet53
  2. 相较于YOLO v3的FPN,YOLO v4用了SPP+PAN
  3. CutMix数据增强和马赛克(Mosaic)数据增强
  4. DropBlock正则化
  5. 等等

1. BackBone:CSPDarknet53

作者在选在BackBone的时候选择了CSPDarknet53,原因也很简单,在论文中也有提到,当时在目标检测领域,该网络精度最好。

有兴趣的可以去看CSPDarknet53的原文,不多讲述:CSPNet: A New Backbone that can Enhance Learning Capability of CNN

2. Neck:SPP+PAN

SSP不多讲,有兴趣看何凯明大神的论文

SSPSpatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition

SSP+PAN借鉴的是18年CVPR的PANet,当时主要应用于图像分割领域,作者将其拆分应用到YOLO v4中,进一步提高特征提取的能力。

YOLO v4在FPN层的后面还添加了一个自底向上的特征金字塔, 其中包含两个PAN结构。

这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合

4. CutMix数据增强和马赛克(Mosaic)数据增强

  • CutMix数据增强:就是将一部分区域cut掉但不填充0 00像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配

  • Mosaic数据增强:核心思想是随机4 44张图拼合成一张送入网络

5. DropBlock正则化

Dropout 被广泛地用作全连接层的正则化技术,但是对于卷积层,通常不太有效。Dropout 在卷积层不 work 的原因可能是由于卷积层的特征图中相邻位置元素在空间上共享语义信息, 所以尽管某个单元被 dropout 掉,但与其相邻的元素依然可以保有该位置的语义信息,信息仍然可以在卷积网络中流通。

因此,针对卷积神经网络就需要一种结构形式的dropout 来正则化,即按块来丢弃
DropBlock是一种结构化的 dropout 形式,它将 feature map 相邻区域中的单元放在一起 drop 掉。除了卷积层外,在跳跃连接中应用 DropBlock 可以提高精度。

此外,在训练过程中,逐渐增加 dropped unit 的数量会有更好的准确性和对超参数选择的鲁棒性。

YOLO v5

简介

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 27MB27MB , 使用 Darknet 架构的 YOLO v4244 M B 244MB244MB
  • 最后YOLO v5高达140 F P S 140FPS140FPS的对象识别速度令人印象非常深刻,使用体验非常棒。

YOLO X: Exceeding YOLO Series in 2021

简介

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.91M0.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-CSPYOLOv5-L相当的参数量,YOLOX-L取得了50.0 % 50.0\%50.0%AP指标同事具有68.9 f p s 68.9fps68.9fps推理速度(Tesla V100),指标超过YOLOv5-L 1.8 % 1.8\%1.8%;
  • YOLOX-L凭借单模型取得了Streaming Perception(Workshop on Autonomous Driving at CVPR 2021)竞赛冠军。

值得一提的是,作者使用的baselineYOLO v3 + DarkNet53(所谓的YOLO v3-SSP

1. Decoupled Head 解耦头

作者研究发现,检测头耦合会影响模型性能。采用解耦头替换YOLO的检测头可以显著改善模型收敛速度。因此,作者将YOLO的检测头替换为轻量解耦头:它包含一个1 × 1 1\times 11×1卷积进行通道降维,后接两个并行分支(均为3 × 3 3 \times 33×3卷积)。注:轻量头可以带来1.1 m s 1.1ms1.1ms的推理耗时。

2. Mosaic + Mixup 数据增强

  • Mosaic数据增强
  • Mixup数据增强: 对图像进行混类增强的算法,它将不同类之间的图像进行混合,从而扩充训练数据集

3. Anchor-free

YOLO v4YOLO v5均采用了YOLO v3原始的anchor设置。然而anchor机制存在诸多问题:

  • (1) 为获得最优检测性能,需要在训练之前进行聚类分析以确定最佳anchor集合,这些anchor集合存在数据相关性,泛化性能较差;
  • (2) anchor机制提升了检测头的复杂度。

Anchor-free检测器在过去两年得到了长足发展并取得了与anchor检测器相当的性能。

将YOLO转换为anchor-free形式非常简单,我们将每个位置的预测从3下降为1并直接预测四个值:即两个offset以及高宽。这种改进可以降低检测器的参数量于GFLOPs进而取得更快更优的性能:42.9%AP

4. Multi positives

为确保与YOLOv3的一致性,前述anchor-free版本仅仅对每个目标赋予一个正样本,而忽视了其他高质量预测。参考FCOS,我们简单的赋予中心3×3区域为正样本。此时模型性能提升到45.0%,超过了当前最佳U版YOLOv3的44.3%

5. SimOTA

OTA从全局角度分析了标签分配并将其转化为最优运输问题取得了SOTA性能。

然而,作者发现:最优运输问题优化会带来25 % 25\%25%的额外训练耗时。因此,我们将其简化为动态t o p − k top-ktopk策略以得到一个近似解(SimOTA)。SimOTA不仅可以降低训练时间,同时可以避免额外的超参问题。SimOTA的引入可以将模型的性能从45.0 % 45.0\%45.0%提升到47.3 % 47.3\%47.3%,大幅超越U版YOLOv的44.3 % 44.3\%44.3%

6. End-to-End YOLO

YOLO X参考PSS添加了两个额外的卷积层,one-to-one标签分配以及stop gradient。这些改进使得目标检测器进化成了端到端形式,但会轻微降低性能与推理速度。

因此,我们将该改进作为可选模块,并未包含在最终模型中。


版权声明:本文为weixin_43662553原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。