【YOLOv4探讨 之一】 总体认识

YOLOv4探讨 之一 总体认识

  • 1.总体思想
  • 2.Bag-of-Freebies免费包
  • 3.Bag-of-Specials特价包
  • 4.方法论
    • 架构选择
    • BoF and BoS中方法选择
    • 进一步的模型修整

1.总体思想

YOLO模型本来就是奔着工业化去的,从v1到v3基本上都是在主体框架上不断的改进。v1是雏形,构建了YOLO的主体设计模型;v2引入标准化和FPN,提高了准确度;v3引入残差结构,大大增加了深度,提升了性能。而到了v4,就是将当前最流行的改善效果的方法来个了大乱炖,同时还保证你在比较“简陋”(一个1080 Ti or 2080 Ti GPU)的条件下能够又快又好向前发展。有了这个思路,我们就要看看YOLOv4这个“佛跳墙”里面增加了什么山珍海味。
论文《YOLOv4: Optimal Speed and Accuracy of Object Detection》摘要中将这些方法称为features,有的feature通用、有的feature专用,然后假设通用的有:加权残差连接(WRC, Weighted-Residual-Connections),跨阶段局部连接(CSP, Cross-Stage-Partial-connections), 交叉最小下批次归一化(CmBN, Cross mini-BatchNormalization), 自对抗训练(SAT, Self-adversarial-training)和Mish激活(Mish-activation);接着再兑上Mosaic数据分割DropBlock标准化,CIoU损失函数;最后再挑选一些组合组合,提升了性能。创新点在哪呢?使得YOLOv4可以在使用单个CPU的条件下训练出数据并快速探测目标,保证可速度和精度,扩大了模型的应用场景的范围。作者说YOLOv4主要目标就是设计一个工业用途的快速探测器,并对并行计算进行优化,所有的features都是围绕这个目标。
对于YOLOv4增加的features,光看这一堆名词都有些神经恍惚,加进来的都是啥么?其实也没那么复杂,原始创新就那么多,更多的是组合创新,就是把一些简单的features合并成更加复杂的features,然后使得新的features具备多种优势。由于这个合并的过程中需要解决一些连接组合的小问题,所以各路研究僧们都在施展法术,组合之后,命名一些新的名词,也算自己的成果嘛。
但是真的只是炖了一锅“佛跳墙”那么简单吗?非也,Alexey之所以是一个高级厨师,是因为他能够站在全局的高度进行顶层设计,论文中的目标识别的总体结构图很值得把玩,我已经兴奋的控制不住要展(dao)示(tu)了:

【YOLOv4探讨 之一】 总体认识_第1张图片
目前的目标探测模型主要分为一阶段(One-Stage Detector)和两阶段(Two-Stage Detector)的,然后都可以分为Input、Backbone、Neck、Prediction几部分,Prediction包括密集(Dense)和稀疏(Sparse)两种。一阶段探测器主要有YOLO和SSD,两阶段的探测器主要有R-CNN系列。
在以上模型框架下,作者将加入的features和优化分为两大类:Bag-of-Freebies和Bag-of-Specials,直译过来就是免费包和特价包,然后提供了一种有效的模型构建的Methodology,也就是“方法论”。很多人说YOLOv4只不过是加入了一些tricks,笔者不认同,这种系统思想理论的形成难道不才是最厉害的嘛?

2.Bag-of-Freebies免费包

免费包中装的什么呢?优化方法。
什么优化方法呢?就是提升精度时采用的一些优化方法,这些方法只改变训练策略或增加训练成本,但是不影响推理(inference)的代价,也就是不需要增加使用前向传播进行分类和回归预测的方法。天下没有免费的午餐,只能平时(训练)或战前(数据预处理)多流汗,战时(推理)才能少流血。
这个免费包中有三宝:数据增强(data augmentation)、语义分布(semantic distribution)优化处理和边框回归(Bounding Box (BBox) regression)。
先说说数据增强,数据增强就是对数据进行预处理,比如加点噪声、调节亮度、旋转、拉伸等像素级别(pixel-wise adjustments)的处理,局部裁剪、遮挡等区域级别(patch-wise)处理或者区域图片叠加等图像级别(image-wise)的处理。
语义分布优化处理,就是针对不同类型目标分布不平衡等,通过在标签文件中增加如难例(difficult)等方式优化标签标注或者其他方法进行预处理,主要用于二阶段探测模型。
数据就是图像,语义就是标签,决定了前面两种预处理方法。边框回归就是诸如使用anchor和优化IOU表示或loss函数的方法,提升图像坐标和尺寸等数据的预测精度。新的方法主要有使用BIoU、CIoU、GIoU等改善loss函数设计。

3.Bag-of-Specials特价包

特价包中的优化方法是怎么样的呢?适当少量的增加一些推理成本,从而大幅提升效果。这样的好事谁能办到呢?就是(部分的)特征增强,比如扩大感受野、引入注意力机制、增强特征集成能力以及一些后处理方法。
增强感受野的方法主要是基于金字塔匹配模型(SPM),因为卷积是要通过合并feature map中和卷积核相关的小区域的信息提取特征的,网络深度越深,feature map上一个特征点包含的细节就越少,就好像你近视了视野中看到远处细节变少,给你一只眼睛配上近视镜,把感受野的能力提升。新的方法都是各种SPM的变种,如SPP, ASPP, RFB等等。
注意力模型是啥呢?就是忽视一些不重要图像,关注一些重要图像。学过雷达信号处理的同学都知道,很多时候我们扫描的空间的背景是固定,比如万年不变的山川、千年不变的河流、百年不变的房子、十年不变的大树,我上来先把这些基础信息(背景图)扫描下来存储起来,后面我处理信号时候就不用考虑了。注意力模型听起来高大上,就是在处理动态信息的时候利用先验信息将图像数据进行简化,我们只关注变化的目标。
特征集成也是基于金字塔模型,只不过是更加复杂的加权拼接处理,利用不同尺度的feature map中的内容进行综合判断
后处理方法常用的是非极大值抑制(NMS,non-maximumsuppression),也很简单,根据分类的confidence进行排序,然后遍历GT,根据IOU求阈值进行筛选取舍,主要用于分辨出一些重复预测的目标,这个在前文《深度学习模型评估指标:mAP计方法与voc_eval.py源码解读》(https://blog.csdn.net/qq_41736617/article/details/106934313)中有源码分析,这个用在FP和TP估计中,YOLO中使用需要自己编写相关代码。

4.方法论

先说目标,就是建立又快又好的处理模型。针对NVIDIA提出的图像处理单元(GPU)和ATI提出的视频处理单元(VPU)采用不同的架构设计。GPU和VPU本质并无区别,但是由于数据处理方式不同,需要构建适配硬件的算法模型。最近MTI有大牛Nir Shavit教授说可以采用CPU上更加合适的适配方法(https://www.ithome.com/0/497/342.htm),那这个方法论就是一个绝逼完整的方法论了。
我们看看作者的方法论都说了啥?和把大象放进冰箱里一样,也是分三步:

  • 架构选择(Selection of architecture)

  • 免费包和特价包中方法选择(Selection of BoF and BoS)

  • 进一步的模型修整(Additional improvements)

通过以上三步,作者搞出了一个装着大象的冰箱——YOLOv4作为实例验证。

架构选择

就是选择使用什么backbone、neck、head等等,比如YOLOv4在Backbone上就针对不同的数据集对CSPResNext50或CSPDarknet53进行取舍,neck就考虑FPN,PAN,ASFF,BiFPN等特征集成的方法,head就是YOLO检测器。论文最的贡献就是对不同类型的Backbone,从输入网络的分辨率、感受野尺寸、参数数量、每层输出数据量、帧率等等给出实验结果。

BoF and BoS中方法选择

这个不解释直接,直接列出啦都有啥,以后慢慢说。

  • 激活函数:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
  • BBox回归损失:MSE,IoU,GIoU,CIoU,DIoU
  • 数据增强方法:CutOut,MixUp,CutMix
  • 正则化方法:DropOut, DropPath,Spatial DropOut 或DropBlock
  • 激活前的标准化:Batch Normalization (BN) 、Cross-GPU Batch Normalization (CGBN or SyncBN)、Filter Response Normalization (FRN)、Cross-Iteration Batch Normalization (CBN)
  • 跨层连接:Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)

进一步的模型修整

这里组要是使设计的目标检测模型更适合在单个GPU上进行训练,进行了以下进一步设计和改进:

  • 引入了新的数据增强方法:Mosaic和Self-Adversarial Training (SAT)
  • 在使用遗传算法时,选择最优的超参数
  • 修改了一些现有方法,提升训练和探测效果:改进的SAM、改进的PAN 和CmBN

Mosaic是四幅图整合增强,YOLOv3中没有用到,SAT就是在前向传播改变图片,构成目标欺骗,反向传播使用原始图片,有点类似雷达信号处理中的欺骗目标处理。CmBN就是交叉小批量标准化,类似于YOLOv3中的滚动平均值和方差,也是一种混合的方法,说实话,这种方法是试出来好使,如果试出来不好使也不会提出这种方法。改进的SAM就是处理先验信息的时候细化粒度,改进的PAN就是把捷联层的数据相加改成数据累积。

总之,一通操作猛如虎,佛跳墙大乱炖,炖出了速度、精度、硬件的低成本,作者还给出了一堆的实验结果,棒棒棒。这就是关于YOLOv4的总体认识,后面我们将针对其中的具体技术进行更加详细的原理探讨和源码分析。

你可能感兴趣的:(YOLOv4,深度学习,神经网络,机器学习)