深度学习之YOLO系列YOLOv4
目录
简介
一、YOLOv4
二、YOLO v4数据增强
1、Bag of freebies(BOF)
2、马赛克数据增强
3、图像模糊
3、DropBlock
4、标签平滑
5、损失函数的改进
1、GIOU 损失
2、DIOU 损失
3、CIOU 损失
6、非极大值抑制的改进
7、网络结构的改进
1、spp-net网络
2、CSP-net网络
3、注意力机制
4、PAN
8、激活函数
9、网格
10、整体网络架构
简介
上两篇博客我们介绍了YOLOv1到v3,还说了目标检测算法与解释了YOLO评价指标的一些专业。今天我们来继续探索YOLOv4的模型
深度学习之YOLO系列YOLOv3
深度学习之YOLO系列YOLOv2
深度学习之YOLO系列YOLOv1
深度学习之YOLO系列了解基本知识
一、YOLOv4
YOLO v4(You Only Look Once version 4)是一种目标检测算法,它属于计算机视觉领域中的一项重要技术。目标检测的任务是在图像或视频帧中准确地识别出多个目标(如人、车、动物等)的位置和类别。
YOLO v4在YOLO v3的基础上进行了多项改进,包括使用更强大的主干网络(CSPDarknet53)、更先进的特征融合方法(SPP模块和PANet)、更优化的损失函数(CIOU Loss)以及更精细的数据增强技术(如Mosaic和CutMix)。
1、更换了作者,但整体思考没有变
2、吸收了目前主流的框架优点
YOLO v4 tiny版本,一秒可处理120张照片,同时正确率也很好
二、YOLO v4数据增强
1、Bag of freebies(BOF)
- 只增加训练成本,但是能显著提高精度,并不影响推理速度
- 数据增强:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转
- 网络正则化的方法:Dropout、Dropblock 等
- 类别不平衡,损失函数设计
2、马赛克数据增强
使用CutMix,然后将四张图片拼接成一张,再对其进行训练。
在ResNet-50中,由一张图片一个类别来进行训练,标签类别设置狗为1,而Mixup[48]中将猫和狗两个类别的图片的权重融合在一块,设置猫和狗标签的类别为0.5,此时部分指标有上升也有下降,Cutout[3]则将图片类别的部分关键特征掩盖起来,以此来对其进行训练,同样有提升和降低,最后又使用了CutMix,将图片中的部分关键信息剪切更换为其他类别图片的关键信息,此时效果各项指标均有提升。
最后,将经过CutMix处理完的图片,每四张拼接成一张,使得一张图片中有至少四个类别以上的物体,然后再传入模型进行训练,得到的指标提升更多。
3、图像模糊
- Random Erase:用随机值或训练集的平均像素值替换图像的区域
- Hide and Seek:根据概率设置随机隐藏一些补丁
Self-adversarial-training(SAT)
- 通过引入噪音点来增加游戏难度
3、DropBlock
DropBlock是谷歌在2018年提出的一种用于卷积神经网络(CNN)的正则化方法。这是一种用于解决过拟合问题的技术,在训练神经网络时非常有用。过拟合问题是指在训练集上表现很好,但在测试集上表现不佳的问题。 相比于传统的Dropout技术,DropBlock不是随机屏蔽掉一部分特征(注意是对特征图进行屏蔽),而是随机屏蔽掉多个部分连续的区域。这种方法有助于减少神经网络中的冗余连接,从而提高模型的泛化能力。
4、标签平滑
- 神经网络最大的缺点:自觉不错(过拟合),让它别太自信
- 例如原来标签为(0,1):
5、损失函数的改进
IOU 损失
- IOU 损失:(也经常 1-IOU)
- 有哪些问题呢?
- 没有相交则 IOU=0 无法梯度计算,相同的 IOU 却反映不出实际情况到底咋样
而对于下面三个它们的IOU值相同,第一个的效果确实最好的
1、GIOU 损失
- 公式:
- 引入了最小封闭形状 C(C 可以把 A,B 包含在内)
- 在不重叠情况下能让预测框尽可能朝着真实框前进
- 但存在局限性:如下方示例,不同位置关系的框可能出现
且
,无法区分实际差异
2、DIOU 损失
- 公式:
- 其中分子计算预测框与真实框的中心点欧式距离d
- 分母是能覆盖预测框与真实框的最小 BOX 的对角线长度c
- 直接优化距离,速度更快,并解决 GIOU 问题
3、CIOU 损失
- 公式:
- 其中:
- 损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比
- 其中
可以当做权重参数
6、非极大值抑制的改进
NMS用于过滤掉冗余的检测框并保留最准确的框。在目标检测中,算法会输出多个检测框,但有些框可能是冗余的,这时候就需要进行后处理。
DIOU-NMS和原始的NMS不同,DIoU-NMS不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离,使用了新的公式决定一个Box是否被删除:
其中,RDIoU是两个Box中心点之间的距离,用下面的公式表示:
其中M是表示置信度最高的候选框,Bi表示遍历各个框和高置信度的重合面积。
SOFT-NMS
传统的NMS存在一定的问题:如果一个物体在另一个物体重叠区域出现,即当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉,从而导致对该物体的检测失败并降低了算法的平均检测
将当前检测框得分乘以一个权重函数,该函数会衰减与最高得分检测框M有重叠的相邻检测框的分数,越是与M框高度重叠的检测框,其得分衰减越严重,为此选择高斯函数为权重函数,从而修改其删除检测框的规则。(δ通常取0.3)。
工作原理:首先和传统 NMS 一样,根据分类得分对所有预测出的边界框进行排序,得到一个边界框列表B,并记录每个边界框对应的得分S,选取列表B中得分最高的边界框M作为当前的基准框。对于列表B中除M之外的每个边界框b,计算b与M的交并比IOU,根据计算出的IOU对边界框b的得分Sb进行衰减,常使用高斯衰减函数(如下图红框内所示),在对每个边界框b进行得分衰减后,用更新后的得分重新对边界框列表B进行排序(因为得分发生了变化),选取得分高于某个设定的最低得分阈值的边界框作为最终的检测结果输出。
7、网络结构的改进
- Bag of specials(BOS)
- 增加稍许推断代价,但可以提高模型精度的方法
- 网络细节部分加入了很多改进,引入了各种能让特征提取更好的方法
- 注意力机制,网络细节设计,特征金字塔等,你能想到的全有
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、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、注意力机制
CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力和空间注意力,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。
YOLOv4中的SAM:
4、PAN
- 故事得先从 FPN 说起
- 自顶向下的模式,将高层特征传下来
- 好像只有一条路子,能不能来个双向的呢?
- 这就得轮到 PAN 登场了,思想也很简单
- 图示说明:下图为 PAN 的结构示意图,包含 bottom-up(基于 ResNet 的 conv1 到 conv5 特征提取)和 top-down(M2 到 M5 的特征融合及 P2 到 P5 的输出)两个路径,实现双向特征聚合
FPN(Feature Pyramid Networks)是一种用于目标检测和语义分割的深度学习模型,它能够有效地处理不同尺度的目标。 FPN使用图像金字塔的思想,通过对原始图像进行多尺度处理,构造出一个类似真实金字塔的特征金字塔。在特征金字塔的每一层,FPN都会提取出不同的特征,并进行相应的预测。这样,对于不同尺度的目标,FPN可以在不同的特征层上进行预测,从而获得更好的检测效果。 FPN的主要优点是它能够在不增加计算量和内存开销的情况下提高目标检测的精度。此外,FPN还可以通过横向连接和自上而下(top-down)的模型来进一步增强特征信息,提高目标检测的性能。
- 引入了自底向上的路径,使得底层信息更容易传到顶部
- 并且还是一个捷径,红色的没准走个 100 层 (Resnet),绿色的几层就到了
8、激活函数
Mish
- 别一棒子全给打死,给个改过自新的机会
- Relu 有点太绝对了,Mish 更符合实际
- 公式:
- 但是计算量确实增加了,效果会提升一点
9、网格
- eliminate grid sensitivity
- 比较好理解,坐标回归预测值都在 0-1 之间,如果在 grid 边界怎么表示?
- 此时就需要非常大的数值才可以达到边界
- 为了缓解这种情况可以在激活函数前加上一个系数(大于 1 的):
10、整体网络架构
残差块(Residual Block)的主体部分。在一个残差块中,输入首先通过一个卷积层进行变换,然后将结果加到原始输入上。这种结构允许网络学习残差函数,即输入和输出之间的差异,而不是直接学习输出。这可以使网络更好地关注输入和输出之间的微小差异,提高了特征提取的能力。