【深度】YOlOv4导读与论文翻译

2020/04/26 15:43
阅读数 1.2K

【深度】YOlOv4导读与论文翻译

刚刚发布YOlOv4!

首先简介一下YOLO

​ YOLO可以说是计算机视觉领域最知名的目标检测算法之一,也因为开源被业界广泛采用。

Redmon单是凭借这个算法,就曾获得过2016年CVPR群众选择奖(People’s Choice Award)、2017年CVPR最佳论文荣誉奖(Best Paper Honorable Mention)。

YOLO及其改进算法,在学术圈的影响也是非凡,被广泛引用,Redmon三篇一作相关论文总引用量已经超过16000次。

​ 今天YOLOv4又刷遍了我的朋友圈,刚好花了点时间研读了一下论文,他的源码还躺在我的电脑上,一有时间,肯定立马看,我也是迫不及待地想体验一把了,自己是初学,正如我的老师所说,站在门边,什么事都是新鲜的!今天我也吃一吃这个yolov4的瓜,先占个坑,做一下YOLOv4的个人导读,好让朋友们大致了解一下新鲜的瓜!
在这里插入图片描述

在这里插入图片描述

这里做个小提醒:YOLO系列(v1-v3)作者 Joe Redmon,早在今年二月就在Tweet上宣布退出CV研究。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2WfyMYpp-1587712035382)(D:\CSDN\pic\Yolo\v2-71aab9769771f87f90cf241f5e16168c_720w.jpg)]

这里YOLOv4的一作是 Alexey Bochkovskiy,他也是darknet另一个github版本的维护者。

YOLOv4:论文:https://link.zhihu.com/?target=https://arxiv.org/pdf/2004.10934.pdf

git源码在此:https://github.com/AlexeyAB/darknet


在此说明:文章为网络参考资料,其中一部分是参考zhou周的文章,自己还没有深入了解,今天YOLOv4刚刚发布,我趁机吃个瓜,一起来了解一下,方便日后了解源码以及了解原理,等自己真正了解了再说些门道给朋友们,今天,我先跟大家一起了解一下YOLOv4,日后一起从v1熟悉到v4!

论文亮点

初看了一下论文 将很多技巧做了一个融合和尝试 很看好这次升级后在工业上的应用

​ YOLOv1-YOLOv3主要是华盛顿大学Joseph Redmon和Ali Farhadi两位带队搞出来的,今年二月份的时候YOLO算法作者Joseph Redmon在个人Twitter上宣布,将停止一切CV研究,原因是自己的开源算法已经用在军事和隐私问题上,这对他的道德造成了巨大的考验。当时我记得新闻一出,票圈一篇哀嚎,都说再也见不到YOLO v4了,毕竟YOLO系列和SSD开启了一波实时目标检测器的热潮,后面多少人的工作都是基于他们的研究,很多落地的检测器还是用的YOLO及其改进,退出之事确实令人唏嘘不已。YOLO系列的每一代进化都是基于前一次痛点问题的改进,希望这三位新作者能接好大棒,毕竟论文上效果的提升确实很明显呀!

作者把Weighted-Residual-Connections (WRC), Cross-Stage-Partial-connections (CSP), Cross mini-Batch Normalization (CmBN), Self-adversarial-training (SAT) and Mish-activation等功效组合起来使用,从而诞生了YOLOv4。

并在MS coco数据集上取得了43.5%AP(65.7%AP50)的惊人成绩。在Tesla V100上实时速度约为65 FPS 。(可以说V4的成绩还是很惊人的)正如标题:YOLOv4: Optimal Speed and Accuracy of Object Detection

性能大幅提升

闲话少叙,一起来看实验结果。

以下实验结果均采用单个 1080Ti 或 2080Ti 进行训练。
在这里插入图片描述

通过实验对比,YOLOv4的运行速度比EfficientDet快两倍,并且性能相当。 将YOLOv3的AP和FPS分别提高了10%和12%。

主要贡献

  1. 设计了一种高效而强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU 训练超快速和准确的目标检测器。

  2. 在检测器训练期间,验证了SOTA的Bag-of FreebiesBag-of-Specials方法的影响。

  3. 改进了SOTA的方法,使它们更有效,更适合单GPU训练,包括CBN,PAN,SAM等。文章将目前主流的目标检测器框架进行拆分:input、backbone、neck 和 head。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dLSB3r3h-1587712035393)(D:\CSDN\pic\Yolo\1587708218350.png)]

作者在现有实时网络的基础上提出了两种观点:

  • 对于GPU而言,在组卷积中采用小数量的groups(1-8),CSPResNeXt50/CSPDarknet53;
  • 对于VPU而言,采用组卷积而不采用SE模块。包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3

部分网路结构:

总结一下YOLOv4框架:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

YOLOv4 = CSPDarknet53+SPP+PAN+YOLOv3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KnCPjY2-1587712035396)(D:\CSDN\pic\Yolo\1587708269711.png)] Cross mini-Batch Normalization

实验结果:

再好的网络也需要实践来检验,来感受一下性能炸裂的YOLOv4实验结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mwZtETxS-1587712035398)(D:\CSDN\pic\Yolo\1587708444240.png)]
在这里插入图片描述

其速度(FPS)、精度(MS COCO AP50…95和AP50)均超过了其他目标检测器。

YOLOv4 主要带来了 3 点新贡献:

1:提出了一种高效而强大的目标检测模型。使用 1080Ti 或 2080Ti 就能训练出超快、准确的目标检测器。

2: 在探测器训练过程中,我们验证了最先进的冷藏袋和特殊物品袋对目标检测方法的影响。

3:改进了 SOTA 方法,使其更有效、更适合单 GPU 训练。


停更了2年之久YOLO GitHub官网,在几个小时前正式更新了README文档。

文档的更新内容主要是指向了YOLO v4的论文和源代码,

接下来我们看看他的github

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOyr7hjI-1587712035401)(D:\CSDN\pic\Yolo\1587709032376.png)]

如果有想立马实战的话,建议先看看readme的环境配置:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HaPHD3Bc-1587712035404)(D:\CSDN\pic\Yolo\1587709226946.png)]

​ 大多数基于CNN的目标检测器大多只适用于推荐系统。例如,通过城市摄像机搜索免费停车位是由低精度模型执行的,而汽车碰撞警告则与高精度模型相关。通过提高实时目标检测的准确性,不仅可以将其用于提示生成推荐系统,还可以用于独立的过程管理和减少人工输入。在传统图形处理单元(GPU)上进行实时目标检测,可以以合理的价格大量使用。最精确的现代神经网络不具备实时性,需要大量的gpu进行小批量的训练。我们通过创建一个CNN来解决这些问题,CNN在传统GPU上实时运行,而训练只需要一个传统GPU。


普通目标探测器由几个部分组成:

输入:图像、面片、图像金字塔

基础网络:VGG16[68]、ResNet-50[26]、SpineNet[12]、EfficientNet-B0/B7[75]、CSPResNeXt50[81]、CSPDarknet53[81]

Neck:
其他区块:SPP[25]、ASPP[5]、RFB[47]、SAM[85]
路径聚合块:FPN[44]、PAN[49]、NAS-FPN[17]、完全连接的FPN、BiFPN[77]、ASFF[48]、SFAM[98]

Heads:

密集预测(一阶段):

(1)RPN[64]、SSD[50]、YOLO[61]、RetinaNet[45](基于锚)

(2)CornerNet[37]、CenterNet[13]、MatrixNet[60]、FCOS[78](无锚)

稀疏预测(两阶段):

(1)更快的R-CNN[64]、R-FCN[9]、掩码RCNN[23](基于锚)

(2)RepPoints[87](无锚)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmGkhVsh-1587712035406)(D:\CSDN\pic\Yolo\1587710542153.png)]

2.2Bag of freebies

​ 通常,传统的目标探测器是离线训练的。因此,研究者总是希望利用这一优势,开发出更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们把这些只改变训练策略或只增加训练成本的方法称为“免费包”,目标检测方法通常采用的满足免费包定义的方法是数据增强。数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的图像具有更高的鲁棒性。例如,光度学和几何学是两种常用的数据增强方法,它们无疑有利于目标检测任务。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何失真,我们添加了随机缩放、裁剪、翻转和旋转。

​ 上述数据增强方法都是逐像素调整,并且保留了调整区域中的所有原始像素信息。此外,一些从事数据增强的研究者把重点放在模拟物体遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,random erase[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充0的随机值或互补值。至于捉迷藏(69)和网格掩码(6),它们随机或均匀地选择图像中的多个矩形区域,并将它们替换为全部零。如果将类似的概念应用于特征地图,则有DropOut[71]、DropConnect[80]和DropBlock[16]方法。此外,一些研究者还提出了利用多幅图像进行数据增强的方法。例如,MixUp[92]使用两个图像以不同的系数比率进行乘法和叠加,然后使用这些叠加比率调整标签。对于CutMix[91],它是将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法外,样式转移GAN[15]还用于数据增强,这样的使用可以有效地减少CNN学习到的纹理偏差。


​ 最后一袋赠品是边界盒回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即{xcenter,ycenter,w,h},或者是左上点和右下点,即{xtop left,ytop left,xbottom right,ybottom right}。基于锚定的方法是估计相应的偏移量,例如{xcenter offset,ycenter offset,woffset,hoffset}和{xtop left offset,ytop left offset,xbottom right offset,ybottom right offset}。然而,直接估计BBox中每个点的坐标值就是把这些点作为自变量来处理,但实际上并不考虑对象本身的完整性。为了使这个问题得到更好的处理,一些研究人员最近提出了IoU损失,其中考虑了预测BBox面积和地面真实BBox面积的覆盖。IoU损耗计算过程将通过执行IoU和地面真值来触发BBox四个坐标点的计算,然后将生成的结果连接成一个完整的代码。由于IoU是尺度不变的表示,它可以解决传统方法计算{x,y,w,h}的l1或l2损耗时,损耗会随着尺度的增大而增大的问题。最近,一些研究人员继续改善借据损失。例如,GIoU loss[65]是除了覆盖区域之外还包括对象的形状和方向。他们提出寻找能同时覆盖预测BBox和地面真值BBox的最小面积BBox,并用这个BBox作为分母来代替原来用于IoU损失的分母。对于DIoU损失[99],它另外考虑了物体中心的距离,而CIoU损失[99],另一方面,它同时考虑了重叠区域、中心点之间的距离和纵横比。CIoU算法在BBox回归问题上具有较好的收敛速度和精度。

2.3. Bag of specials

​ 对于那些只增加少量推理代价却能显著提高目标检测精度的插件模块和后处理方法,我们称之为“特殊包”。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受域、引入注意机制、增强特征集成能力等,后处理是筛选模型预测结果的一种方法。

​ 可用于增强感受野的常见模块有SPP[25]、ASPP[5]和RFB[47]。SPP模块源于空间金字塔匹配(SPM)[39],SPMs最初的方法是将特征图分割成若干个d×d相等的块,其中d可以是{1,2,3,…},从而形成空间金字塔,然后提取一袋字的特征。SPP将SPM集成到CNN中,使用max池操作而不是包字操作。自He等人提出SPP模块以来。[25]将输出一维特征向量,不适用于全卷积网络(FCN)。因此,在YOLOv3[63]的设计中,Redmon和Farhadi改进了SPP模块,将最大池输出与内核大小k×k(其中k={1,5,9,13},步长等于1)连接起来。在这种设计下,相对较大的k×k最大池有效地增加了骨干特征的接收场。在加入了改进版的SPP模块后,YOLOv3-608在MS-COCO目标检测任务上以0.5%的额外计算代价将ap50升级了2.7%。ASPP[5]模与改进的SPP模在运算上的区别主要在于原k×k核大小、最大步长池等于1到几个3×3核大小、扩展比等于k、扩展卷积运算步长等于1。RFB模块是利用k×k核的几个展开卷积,展开比为k,步长为1,得到比ASPP更全面的空间覆盖。RFB[47]仅需7%的额外推断时间,即可将MS-COCO上SSD的ap50提高5.7%。


YOLO v4使用:

**主干线免费包:**CutMix和Mosaic数据增强、DropBlock正则化、类标签平滑

主干网专用包(BoS):误激活、跨阶段部分连接(CSP)、多输入加权剩余连接(MiWRC)
探测器的免费包(BoF):CIoU丢失,CmBN,DropBlock正则化,马赛克数据增强,自对抗训练,消除网格敏感度,使用多个锚实现单个地面真实,余弦退火调度器[52],最优超参数,随机训练形状
探测器专用包(BoS):Mish激活、SPP块、SAM块、泛路径聚合块、DIoU NMS

实验

在ImageNet(ILSVRC 2012 val)数据集上测试了不同训练改进技术对分类器精度的影响,然后在MS-COCO(test dev 2017)数据集上测试了检测器的精度。

实验装置

在ImageNet图像分类实验中,默认的超参数为:训练步为8000000;批大小和最小批大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1;预热步数为1000;动量衰减和重量衰减分别设为0.9和0.005。我们所有的BoS实验都使用与默认设置相同的超参数,在BoF实验中,我们添加了50%的额外训练步骤。在BoF实验中,我们验证了MixUp、CutMix、Mosaic、模糊数据增强和标签平滑正则化方法。在BoS实验中,我们比较了lrelu、Swish和mish激活函数的效果。所有实验均采用1080ti或2080ti GPU进行训练。

在MS-COCO目标检测实验中,默认超参数为:训练步长为500500;采用步长衰减学习速率调度策略,初始学习速率为0.01,在400000步和450000步分别乘以因子0.1;分别设置动量衰减和权重衰减分别为0.9和0.0005。所有体系结构都使用单个GPU执行64批的多尺度训练,而最小批大小为8或4取决于体系结构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验都使用默认设置。**遗传算法利用YOLOv3 SPP进行带GIoU损失的训练,搜索300个时间段的最小val 5k集。采用搜索学习率0.00261、动量0.949、IoU阈值指定地面真值0.213、损失归一化器0.07进行遗传算法实验。我们已经验证了大量的BoF,包括网格敏感度消除、马赛克数据增强、IoU阈值、遗传算法、类标签平滑、交叉小批量规范化、自对抗训练、余弦退火调度、动态小批量、DropBlock、优化锚、不同类型的IoU损失。**我们还对各种BoS进行了实验,包括Mish、SPP、SAM、RFB、BiFPN和Gaussian YOLO[8]。对于所有的实验,我们只使用一个GPU进行训练,所以不使用syncBN等优化多个GPU的技术。

不同特征对分类器训练的影响

首先,我们研究了不同特征对分类器训练的影响;具体来说,如图7所示,类标签平滑的影响,不同数据增强技术的影响,双边模糊、混合、剪切和镶嵌,以及不同激活的影响如ReLU(默认)、Swish和Mish

不同特征对探测器训练的影响

进一步研究了不同的冷藏袋(BoF检测器)对检测器训练精度的影响,如表4所示。我们通过研究在不影响FPS的情况下提高探测器精度的不同特性,显著扩展了BoF列表:

S: 消除灵敏度在YOLOv3中,cx和cy始终是整数的等式bx=σ(tx)+cx,by=σ(ty)+cy用于计算对象坐标,因此,接近cx或cx+1的bx值需要极高的txabsolute值。我们通过将乙状结肠乘以一个超过1.0的因子来解决这个问题,从而消除了物体无法检测到的网格效应。
M: 马赛克数据增强-在训练期间使用4图像马赛克而不是单个图像
IT:IoU阈值-使用多个锚定一个地面真实IoU(真实,锚定)>IoU阈值
GA:遗传算法-使用遗传算法在前10%时间段的网络训练中选择最佳超参数
LS:类标签平滑-使用类标签平滑进行乙状结肠激活
CBN:CmBN-使用跨小批量规范化来收集整个批内的统计信息,而不是在单个小批量内收集统计信息
CA:余弦退火调度器-在正弦训练中改变学习速率
DM:动态小批量-使用随机训练形状在小分辨率训练期间自动增加小批量
OA:优化锚-使用优化锚进行512x512网络分辨率的训练
GIoU,CIoU,DIoU,MSE-有界盒回归的不同损失算法








不同骨干和预训练重量对探测器训练的影响

进一步研究不同骨干网模型对探测器精度的影响,如表6所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最佳的。

首先,尽管CSPRESNEXT50模型在不同特征下的分类精度与CSPDarknet53模型相比更高,但CSPDarknet53模型在目标检测方面显示出更高的精度。

其次,使用BoF和Mish进行CSPResNeXt50分类器训练可以提高分类器的分类精度,但进一步应用这些预先训练好的权重进行检测器训练会降低检测器的分类精度。然而,使用BoF和Mish进行CSPDarknet53分类器训练可以提高分类器和使用该分类器预先训练权重的检测器的精度。结果表明,主干CSPDarknet53比CSPResNeXt50更适合于探测器。

我们观察到,CSPDarknet53模型通过各种改进显示出更大的能力来提高探测器的精度。

不同微批量对检测器训练的影响

最后,我们分析了使用不同小批量训练的模型得到的结果,结果如表7所示。从表7的结果可以看出,在加入BoF和BoS训练策略后,小批量对检测器的性能几乎没有影响。结果表明,BoF和BoS引入后,不再需要使用昂贵的gpu进行训练。换句话说,任何人都只能使用传统的GPU来训练优秀的探测器。

结论

显示了与其他最先进的目标探测器的比较结果。我们的YOLOv4位于Pareto最优曲线上,在速度和精度方面都优于最快和最精确的检测器。

我们提供最先进的探测器,比所有可用的替代探测器更快(FPS)和更精确(MS COCO AP50…95和AP50)。所述检测器可在8-16gb-VRAM的传统GPU上训练和使用,这使得其广泛应用成为可能。一级锚定探测器的最初概念已经证明了它的可行性。我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的精度。这些特性可以作为今后研究和开发的最佳实践。


结论部分:

以上文章参考成龙的龙对论文的翻译工作,特此感谢,能让我看的比较明白论文。另外,自己是深度学习狂热爱好者,初学不久,许多东西不是自己的水平能掌握的,还在努力学习中,本文参考了一些朋友的文章,不过觉得大门大都写的不是很好,自己就找了翻译来送给大家,因为论文里面已经写的很明白了,英文文献,我也会在空闲时学习一下,码字不易,还望各位看官关注一下,三连~

虽然YOLOv4不是joseph redmon的佳作(有点遗憾),但我们能看到V4依旧闪耀着光芒。
上海第二工业大学智能科学与技术大二——周小夏(CV调包侠)

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部