WeThinkIn

V1

2022/07/31阅读:164主题:橙心

【Make YOLO Great Again】YOLOv1-v7全系列大解析(Neck篇)

Rocky Ding

公众号:WeThinkIn

WeThinkIn公众号
WeThinkIn公众号

写在前面

【Make YOLO Great Again】栏目专注于从更实战,更深刻的角度解析YOLOv1-v7这个CV领域举足轻重的算法系列,并给出其在业务侧,竞赛侧以及研究侧的延伸思考。欢迎大家一起交流学习💪,分享宝贵的ideas与思考~

大家好,我是Rocky。

近年来YOLO系列层出不穷,更新不断,已经到v7版本。Rocky认为不能简单用版本高低来评判一个系列的效果好坏,YOLOv1-v7不同版本各有特色,在不同场景,不同上下游环境,不同资源支持的情况下,如何从容选择使用哪个版本,甚至使用哪个特定部分,都需要我们对YOLOv1-v7有一个全面的认识

故Rocky将YOLO系列每个版本都表示成下图中的五个部分,逐一进行解析,并将每个部分带入业务侧,竞赛侧,研究侧进行延伸思考,探索更多可能性。

本文将聚焦于Neck侧的分享,希望能让江湖中的英雄豪杰获益,也希望大家提出宝贵的建议与观点,让这个栏目更加繁荣。

So,enjoy(与本文的BGM一起食用更佳哦):

干货篇

----【目录先行】----

  1. YOLOv1-v7论文&&代码大放送

  2. YOLO系列中Neck结构的由来以及作用

  3. YOLOv1-v3 Neck侧解析

  4. YOLOv4 Neck侧解析

  5. YOLOv5 Neck侧解析

  6. YOLOx Neck侧解析

  7. YOLOv6 Neck侧解析

  8. YOLOv7 Neck侧解析

【一】YOLOv1-v7论文&&代码大放送

YOLOv1论文名以及论文地址:You Only Look Once: Unified, Real-Time Object Detection

YOLOv1开源代码:YOLOv1-Darkent

YOLOv2论文名以及论文地址:YOLO9000: Better, Faster, Stronger

YOLOv2开源代码:YOLOv2-Darkent

YOLOv3论文名以及论文地址:YOLOv3: An Incremental Improvement

YOLOv3开源代码:YOLOv3-PyTorch

YOLOv4论文名以及论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection

YOLOv4开源代码:YOLOv4-Darkent

YOLOv5论文名以及论文地址:无

YOLOv5开源代码:YOLOv5-PyTorch

YOLOx论文名以及论文地址:YOLOX: Exceeding YOLO Series in 2021

YOLOx开源代码:YOLOx-PyTorch

YOLOv6官方讲解:YOLOv6:又快又准的目标检测框架开源啦

YOLOv6开源代码:YOLOv6-PyTorch

YOLOv7论文名以及论文地址:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

YOLOv7开源代码:Official YOLOv7-PyTorch

【二】YOLO系列中Neck结构的由来以及作用

YOLO从v3版本开始设计Neck结构,其中的特征融合思想最初在FPN(feature pyramid networks)网络中提出,在YOLOv3中进行结构的微调,最终成为YOLO后续系列不可或缺的部分。

FPN的思路剑指小目标,原来很多目标检测算法都是只采用高层特征进行预测,高层的特征语义信息比较丰富,但是分辨率较低,目标位置比较粗略。假设在深层网络中,最后的高层特征图中一个像素可能对应着输出图像 的像素区域,那么小于 像素的小物体的特征大概率已经丢失。与此同时,低层的特征语义信息比较少,但是目标位置准确,这是对小目标检测有帮助的。FPN将高层特征与底层特征进行融合,从而同时利用低层特征的高分辨率和高层特征的丰富语义信息,并进行了多尺度特征的独立预测,对小物体的检测效果有明显的提升。

FPN结构
FPN结构

FPN论文地址:Feature Pyramid Networks for Object Detection

【Rocky的延伸思考】

  1. 业务侧:FPN具备业务模块沉淀价值,但还是要分场景来使用,主要在小目标场景可以尝试,但同时要兼顾上游数据侧与下游部署侧的适配。
  2. 竞赛侧:FPN的思想可谓是竞赛侧的一个利器,在分类,分割,检测等任务中都能大展拳脚,进行迁移应用。
  3. 研究侧:FPN具备作为baseline的价值,不管是进行拓展研究还是单纯学习思想,这个算法都是不错的选择。

【三】YOLOv1-v3 Neck侧解析

YOLOv1和YOLOv2都是不含Neck结构的,Rocky将在本系列的Backbone篇中对这两个模型进行详细介绍,本文中便不做过多赘述。

YOLOv3则是较好的引入了FPN的思想,以支持后面的Head侧采用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的目标物体。YOLOv3设置了三个不同的尺寸,分别是 , ,他们之间的比例为

YOLOv3采用全卷积的思路,在Neck侧也不例外(YOLOv1-v2中采用池化层做特征图的下采样, v3中采用卷积层来实现)。

【Rocky的延伸思考】

  1. 业务侧:YOLOv3 Neck侧经过时间的考验与沉淀,非常适合作为业务侧的入场baseline部分模块进行搭建。
  2. 竞赛侧:YOLOv3 Neck架构在竞赛侧有迁移应用的价值。
  3. 研究侧:YOLOv3 Neck架构具备作为baseline的价值,不管是进行拓展研究还是单纯学习思想。

【四】YOLOv4 Neck侧解析

YOLOv4的Neck侧主要包含了SPP模块和PAN模块

SPP模块在YOLOv3_SPP.cfg中率先展现,但是在YOLOv4中则成为了一个标配。SPP模块包含3个最大池化层,其滑动核(sliding kernel)尺寸分别是 ,并通过Padding操作,使每个最大池化层的输出特征图不变,用于Concat融合操作。

SPP模块代替了卷积层后的常规池化层,可以增加感受野,更能获取多尺度特征,训练速度也让人满意。Yolov4论文中使用 的图像在COCO目标检测任务进行实验,SPP模块能以0.5%的额外计算代价将AP50提升2.7%

SPP模块
SPP模块

SPP模块论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

PAN模块不同层次的特征进行疯狂融合,其在FPN模块的基础上增加了自底向上的特征金字塔结构,保留了更多的浅层位置特征,将整体特征提取能力进一步提升

在引入YOLOv4时,特征图最后的融合操作相比于原论文发生了变化,从add操作改为concat操作,增加了特征图的通道数:

PAN模块论文:Path Aggregation Network for Instance Segmentation

【Rocky的延伸思考】

  1. 业务侧:可以作为baseline模型的一个备选,实际效果还需通过实验来反馈。
  2. 竞赛侧:YOLOv4 Neck侧可以作为竞赛侧的提分策略。
  3. 研究侧:YOLOv4 Neck架构具备作为baseline的价值,不管是进行拓展研究还是单纯学习思想。

【五】YOLOv5 Neck侧解析

由于YOLOv5在YOLOv4发布之后没多久就开源了,且并没有论文的发表,创新性部分一直受到热议。

YOLOv5的Neck侧也使用了SPP模块和PAN模块,但是在PAN模块进行融合后,将YOLOv4中使用的常规CBL模块替换成借鉴CSPnet设计的CSP_v5结构,加强网络特征融合的能力

【Rocky的延伸思考】

  1. 业务侧:YOLOv5 Neck侧在工程中非常稳定,且其github库更新频率让人敬佩,可以作为业务baseline模型的首选。
  2. 竞赛侧:YOLOv5 Neck侧可以作为检测和分割竞赛入场的模块。

【六】YOLOx Neck侧解析

YOLOx的Neck侧依然使用了YOLOv3的结构,并且使用了SPP模块。

【七】YOLOv6 Neck侧解析

YOLOv6的Neck侧受到硬件感知神经网络设计思想的启发,基于RepVGG style设计了可重参数化、更高效的Rep-PAN

YOLOv6 Neck结构
YOLOv6 Neck结构

硬件感知神经网络设计的思想基于硬件的特性、推理框架/编译框架的特点,以硬件和编译友好的结构作为设计原则,在网络构建时,综合考虑硬件计算能力、内存带宽、编译优化特性、网络表征能力等,进而获得又快又好的网络结构。

Rep-PAN在PAN模块基础上,引入RepVGG style的RepBlock替换了YOLOv5中使用的CSP-Block,同时对整体Neck中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力。

RepVGG论文:RepVGG: Making VGG-style ConvNets Great Again

【Rocky的延伸思考】

  1. 业务侧:YOLOv6的Neck侧使用了端侧友好的设计策略,我也在实际中测试过,发现其效果会因任务类型与场景的改变而变化,是否使用还需要通过实验来反馈。
  2. 竞赛侧:相信YOLOv6的Neck侧在一些限定算力资源的竞赛中会大放异彩。

【八】YOLOv7 Neck侧解析

YOLOv7的Neck侧主要包含了SPPSCP模块和优化的PAN模块

SPPCSP模块在SPP模块基础上在最后增加concat操作,与SPP模块之前的特征图进行融合,更加丰富了特征信息。

PAN模块引入E-ELAN结构,使用expand、shuffle、merge cardinality等策略实现在不破坏原始梯度路径的情况下,提高网络的学习能力。

论文原文:(E-ELAN uses expand, shuffle, merge cardinality to achieve the ability to continuously enhance the learning ability of the network without destroying the original gradient path.)

E-ELAN模块
E-ELAN模块

【Rocky的延伸思考】

  1. 业务侧:YOLOv7 Neck侧作为YOLO系列最新的一版,其值得我们在业务侧进行实验验证其效果。
  2. 研究侧:YOLOv7 Ncek是刚发表的,具备很强的研究侧价值。

精致的结尾

Rocky将算法高价值面试知识点即“三年面试五年模拟”之独孤九剑秘籍前六式进行汇总梳理成汇总篇,并制作成pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“三年面试五年模拟” 进行取用。由于“三年面试五年模拟”之独孤九剑秘籍pdf版本是Rocky在工作之余进行整理总结,难免有疏漏与错误之处,欢迎大家对可优化的部分进行指正,Rocky将在后续的优化迭代版本中及时更正。

Rocky也一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于CV算法,算法,开发,IT技术等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请扫描二维码,我拉你进群~)

分类:

人工智能

标签:

人工智能

作者介绍

WeThinkIn
V1