yolov4方法详细介绍---看这一篇就够了!

在这里插入图片描述

最开始入坑深度学习的时候是从yolov5版本开始,虽然会使用,但是不能理解作者为什么要使用这些方法,对底层源码和结构并不了解,所以又从头开始把v1-v4每个版本的论文和源码都详细阅读一遍,最后总结一下v4的方法吧,这个版本几乎把当年所有优秀顶会的论文方法都容纳进来了,像SAM注意力机制和sppnet等方法,非常建议大家把这篇论文认真阅读一下,后期会总结v7,v8的源码和论文讲解,v6建议大家直接跳过,和v5内容很相似,看v5就足够了;

在这里插入图片描述
【yolov1:背景介绍与算法精讲】
【yolo9000:Better, Faster, Stronger的目标检测网络】
【YOLOv3:算法与论文详细解读】

1、整体概述

在这里插入图片描述

  • 虽然作者换了,但是运用到前3个版本的精髓
  • 细节上的改进,并没有大的改动
  • 将别人好的内容都添加进来

2、贡献解读

  • 比较亲民,不需要很高的设备,单GPU就能训练很好
  • 两大核心方法,从数据层面和网络设计层面
  • 消融实验,融合2020年所有好的方法
  • 全部实验单GPU就能完成

3、数据增强策略

1、Bag of freebies(BOF)

  1. 只增加训练成本,但是能显著提高精度,并不影响推理速度
  2. 数据增强:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转
  3. 网络正则化的方法: Dropout、Dropblock等
  4. 类别不平衡,损失函数设计

数据增强

(1)mosaic data augmentation

方法很简单,参考CutMix论文方法,然后将四张图像拼接成一张进行训练,也就是分别对4张图片作旋转、色调等数据增强操作,最后拼接到一张图片,间接的增加了batch_size。
在这里插入图片描述

mixup是将两张图片透明50%叠加
cuout将图片去掉某一块内容

(2)random Erase

🐏用随机值或训练集的平均像素值替换图像的区域:随机遮盖

在这里插入图片描述

(3)Hide and Seek

根据概率设置随机隐藏一些区域

在这里插入图片描述

(4)Self-adversarial-training(SAT)

输入图片的时候通过引入噪音点来增加识别难度

在这里插入图片描述

4、DropBlock与标签平滑

(1)DropBlock

之前的dropout是随机选择点进行消除,如图(b),现在吃掉某一个区域如图(c)

在这里插入图片描述

(2)Label Smoothing

神经网络最大的缺点就是容易过拟合,所以将原来很绝对的图片标签,进行平滑偏移
例如原来猫狗标签为 (0,1)太过于绝对 使用一些方法进行标签平滑,例如: [0,1]x(1-0.1)+0.1/2 = [0.05,0.95]

在这里插入图片描述

使用之前,会发现数据非常接近,过拟合比较严重,分界线不明显;使用之后效果分析(右图):簇间更分离簇内更紧密

在这里插入图片描述

5、损失函数问题

(1)IOU损失

定义:1-IOU 表示真实框与预测框之间的差异

(2)产生的问题

1、预测框与真实框之间不相交的时候,IOU=0,无法进行梯度计算
2、相同的IOU反映不出实际预测框与真实框之间的情况,如下:

在这里插入图片描述

(3)解决办法

引入GIOU

公式:当两个框距离越远,|C-两框并集|值越大

在这里插入图片描述

引入了最小封闭形状C (可以把A,B包含在内)

在这里插入图片描述

GIOU解决了不重叠情况下,也就是IOU=0的情况,也能让训练继续进行下去;
但是重叠的情况依旧无法判断,如下:

在这里插入图片描述

引入DIOU

公式

在这里插入图片描述

  • 其中分子计算预测框与真实框的中心点欧式距离d
  • 分母是能覆盖预测框与真实框的最小BOX的对角线长度C
  • 当两个框重叠的时候,欧式距离为0

在这里插入图片描述

计算结果:
在这里插入图片描述

6、CIOU函数

YOLOv4使用的是CIOU损失,损失函数必须考虑三个几何因素: 重叠面积,中心点距离,长宽比
和前面两种损失函数相比,多了一个长宽比因素

公式:

在这里插入图片描述

7、NMS细节改进

(1)DIOU-NMS

和BOF不同的是:NMS需要对预测框进行判断,所以肯定会影响我们的推理速度
之前使用NMS来决定是否删除一个框,现在改用DIOU-NMS
不仅考虑了loU的值还考虑了两个Box中心点之间的距离
其中M表示高置信度候选框,Bi就是遍历各个框跟置信度高的重合情况

公式:也就是在原有的NMS上添加一个DIOU
在这里插入图片描述

(2)soft-NMS

和DIOU-NMS相比,是没那么严格的NMS,即使没有达到阈值也会进行第二次判断,例如下面这个图片,上边框都在同一高度,如果使用DIOU-NMS,可能会把绿色的框删除掉,但是soft-nms会判断它属于另外一匹马,保留该框

在这里插入图片描述

8、SPP与CSP网络结构

BOS(Bag of specials)

  1. 增加稍许推断代价,但可以提高模型精度的方法
  2. 网终细节部分加入了很多改进,引入了各种能让特征提取更好的方法
  3. 注意力机制,网络细节设计,特征金字塔等

SPPNet(Spatial Pyramid Pooling)

V3中为了更好满足不同输入大小,训练的时候要改变输入数据的大小
SPP作用:1、增加感受野;2、最大池化来满足最终输入特征一致即可,将特征图pooling成相同大小,最后将相同大小特征图堆叠到一起;
如下图:图片输入之后将不同大小特征图maxpooling成相同size大小,最后将特征图连接在一起。

在这里插入图片描述

CSPNet(Cross Stage Partial Network)

🏵️每一个输入特征图,按照特征图的channel维度拆分成两部分,一份正常走网络,另一份直接concat到这个特征的输出,这样可以节省更多的时间,而且精度并没有下降;

在这里插入图片描述

9、SAM注意力机制模块

在这里插入图片描述

CBAM定义:卷积带了一个注意力机制,既有channel,也有位置的
注意力机制:在图像处理中,注意力机制可以帮助模型在处理图像时,选择关注图像中的重要部分。例如,通过引入空间注意力机制,模型可以根据图像的内容自动确定关注的区域,而不是简单地对整个图像进行处理。这种机制可以提高图像处理任务的精度和效率。
例如:一个32x32x256特征图,通过channel attention module划分为200,50,6三个不同的类,每块权重值都不一样,将权重值乘在特征图当中,重要部分特征图的权重值会大;同理:将空间位置也添加注意力机制,不同的位置,它的重要程度不一样;

SAM:不再有channel的注意力机制,而是只有空间注意力机制,这样会更加容易计算

YOLOV4注意力机制改进

(a)是原始的SAM,需要经过最大池化和平均池化,再经过卷积和sigmoid分配权重,最后加权相乘
(b)改进后只需要经过一层卷积和sigmoid

在这里插入图片描述

10、PAN模块解读

先了解FPN

思想:自顶向下的模型,将高层的特征传下来,与中层和底层进行特征融合,p5、p4、p3、p2是融合后的特征
问题:(1)如何自下向上将底层特征与高层特征融合?(2)网络可能有很多层,从底层走到高,再从高走到底,按照原路径走非常影响效率,这个路径该如何走?

在这里插入图片描述

PAN(Path Aggregation Network)

解决思路:

(1)引入了自底向上的路径,使得底层信息更容易传到顶部
(2)再引入一条线路,也就是如图p2—>N2这条线路,并且还是一个捷径,红色的没准走个100层(Resnet),绿色的线路只用走几层就到了

在这里插入图片描述

V4中PAN特征融合方法

传统的PAN特征融合使用的是addition加法运算,v4中使用的是拼接操作,将部分特征拼接成一块

在这里插入图片描述

11、激活函数与整体架构

Mish激活函数

Relu函数在x负半轴特征设置为0,太过于绝对,Mish更加符合实际情况,但是会增加计算量,效果会有一定的提升。

公式:
在这里插入图片描述
在这里插入图片描述

消除网格敏感性eliminate grid sensitivity

这个比较好理解,坐标回归预测值都在0-1之间(网格的相对位置),如果在grid边界怎么表示?
从图像可以看出sigmoid函数很难达到1和0,需要非常大的数值才可以达到边界。

在这里插入图片描述

为了缓解这种情况可以在激活函数前加上一个系数(大于1的),让坐标更容易达到1,方法如下:

在这里插入图片描述

整体架构

在这里插入图片描述

它采用了一种基于卷积神经网络的端到端的架构。整体架构可以分为三个主要组件:主干网络特征金字塔网络预测头

1、主干网络:YOLOv4使用了一个强大的主干网络作为特征提取器。主干网络通常使用预训练的卷积神经网络,如Darknet-53等,来提取输入图像的特征。这些特征将被传递到接下来的组件中进行进一步处理。
2、特征金字塔网络:特征金字塔网络用于处理来自主干网络的特征,并提取多尺度的特征。这样可以在不同尺度上检测目标,从而提高检测的准确性。YOLOv4使用了一个特殊的特征金字塔网络,称为SPP(Spatial Pyramid Pooling),它可以在不同尺度上提取特征,并将它们融合在一起。
3、预测头:预测头是YOLOv4的最后一部分,用于预测目标的位置和类别。它根据特征金字塔网络输出的特征图进行预测。YOLOv4使用了一种称为YOLOv3的预测头结构,该结构包括多个不同尺度上的预测层。每个预测层预测一组边界框的位置和类别,并使用锚框来调整预测结果。

总的来说,YOLOv4的整体架构通过主干网络提取特征,特征金字塔网络提取多尺度的特征,并使用预测头进行目标的位置和类别预测。这种端到端的设计使得YOLOv4在目标检测任务中具有较高的准确性和实时性能。


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
需要学习Windows系统YOLOv4的同学请前往《Windows版YOLOv4目标检测实战:原理与源码解析》,课程链接 https://edu.csdn.net/course/detail/29865【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来!  代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《YOLOv4目标检测实战:训练自己的数据集》《YOLOv4-tiny目标检测实战:训练自己的数据集》《YOLOv4目标检测实战:人脸口罩佩戴检测》《YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕溪同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值