做者:William
git来源:自动驾驶全栈工程师知乎专栏算法
连接:https://www.zhihu.com/people/william.hyin/columns微信

YOLO之父Joseph Redmon在今年年初宣布退出计算机视觉的研究的时候,不少人都觉得目标检测神器YOLO系列就此终结。网络
然而在4月23日,继任者YOLO V4却悄无声息地来了。Alexey Bochkovskiy发表了一篇名为YOLOV4: Optimal Speed and Accuracy of Object Detection的文章。架构
YOLO V4是YOLO系列一个重大的更新,其在COCO数据集上的平均精度(AP)和帧率精度(FPS)分别提升了10% 和12%,并获得了Joseph Redmon的官方承认,被认为是当前最强的实时对象检测模型之一。
app
正当计算机视觉的从业者们正在努力研究YOLO V4的时候,万万没想到,有牛人不服。框架
6月25日,Ultralytics发布了YOLOV5 的第一个正式版本,其性能与YOLO V4不相伯仲,一样也是现今最早进的对象检测技术,并在推理速度上是目前最强。dom
从上图的结果能够看出,YOLO V5确实在对象检测方面的表现很是出色,尤为是YOLO V5s 模型140FPS的推理速度很是惊艳。编辑器
YOLO V5和V4集中出现让不少人都感到疑惑,一是YOLO V5真的有资格能被称做新一代YOLO吗?二是YOLO V5的性能与V4相比究竟如何,二者有啥区别及类似之处?ide
在本文中我会详细介绍YOLO V5和YOLO V4的原理,技术区别及类似之处,最后会从多方面对比二者的性能。
我在我以前的文章中介绍了YOLO V3模型,YOLO是一种快速紧凑的开源对象检测模型,与其它网络相比,同等尺寸下性能更强,而且具备很不错的稳定性,是第一个能够预测对象的类别和边界框的端对端神经网络。
YOLO V3原始模型是基于Darknet网络。Ultralytics将YOLO V3架构迁移到了Pytorch平台上,并对其自行研究和改进。Ultralytics-yolov3 代码库是目前已开源YOLO V3 Pytorch的最佳实现。
YOLO网络主要由三个主要组件组成。
1)Backbone -在不一样图像细粒度上聚合并造成图像特征的卷积神经网络。
2)Neck:一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。
3)Head:对图像特征进行预测,生成边界框和并预测类别。
下图是对象检测网络的通用架构:

咱们能够在上述每一个主要组件上使用不一样的技术或者组合不一样的方案来实现属于本身的最佳对象检测框架。
实际上YOLO V5的模型架构是与V4很是相近的。
在下文中,我会从下面几个方面对比YOLO V5和V4,并简要阐述它们各自新技术的特色,对比二者的区别和类似之处,评判二者的性能,并作最后总结。
Data Augmentation
Auto Learning Bounding Box Anchors
Backbone
Neck
Head
Activation Function
Optimization Function
Benchmarks
Data Augmentation
YOLO V4数据加强

图像遮挡
Random Erase:用随机值或训练集的平均像素值替换图像的区域。

Cutout:仅对 CNN 第一层的输入使用剪切方块Mask。

Hide and Seek:将图像分割成一个由 SxS 图像补丁组成的网格,根据几率设置随机隐藏一些补丁,从而让模型学习整个对象的样子,而不是单独一块,好比不单独依赖动物的脸作识别。

Grid Mask:将图像的区域隐藏在网格中,做用也是为了让模型学习对象的整个组成部分。

MixUp:图像对及其标签的凸面叠加。

多图组合
将另外一个图像中的剪切部分粘贴到加强图像。图像的剪切迫使模型学会根据大量的特征进行预测。

在Cutmix中咱们组合了两张图像,而在 Mosaic 中咱们使用四张训练图像按必定比例组合成一张图像,使模型学会在更小的范围内识别对象。其次还有助于显著减小对batch-size的需求,毕竟大多数人的GPU显存有限。

自对抗训练(SAT)
Self-Adversarial Training是在必定程度上抵抗对抗攻击的数据加强技术。CNN计算出Loss, 而后经过反向传播改变图片信息,造成图片上没有目标的假象,而后对修改后的图像进行正常的目标检测。须要注意的是在SAT的反向传播的过程当中,是不须要改变网络权值的。

类标签平滑

YOLO V5 数据加强

Auto Learning Bounding Box Anchors-自适应锚定框

# anchors
anchors:
- [116,90, 156,198, 373,326] # P5/32
- [30,61, 62,45, 59,119] # P4/16
- [10,13, 16,30, 33,23] # P3/8
可是对于你的自定义数据集来讲,因为目标识别框架每每须要缩放原始图片尺寸,而且数据集中目标对象的大小可能也与COCO数据集不一样,所以YOLO V5会从新自动学习锚定框的尺寸。

如在上图中, YOLO V5在进行学习自动锚定框的尺寸。对于BDD100K数据集,模型中的图片缩放到512后,最佳锚定框为:
YOLO V4并无自适应锚定框。
Backbone-跨阶段局部网络(CSP)
YOLO V5和V4都使用CSPDarknet做为Backbone,从输入图像中提取丰富的信息特征。CSPNet全称是Cross Stage Partial Networks,也就是跨阶段局部网络。
CSPNet解决了其余大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头至尾地集成到特征图中,所以减小了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减少了模型尺寸。
CSPNet其实是基于Densnet的思想,复制基础层的特征映射图,经过dense block 发送副本到下一个阶段,从而将基础层的特征映射图分离出来。
这样能够有效缓解梯度消失问题(经过很是深的网络很难去反推丢失信号) ,支持特征传播,鼓励网络重用特征,从而减小网络参数数量。
CSPNet思想能够和ResNet、ResNeXt和DenseNet结合,目前主要有CSPResNext50 and CSPDarknet53两种改造Backbone网络。
Neck-路径聚合网络(PANET)
Neck主要用于生成特征金字塔。特征金字塔会加强模型对于不一样缩放尺度对象的检测,从而可以识别不一样大小和尺度的同一个物体。
在PANET出来以前,FPN一直是对象检测框架特征聚合层的State of the art,直到PANET的出现。
在YOLO V4的研究中,PANET被认为是最适合YOLO的特征融合网络,所以YOLO V5和V4都使用PANET做为Neck来聚合特征。
PANET基于 Mask R-CNN 和 FPN 框架,同时增强了信息传播。该网络的特征提取器采用了一种新的加强自下向上路径的 FPN 结构,改善了低层特征的传播。
第三条通路的每一个阶段都将前一阶段的特征映射做为输入,并用3x3卷积层处理它们。输出经过横向链接被添加到自上而下通路的同一阶段特征图中,这些特征图为下一阶段提供信息。
同时使用自适应特征池化(Adaptive feature pooling)恢复每一个候选区域和全部特征层次之间被破坏的信息路径,聚合每一个特征层次上的每一个候选区域,避免被任意分配。
下图中pi 表明 CSP 主干网络中的一个特征层

Head-YOLO 通用检测层
模型Head主要用于最终检测部分。它在特征图上应用锚定框,并生成带有类几率、对象得分和包围框的最终输出向量。
在 YOLO V5模型中,模型Head与以前的 YOLO V3和 V4版本相同。

这些不一样缩放尺度的Head被用来检测不一样大小的物体,每一个Head一共(80个类 + 1个几率 + 4坐标) * 3锚定框,一共255个channels。
Activation Function
激活函数的选择对于深度学习网络是相当重要的。YOLO V5的做者使用了 Leaky ReLU 和 Sigmoid 激活函数。
在 YOLO V5中,中间/隐藏层使用了 Leaky ReLU 激活函数,最后的检测层使用了 Sigmoid 形激活函数。而YOLO V4使用Mish激活函数。
Mish在39个基准测试中击败了Swish,在40个基准测试中击败了ReLU,一些结果显示基准精度提升了3–5%。
可是要注意的是,与ReLU和Swish相比,Mish激活在计算上更加昂贵。

Optimization Function
YOLO V5的做者为咱们提供了两个优化函数Adam和SGD,并都预设了与之匹配的训练超参数。默认为SGD。
YOLO V4使用SGD。
YOLO V5的做者建议是,若是须要训练较小的自定义数据集,Adam是更合适的选择,尽管Adam的学习率一般比SGD低。
可是若是训练大型数据集,对于YOLOV5来讲SGD效果比Adam好。
实际上学术界上对于SGD和Adam哪一个更好,一直没有统一的定论,取决于实际项目状况。
Cost Function
YOLO 系列的损失计算是基于 objectness score, class probability score,和 bounding box regression score.
YOLO V5使用 GIOU Loss做为bounding box的损失。
YOLO V5使用二进制交叉熵和 Logits 损失函数计算类几率和目标得分的损失。同时咱们也可使用fl _ gamma参数来激活Focal loss计算损失函数。
YOLO V4使用 CIOU Loss做为bounding box的损失,与其余提到的方法相比,CIOU带来了更快的收敛和更好的性能。

上图结果基于Faster R-CNN,能够看出,实际上CIoU 的表现比 GIoU 好。
Benchmarks- YOLO V5 VS YOLO V4
因为Ultralytics公司目前重心都放在尽快推广YOLO V5对象检测框架,YOLO V5也在不停的更新和完善之中,所以做者打算年末在YOLO V5的研究完成以后发表正式论文。
在没有论文的详细论述以前,咱们只能经过查看做者放出的COCO指标并结合大佬们后续的实例评估来比较二者的性能。
官方性能评估


在上面的两个图中,FPS与ms/img的关系是反转的,通过单位转换后咱们能够发现,在V100GPU上YOLO V5能够达到250FPS,同时具备较高的mAP。
因为YOLO V4的原始训练是在1080TI上的,远低于V100的性能,而且AP_50与AP_val的对标不一样,所以仅凭上述的表格是没法得出二者的Benchmarks。
好在YOLO V4的第二做者WongKinYiu使用V100的GPU提供了能够对比的Benchmarks。
从图表中能够看出,二者性能其实很接近,可是从数据上看YOLO V4仍然是最佳对象检测框架。YOLO V4的可定制化程度很高,若是不害怕更多自定义配置,那么基于Darknet的YOLO V4仍然是最准确的。
值得注意的是YOLO V4其实使用了大量Ultralytics YOLOv3代码库中的数据加强技术,这些技术在YOLO V5中也被运行,数据加强技术对于结果的影响到底有多大,还得等做者的论文分析。
训练时间
根据Roboflow的研究代表,YOLO V5的训练很是迅速,在训练速度上远超YOLO V4。对于Roboflow的自定义数据集,YOLO V4达到最大验证评估花了14个小时,而YOLO V5仅仅花了3.5个小时。
而在我本身的数据训练过程当中,YOLO V5s训练速度远超YOLO V4 。我会在个人下篇文章:YOLO V5 Transfer learning 中展现YOLO V5s的实测训练速度。
模型大小
上图中不一样模型的大小分别为:V5x: 367MB,V5l: 192MB,V5m: 84MB,V5s: 27MB,YOLOV4: 245 MB
YOLO V5s 模型尺寸很是小,下降部署成本,有利于模型的快速部署。
推理时间
在单个图像(批大小为1)上,YOLOV4推断在22毫秒内,YOLOV5s推断在20毫秒内。
而YOLOV5实现默认为批处理推理(批大小36),并将批处理时间除以批处理中的图像数量,单一图片的推理时间可以达到7ms,也就是140FPS,这是目前对象检测领域的State-of-the-art。
我使用我训练的模型对10000张测试图片进行实时推理,YOLOV5s 的推理速度很是惊艳,每张图只须要7ms的推理时间,再加上20多兆的模型大小,在灵活性上堪称无敌。
可是其实这对于YOLO V4并不公平,因为YOLO V4没有实现默认批处理推理,所以在对比上呈现劣势,接下来应该会有不少关于这两个对象检测框架在同一基准下的测试。
其次YOLO V4最新推出了tiny版本,YOLO V5s 与V4 tiny 的性能速度对比还须要更多实例分析。
Summary
总的来讲,YOLO V4 在性能上优于YOLO V5,可是在灵活性与速度上弱于YOLO V5。
因为YOLO V5仍然在快速更新,所以YOLO V5的最终研究成果如何,还有待分析。
我我的以为对于这些对象检测框架,特征融合层的性能很是重要,目前二者都是使用PANET,可是根据谷歌大脑的研究,BiFPN才是特征融合层的最佳选择。谁能整合这项技术,颇有可能取得性能大幅超越。

尽管YOLO V5目前仍然计逊一筹,可是YOLO V5仍然具备如下显著的优势:
使用Pytorch框架,对用户很是友好,可以方便地训练本身的数据集,相对于YOLO V4采用的Darknet框架,Pytorch框架更容易投入生产
代码易读,整合了大量的计算机视觉技术,很是有利于学习和借鉴
不只易于配置环境,模型训练也很是快速,而且批处理推理产生实时结果
可以直接对单个图像,批处理图像,视频甚至网络摄像头端口输入进行有效推理
可以轻松的将Pytorch权重文件转化为安卓使用的ONXX格式,而后能够转换为OPENCV的使用格式,或者经过CoreML转化为IOS格式,直接部署到手机应用端
最后YOLO V5s高达140FPS的对象识别速度使人印象很是深入,使用体验很是棒
写在结尾
其实不少人都以为YOLO V4和YOLO V5实际上没有什么耳目一新创新,而是大量整合了计算机视觉领域的State-of-the-art,从而显著改善YOLO对象检测的性能。
其实我以为有的时候工程应用的能力一样也很重要,能有两个这么优秀的技术整合实例供咱们无偿使用和学习研究,已经不能奢求更多了,毕竟活雷锋仍是少啊。先别管别人谁更强,本身能学到更多才是最重要的,毕竟讨论别人谁强,还不如本身强。
最后想说的是,技术发展如此之快,究竟谁能最后拿下最佳对象检测框架的头衔尤未可知,而咱们处在最好的时代,让咱们且行且学且珍惜。

备注:目标检测

目标检测交流群
2D、3D目标检测等最新资讯,若已为CV君其余帐号好友请直接私信。
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net

在看,让更多人看到
本文分享自微信公众号 - 我爱计算机视觉(aicvml)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。