
WeThinkIn
2022/10/16阅读:193主题:橙心
【Make YOLO Great Again】YOLOv1-v7全系列大解析(Backbone篇)

Rocky Ding
公众号:WeThinkIn

写在前面
【Make YOLO Great Again】栏目专注于从更实战,更深刻的角度解析YOLOv1-v7这个CV领域举足轻重的算法系列,并给出其在业务侧,竞赛侧以及研究侧的延伸思考。欢迎大家一起交流学习💪,分享宝贵的ideas与思考~
大家好,我是Rocky。
近年来YOLO系列层出不穷,更新不断,已经到v7版本。Rocky认为不能简单用版本高低来评判一个系列的效果好坏,YOLOv1-v7不同版本各有特色,在不同场景,不同上下游环境,不同资源支持的情况下,如何从容选择使用哪个版本,甚至使用哪个特定部分,都需要我们对YOLOv1-v7有一个全面的认识。
故Rocky将YOLO系列每个版本都表示成下图中的五个部分,逐一进行解析,并将每个部分带入业务向,竞赛向,研究向进行延伸思考,探索更多可能性。
【Make YOLO Great Again】YOLOv1-v7全系列大解析(Neck篇),【Make YOLO Great Again】YOLOv1-v7全系列大解析(Head篇)以及【Make YOLO Great Again】YOLOv1-v7全系列大解析(输入侧篇)已经发布,大家可按需取用~
而本文将聚焦于YOLO系列Backbone知识的分享,希望能让江湖中的英雄豪杰获益,也希望大家提出宝贵的建议与观点,让这个栏目更加繁荣。

So,enjoy(与本文的BGM一起食用更佳哦):
干货篇
----【目录先行】----
-
YOLOv1-v7论文&&代码大放送
-
YOLO系列中Backbone结构的特点
-
YOLOv1 Backbone解析
-
YOLOv2 Backbone解析
-
YOLOv3 Backbone解析
-
YOLOv4 Backbone解析
-
YOLOv5 Backbone解析
-
YOLOx Backbone解析
-
YOLOv6 Backbone解析
-
YOLOv7 Backbone解析
【一】YOLOv1-v7论文&&代码大放送
YOLOv1论文名以及论文地址:You Only Look Once:Unified, Real-Time Object Detection[1]
YOLOv1开源代码:YOLOv1-Darkent[2]
YOLOv2论文名以及论文地址:YOLO9000:Better, Faster, Stronger[3]
YOLOv2开源代码:YOLOv2-Darkent[4]
YOLOv3论文名以及论文地址:YOLOv3: An Incremental Improvement[5]
YOLOv3开源代码:YOLOv3-PyTorch[6]
YOLOv4论文名以及论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection[7]
YOLOv4开源代码:YOLOv4-Darkent[8]
YOLOv5论文名以及论文地址:无
YOLOv5开源代码:YOLOv5-PyTorch[9]
YOLOx论文名以及论文地址:YOLOX: Exceeding YOLO Series in 2021[10]
YOLOx开源代码:YOLOx-PyTorch[11]
YOLOv6论文名以及论文地址:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications[12]
YOLOv6开源代码:YOLOv6-PyTorch[13]
YOLOv7论文名以及论文地址:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[14]
YOLOv7开源代码:Official YOLOv7-PyTorch[15]
【二】YOLO系列中Backbone结构的特点
YOLO系列中的Backbone结构主要作为网络的一个核心特征提取器,随着时代的变迁不断发展。
某种程度上,YOLO系列的各个Backbone代表着当时的高价值模型与AI行业的发展记忆,计算机视觉江湖上,曾出现的那些“算法兵器”,它们确实来过。
Backbone与输入侧一样,是通用性非常强的一个部分,具备很强的向目标检测其他模型,图像分类,图像分割,目标跟踪等方向迁移应用的价值。
从业务向,竞赛向,研究向等角度观察,Backbone结构也能在这些方面比较好的融入,从容。
【三】YOLOv1 Backbone解析
YOLOv1的Backbone有着朴素的逻辑,主要受启发于GoogLeNet的结构。

YOLOv1的backbone结构中使用了Leaky ReLu激活函数,但并没有引入BN层。
【Rocky的延伸思考】
-
YOLOv1 Backbone逻辑在整个YOLO系列中已不具备竞争力,但是可以作为业务向,竞赛向的入场Baseline,快速搭建,快速试错。
【四】YOLOv2 Backbone解析
YOLOv2的Backbone在YOLOv1的基础上设计了Darknet-19网络,并引入了BN层优化模型整体性能。

Darknet-19网络包含19个卷积层和5个max pooling层,整体计算量比YOLOv1中采用的GooleNet更少,最后用average pooling层代替全连接层进行Inference。
在YOLOv2的Backbone中加入BN层之后,使得mAP提升了2%,而BN层也成为了YOLO后续系列的标配。
【Rocky的延伸思考】
-
业务向:YOLOv2 Backbone结构完全可以应用于业务baseline模型。
【五】YOLOv3 Backbone解析
YOLOv3的Backbone在YOLOv2的基础上设计了Darknet-53结构。

YOLOv3将YOLOv2的Darknet-19加深了网络层数,并引入了ResNet的残差思想,也正是残差思想让YOLOv3将Backbone深度大幅扩展至Darknet-53。
YOLOv3优化了下采样方式(无池化层结构),采用卷积层来实现,而YOLOv2中采用池化层实现。
【Rocky的延伸思考】
-
YOLOv3的Backbone无论是在业务向,竞赛向还是研究向,都可以作为入场Baseline。
【六】YOLOv4 Backbone解析
YOLOv4的Backbone在YOLOv3的基础上,受CSPNet网络结构启发,将多个CSP子模块进行组合设计成为CSPDarknet53,并且使用了Mish激活函数。

CSPDarknet53总共有72层卷积层,遵循YOLO系列一贯的风格,这些卷积层都是 大小,步长为2的设置,能起到特征提取与逐步下采样的作用。
CSP子模块主要解决了由于梯度信息重复导致的计算量庞大的问题。
CSP模块不仅仅是一个子结构,更是一个处理思想,可以和ResNet、ResNext、DenseNet、EfficientNet等网络结合使用。

上图左侧是DenseNet的结构,它进行反向传播时会有大量的重复计算,而右侧的图是CSP模块结构,它将基础层的特征图分成两部分,一部分直接与该阶段的末尾concat相连,另一部分经过局部Dense模块,从而既能保留Dense模块的特征复用,又能截断梯度流,避免大量的重复计算,同时可以保证准确率。
总的来说,CSP模块解决了三个方面的问题:
-
提升模型的学习能力,同时使模型轻量化。 -
降低计算瓶颈,提高硬件利用率。 -
降低模型的内存占用。
CSP模块逻辑也可以迁移到其他Backbone网络,例如优化ResNet以提升性能:

CSPNet论文地址:CSPNet[16]
YOLOv4论文中通过消融实验发现使用Mish激活函数会提升性能,于是在Backbone中将其使用。(注:除Backbone以外的网络结构依旧使用LeakyReLU激活函数)

Mish激活函数的示意图如下,其有三个主要特征:
-
无上界有下界。Mish向上无边界避免了由于封顶而导致的梯度饱和,加快训练过程。向下有边界有助于实现强正则化效果。 -
非单调函数。允许其在负半轴有稳定的微小负值,从而使梯度流更稳定。与ReLU负半轴的硬零边界相比,其梯度更平滑。 -
无穷连续性与光滑性。具有较好的泛化能力,提高训练结果的质量。

Mish激活函数的表达式:

Mish激活函数论文地址:Mish激活函数[17]
【Rocky的延伸思考】
-
业务向:YOLOv4 Backbone中使用的CSP思想可以方便地与业务场景相结合。 -
竞赛向:YOLOv4 Backbone中提到的CSP结构和Mish激活函数在竞赛中是比较有效的Tricks。 -
研究向:YOLOv4 Backbone具备作为研究Baseline的价值。
【七】YOLOv5 Backbone解析
YOLOv5的Backbone同样使用了YOLOv4中使用的CSP思想。

值得一提的是,YOLOv5最初版本中会存在Focus结构,在YOLOv5第六版开始后,就舍弃了这个结构改用 的常规卷积,其产生的参数更少,效果更好。

【Rocky的延伸思考】
-
YOLOv5 Backbone的易用性使得其不管在业务向,竞赛向还是研究向都非常友好。
【八】YOLOx Backbone解析
YOLOx的Backbone沿用了YOLOv3的Backbone结构,故在此不在展开介绍。

【九】YOLOv6 Backbone解析
YOLOv6的Backbone侧在YOLOv5的基础上,设计了EfficientRep Backbone结构。

和YOLOv5的Backbone相比,YOLOv6的Backbone不但能够高效利用硬件算力,而且还具有较强的表征能力。
YOLOv6的Backbone中将普通卷积都替换成了RepConv结构。同时,在RepConv基础上设计了RepBlock结构,其中RepBlock中的第一个RepConv会做channel维度的变换和对齐。
另外,YOLOv6将SPPF优化设计为更加高效的SimSPPF,增加特征重用的效率。

【Rocky的延伸思考】
-
业务向:YOLOv6 Backbone可以高效用于业务向的部署端。 -
竞赛向:YOLOv6 Backbone可以用于竞赛向的Baseline尝试。 -
研究向:YOLOv6 Backbone可以用于研究向的消融实验。
【十】YOLOv7 Backbone解析
YOLOv7的Backbone侧在YOLOv5的基础上,设计了E-ELAN和MPConv结构。

E-ELAN结构已经在本系列的Neck篇中详细介绍,本文就不再展开。MPConv结构由常规卷积与maxpool双路径组成,增加模型对特征的提取融合能力。不管是E-ELAN还是MPConv结构,都将特征重用逻辑演绎到了比较高的水准,让人眼前一亮。
【Rocky的延伸思考】
-
业务向:YOLOv7 Backbone可以作为业务向的Baseline使用。 -
竞赛向:YOLOv7 Backbone可以用于竞赛向的入场Baseline。 -
研究向:YOLOv7 Backbone可以用于研究向的入场研究Baseline。
精致的结尾
Rocky将算法高价值面试知识点即“三年面试五年模拟”之独孤九剑秘籍前六式进行汇总梳理成汇总篇,并制作成pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“三年面试五年模拟” 进行取用。由于“三年面试五年模拟”之独孤九剑秘籍pdf版本是Rocky在工作之余进行整理总结,难免有疏漏与错误之处,欢迎大家对可优化的部分进行指正,Rocky将在后续的优化迭代版本中及时更正。
Rocky一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于算法,开发,竞赛,科研以及工作求职等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信Jarvis8866,拉你进群~)
参考资料
You Only Look Once:Unified, Real-Time Object Detection: https://arxiv.org/pdf/1506.02640.pdf
[2]YOLOv1-Darkent: https://github.com/pjreddie/darknet
[3]YOLO9000:Better, Faster, Stronger: https://arxiv.org/pdf/1612.08242v1.pdf
[4]YOLOv2-Darkent: https://github.com/pjreddie/darknet
[5]YOLOv3: An Incremental Improvement: https://arxiv.org/pdf/1804.02767.pdf
[6]YOLOv3-PyTorch: https://github.com/ultralytics/yolov3
[7]YOLOv4: Optimal Speed and Accuracy of Object Detection: https://arxiv.org/pdf/2004.10934.pdf
[8]YOLOv4-Darkent: https://github.com/AlexeyAB/darknet
[9]YOLOv5-PyTorch: https://github.com/ultralytics/yolov5
[10]YOLOX: Exceeding YOLO Series in 2021: https://arxiv.org/pdf/2107.08430.pdf
[11]YOLOx-PyTorch: https://github.com/Megvii-BaseDetection/YOLOX
[12]YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications: https://arxiv.org/pdf/2209.02976.pdf
[13]YOLOv6-PyTorch: https://github.com/meituan/YOLOv6
[14]YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors: https://arxiv.org/pdf/2207.02696.pdf
[15]Official YOLOv7-PyTorch: https://github.com/WongKinYiu/yolov7
[16]CSPNet: A New Backbone that can Enhance Learning Capability of CNN: https://arxiv.org/abs/1911.11929
[17]Mish: A Self Regularized Non-Monotonic Activation Function: https://arxiv.org/abs/1908.08681
作者介绍
