Skip to content
yubo105139 edited this page Dec 5, 2024 · 1 revision

YOLO V4

1609221275(1)

1. Yolov4的优化策略

YOLO-v4算法是在原有YOLO系列目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化

2. Yolov4的论文贡献点

1)提出一个高效而强大精确的检测器算法

2)验证了一系列state-of-the-art的目标检测器训练方法的影响

3)修改了state-of-the-art方法,使得他们在使用单个GPU进行训练时更加有效和适配

3. YOLOV4 具体优化

作者分为了两类:

一.BOF Bag of freebies:只改变训练策略或者只增加训练成本,比如数据增强。

二.BOS Bag of specials:插件模块和后处理方法,它们仅仅增加一点推理成本,但是可以极大地提升目标检测的精度。

1.不选择PRelu/SELU/RELU6激活函数

因为ReLU和SELU更难训练,并且ReLU6是专门为量化网络设计的,因此我们不采用上述激活

2.使用DropBlock正则化的方法

重新量化方法中,发布Drop-Block的作者将自己的方法与其他方法进行了详细的比较,而其正则化方法有很大的优势

3.不使用syncBN

由于于我们专注于仅使用一个GPU的训练策略,因此不考虑syncBN

4.Mosaic

Mosaic是一种新的混合4幅训练图像的数据增强方法。所以四个不同的上下文信息被混合,而CutMix只混合了2种。

这允许检测其正常上下文之外的对象。此外,批量归一化从每层上的4个不同的图像计算激活统计。这极大地减少了对large mini-batch-size的需求

5.Self-Adversarial Training(SAT)

自对抗训练(SAT)也代表了一种新的数据增强技术,它在两个前向后向阶段运行。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对其自身执行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗。在第二阶段,训练神经网络,以正常的方式在修改后的图像上检测目标。

6.CmBN

CBN的修改版本,定义为交叉小批量规范化(Cross mini-Batch Normalization,CMBN)。这仅在单个批次内的小批次之间收集统计信息。

7.改进SAM

将SAM从空间注意 修改为 点注意

8.改进PAN

将PAN的快捷连接分别替换为串联

9.选择CSPDarknet53主干

大量实验,表明CSPDarknet53神经网络是两者作为探测器骨干的最佳模型

10.选择SPP模块增加感受野

因为它显著增加了接受场,分离出最重要的上下文特征,并且几乎不会降低网络操作速度

11.使用PANet中的路径聚合模块

使用PANET代替YOLOv3中使用的FPN作为不同骨级的参数聚合方法,用于不同的检测器级别

12.使用Yolov3头部

YOLOv3(基于锚点的)头部

4. YOLOV4 trick

数据增强

数据增强的目的是增加输入图像的可变性,从而使设计的物体检测模型对从不同环境获得的图像具有更高的鲁棒性.

全像素调整

光度失真和几何失真是两种常用的数据增强方法,它们无疑有利于物体检测任务。在处理光度失真时,我们调整图像的亮度,对比度,色相,饱和度和噪点。对于几何失真,我们添加了随机缩放,裁剪,翻转和旋转。保留了调整区域中的所有原始像素信息。

模拟对象遮挡

random erase和CutOut可以随机选择图像中的矩形区域,并填充零的随机或互补值。

至于hide-and-seek和grid mask,随机或均匀地选择图像中的多个矩形区域,并将其替换为所有零。

如果类似的概念应用于要素地图,则有DropOut [71],DropConnect [80]和DropBlock [16]方法。

多个图像一起执行数据增强的方法。MixUp 使用两个图像对具有不同系数的图像进行乘法和叠加,然后使用这些叠加的系数来调整标签。对于CutMix ,它是将裁切后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。

GAN 还用于数据扩充,这种用法可以有效地减少CNN所学习的纹理偏差。

class label smoothing 使用的数据平衡的方法增强训练后模型的泛化性.

损失函数

传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即{xcenter,ycenter,w,h},或者对左上角和右下点,即{xtopleft,ytopleft,xbottomright,ybottomright}进行回归。对于基于锚点的方法,是估计相应的偏移量,例如{xcenterOffset,ycenterOffset,wOffset,hoffset}和{xtopleftoffset,ytopleftoffset,xbottomright toffset,ybottomright toffset},例如{xtopleftoffset,ytopleftoffset}和{xtopleftoffset,ytopleftoffset}。然而,直接估计BBox中每个点的坐标值是将这些点作为独立变量来处理,而实际上并没有考虑对象本身的完整性.

提出了IoU loss,将预测BBOX区域的覆盖率和地面真实BBOX区域的覆盖率考虑在内。IOU loss计算过程将触发BBOX的四个坐标点的计算,方法是执行具有地面实况的借条,然后将生成的结果连接到一个完整的代码中。由于IOU是一种标度不变的表示,它可以解决传统方法计算{x,y,w,h}的l1或l2个损失时,损失会随着尺度的增大而增大的问题。

改进GIOU损失除了包括覆盖区域外,还包括对象的形状和方向。他们提出找出能同时覆盖预测BBOX和实际BBOX的最小面积BBOX,并用这个BBOX作为分母来代替原来在IoU loss中使用的分母。

对于DIoU loss,它另外考虑了物体中心的距离.

而CIoU loss则同时考虑了重叠面积、中心点之间的距离和纵横比。在求解BBox回归问题时,Ciou可以达到较好的收敛速度和精度。

激活函数

在深度学习的研究中,有些人专注于寻找良好的激活功能。良好的激活函数可以使梯度更有效地传播,同时不会引起过多的计算成本。

提出了ReLU,以基本上解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。

随后,LReLU ,PReLU ,ReLU6 ,比例指数线性单位(SELU),Swish ,hard-Swish 和Mish 等,它们也是已经提出了用于解决梯度消失问题的方法。

LReLU和PReLU的主要目的是解决当输出小于零时ReLU的梯度为零的问题。

至于ReLU6和hard-Swish,它们是专门为量化网络设计的。为了对神经网络进行自归一化,提出了SELU激活函数来满足这一目标。要注意的一件事是,Swish和Mishare都具有连续可区分的激活功能。

NMS

在基于深度学习的对象检测中通常使用的后处理方法是NMS,它可以用于过滤那些无法预测相同对象的BBox,并仅保留具有较高响应速度的候选BBox。 NMS尝试改进的方法与优化目标函数的方法一致。

物体的遮挡可能会导致带有IoU评分的置信度得分下降。 DIoU NMS开发人员的思维方式是在softNMS的基础上将中心距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像功能,因此在随后的无锚方法开发中不再需要后处理。

Clone this wiki locally