目录
一、关于YOLOv4
1、什么是YOLOv4
YOLO v4(You Only Look Once version 4)是一种目标检测算法,它属于计算机视觉领域中的一项重要技术。目标检测的任务是在图像或视频帧中准确地识别出多个目标(如人、车、动物等)的位置和类别。
2、相较于YOLOv3
YOLO v4在YOLO v3的基础上进行了多项改进,包括使用更强大的主干网络(CSPDarknet53)、更先进的特征融合方法(SPP模块和PANet)、更优化的损失函数(CIOU Loss)以及更精细的数据增强技术(如Mosaic和CutMix)。
YOLO v4 tiny版本,一秒可处理120张照片,同时正确率也很好
二、YOLO v4数据增强的做法
1、 Bag of freebies
指的是那些不增加模型复杂度,也不增加推理的计算量,通过改进模型和数据的预处理,来提高模型的准确度。
2、关于数据增强
1)概念
只增加训练成本,但是能显著提高精度,并且不影响推理速度
2)种类
调整亮度、对比度、色调、缩放、裁剪、翻转、旋转
3、v4数据增强方法
1)马赛克数据增强
使用CutMix,然后将四张图片拼接成一张,再对其进行训练。
• 由来
ResNet-50 -> Mixup[48] -> Cutout[3] -> CutMix
在ResNet-50中,由一张图片一个类别来进行训练,标签类别设置狗为1,而Mixup[48]中将猫和狗两个类别的图片的权重融合在一块,设置猫和狗标签的类别为0.5,此时部分指标有上升也有下降,Cutout[3]则将图片类别的部分关键特征掩盖起来,以此来对其进行训练,同样有提升和降低,最后又使用了CutMix,将图片中的部分关键信息剪切更换为其他类别图片的关键信息,此时效果各项指标均有提升。
最后,将经过CutMix处理完的图片,每四张拼接成一张,使得一张图片中有至少四个类别以上的物体,然后再传入模型进行训练,得到的指标提升更多。如下图所示:
• 关于CutMix:
CutMix的基本思想是在两个训练样本之间随机切割出一个矩形区域,然后将其中一个样本的相应区域替换到另一个样本中被裁剪的区域中,形成新的训练样本。同时,根据被替换区域的大小,按比例分配两个样本的分类结果。
2)Random Erase
用随机值或训练集的平均像素替换图像区域
3)Hide and Seek
根据概率设置,随机隐藏一些补丁
4)SAT
self-adversarial-training,通过引入噪点来增加训练的难度
三、V4的改进
1、DropBlock
DropBlock是谷歌在2018年提出的一种用于卷积神经网络(CNN)的正则化方法。这是一种用于解决过拟合问题的技术,在训练神经网络时非常有用。过拟合问题是指在训练集上表现很好,但在测试集上表现不佳的问题。
相比于传统的Dropout(图b)技术,DropBlock(图c)不是随机屏蔽掉一部分特征(注意是对特征图进行屏蔽),而是随机屏蔽掉多个部分连续的区域。这种方法有助于减少神经网络中的冗余连接,从而提高模型的泛化能力。
2、标签平滑
原始的标签给予的太多绝对,是狗则为1,不是则为0,此时将其平滑处理,狗身上也有猫的特征,所以判断为狗,同时给予一部分猫的概率值
例如:原始标签为(0,1),对其进行处理 [0,1] x (1-0.1) + 0.1/2 = [0.05,0.95]
3、损失函数改进
1)IOU损失
计算方式:1-IOU
IOU为预选框和实际框之间交集比上并集的结果,其值为0-1,如果值越大则说明两个框拟合程度更大,表示模型预测的结果越好。
利用1-IOU表示损失的状态大小,但是实际框和预选框的IOU结果可能会一样,此时可能出现结果一样,但是预测的位置不好的情况,如下所示,所以需要对其进行后续的更改
2)损失函数改进1:GIOU
公式:
引入最小的封闭形状C,C可以把A和B包含在内,使得在不重叠情况下让预选框尽可能的朝着真实框前进,通过1-IOU再减去面积S/C的比值
3)改进方法2:DIOU
公式:
其中分子计算预测框和真实框的中心点的欧氏距离d,分母是能覆盖预测框与真实框的最小包围框的对角线长度c,解决GIOU的问题
4)最终改进方法3:CIOU
公式:
考虑三个几何因素:重叠面积IOU、中心点距离、长宽比av,其中a可以当做权重参数
4、非极大值抑制改进
1)传统NMS工作原理
根据分类得分(比如物体属于某一类别的概率)对所有的边界框进行排序,选取得分最高的边界框作为基准框。然后计算其余边界框与这个基准框的重叠度(通常用交并比,即 IoU - Intersection over Union 来衡量)。如果某个边界框与基准框的 IoU 大于设定的阈值(比如 0.5 或 0.7 等),就认为这个边界框是冗余的,将其删除。通过不断重复这个过程,最终得到一组经过筛选后的边界框。
然而,传统 NMS 存在一个问题:当两个真实目标靠得比较近时,由于它们的边界框重叠度可能较高,NMS 可能会错误地抑制掉其中一个目标对应的边界框,导致漏检。
2)改进1:DIOU-NMS
NMS非极大值抑制用于过滤掉冗余的检测框并保留最准确的框。在目标检测中,算法会输出多个检测框,但有些框可能是冗余的,这时候就需要进行后处理。
DIOU-NMS和原始的NMS不同,DIOU-NMS不仅考虑了IOU的值,还考虑了两个与预选框BOX中心点之间的距离,使用了新的公式决定一个BOX是否被删除:
其中,RDIoU是两个Box中心点之间的距离,用下面的公式表示,M表示置信度最高的候选框,Bi表示遍历各个框和高置信度的重合面积,
3)改进2:SOFT-NMS
传统的NMS存在一定的问题:如果一个物体在另一个物体重叠区域出现,即当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉,从而导致对该物体的检测失败并降低了算法的平均检测。
将当前检测框得分乘以一个权重函数,该函数会衰减与最高得分检测框M有重叠的相邻检测框的分数,越是与M框高度重叠的检测框,其得分衰减越严重,为此选择高斯函数为权重函数,从而修改其删除检测框的规则。(δ为高斯衰减函数的衰减速度参数,通常取0.3)。
工作原理:首先和传统 NMS 一样,根据分类得分对所有预测出的边界框进行排序,得到一个边界框列表B,并记录每个边界框对应的得分S,选取列表B中得分最高的边界框M作为当前的基准框。对于列表B中除M之外的每个边界框b,计算b与M的交并比IOU,根据计算出的IOU对边界框b的得分Sb进行衰减,常使用高斯衰减函数(如下图红框内所示),在对每个边界框b进行得分衰减后,用更新后的得分重新对边界框列表B进行排序(因为得分发生了变化),选取得分高于某个设定的最低得分阈值的边界框作为最终的检测结果输出。
5、网络结构改进
增加稍许推断代价,但是可以提高模型精度的方法
网络细节部分加入很多改进,引入各种能让特征提取更好的方法:注意力机制、网络细节设计、特征金字塔等
1)改进1:SPP-Net网络
SPP-Net是何凯明《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》中提出的一种网络结构,可以不用考虑图像大小,输出图像固定长度,并且在图像变形情况下表现稳定。这种方法在速度上比R-CNN快24-102倍,并且在不同的数据集上面得到验证。在ImageNet 2014的比赛中,SPP-Net在检测中排名第二,分类中排名第三。
SPP-Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层(对输入的特征图放大或缩小达到固定尺寸),保证传到下一层全连接层的输入固定。在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。
SPP-Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。
2)改进2:CSP-net网络
CSPNet是作者Chien-Yao Wang于2019年发表的论文《CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN》中提出的一种新的网络结构,它可以增强CNN的学习能力,并且在轻量化的同时保持准确性。
做法:
1、每一个block按照特征图的channel维度拆分为2部分。
2、一份正常执行残差网络,另一份直接concat(拼接)到block的输出
CSPNet主要是为了解决三个问题:
增强CNN的学习能力;降低内存成本;以及减少计算瓶颈。
它通过将梯度的变化从头到尾地集成到特征图中,从而减少了计算量的同时保证了准确率。在特征金字塔生成过程中采用跨通道池来压缩特征映射,可以减少内存使用。
同时,CSPNet方法可以减少模型计算量和提高运行速度,还能和多种网络结构结合在一起。
3)注意力机制
YOLOv4使用的是SAM,空间注意力机制
CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力CAM和空间注意力SAM,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。
YOLOv4中的SAM:
4)PAN 路径聚合网络
在原始的自顶向下的路径基础上,引入自底向上的路径,如图所示,使得底层信息更容易传到顶部
5)激活函数
<1> Mish激活函数
公式:
激活函数图像:
Mish激活函数在小于零的时候就一个小的值,防止w权重参数在最开始初始化的时候将其置0,使得特征提取出现问题
<2> 消除网格敏感性
eliminate grid sensitivity(消除网格敏感性),在YOLO系列的目标检测算法中,目标的中心坐标是通过网格(grid)来预测的。具体来说,输入图像被划分为若干个网格单元(grid cell),每个网格单元负责预测落在其内部的目标的中心坐标。然而,在原始的YOLOv3算法中,当目标的中心坐标非常接近网格单元的边界时,预测值需要达到极端值(如接近0或1)才能准确表示目标的中心位置。由于sigmoid激活函数的特性,其输出值很难精确地达到这些极端值,从而导致预测结果的不准确,这就是所谓的网格敏感性问题。
为了消除网格敏感性,YOLOv4引入了一个缩放系数(scale),对sigmoid函数的输出进行缩放和平移。具体来说,YOLOv4修改了目标中心坐标的计算公式,即在原始的输出结果上乘以一个系数