yolov4学习笔记

一、概述

论文首先将当时一些前沿的技术一一挪列出来,作者将不同领域发表的最新论文的技术,集成到自己的算法中加以创新并做了许多消融实验,详细的描述了实验的过程,3.4之后才是描述yolov4的内容。

【原文】

Our contributions are summarized as follows:

1. We develope an efficient and powerful object detection model. It makes everyone can use a 1080 Ti or 2080 Ti GPU to train a super fast and accurate object detector.

2. We verify the influence of state-of-the-art Bag-ofFreebies and Bag-of-Specials methods of object detection during the detector training.

3. We modify state-of-the-art methods and make them more effecient and suitable for single GPU training, including CBN [89], PAN [49], SAM [85], etc.

我们的贡献总结如下:

  1. 我们开发了一个高效且功能强大的目标检测模型。它使每个人都可以使用 1080 Ti 或 2080 Ti 的 GPU 来训练一个超级快速和准确的目标检测器。

  2. 我们验证了最先进的 Bag-of-Freebies 和 Bag-of-Specials 对象检测方法在检测器训练期间的影响。

  3. 我们修改了最先进的方法,使其更有效并适用于单GPU训练,包括CBN [89]、PAN [49]、SAM [85]等。

二、创新点

1.输入端

1.1.Mosaic数据增强

Mosaic数据增强是通过随机裁剪、随机缩放、随机排布将四张图片拼接在一起,可以增加输入图像中的多样性,从而帮助模型更好地泛化和适应各种场景。Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接。

yolov4为什么要进行Mosaic数据增强?
解决小目标在样本中分布不均匀的问题,增加图像的多样性。

这样做的好处:
1.让数据集更加丰富,图像传达的信息更具多样性。
2.减少GPU使用,(概述中提及作者说明的yolov4的主要贡献)因为将4张图片拼接在一起,可以减小batch size,一个GPU也可以有很好的效果。

1.2.cmBN

【翻译】

  1. BN(Batch Normalization):假设一个batch包含四个mini-batches。在每个时间步(t-3、t-2、t-1和t),分别累积权重W(t-3)、计算BN(t-3)、标准化BN,然后更新W和ScaleShift。BN在每个mini-batch内部进行归一化,它的目的是通过规范化激活值来加速神经网络的训练过程。
  2. CBN(Cross Batch Normalization):假设跨过四个迭代。在每个时间步(t-3、t-2、t-1和t),分别累积权重W(t-3~t-6)、累积BN(t-3~t-6)、更新ScaleShift,然后更新W和ScaleShift。CBN考虑了多个batch之间的信息,通过累积多个batch的信息来改善BN的效果。
  3. CmBN(Cumulative mini-Batch Normalization):假设一个batch包含四个mini-batches。在每个时间步(t-3、t-2、t-1和t),分别累积权重W(t-3~t)、累积BN(t-3~t)、标准化BN,然后更新W和ScaleShift。CmBN结合了BN和CBN的特点,它在每个batch内部进行归一化,同时也累积了多个batch的信息。
 1.3.SAT自对抗训练

SAT是一种数据增强技术,旨在通过神经网络自身进行的对抗式攻击来提高模型的鲁棒性和泛化能力。通过引入一些对抗性的扰动来增加模型的鲁棒性和泛化能力。例如,通过对输入图像添加噪声或变换来模拟真实世界中的不确定性,从而使模型学会忽略这些干扰因素,专注于真正重要的特征。

2.Backbone

2.1.CSPDarknet53

在yolov4网络架构图中可以看到,yolov4Backbone在v2的Darknet53基础上,借鉴了CSPNet。

2.2.Mish函数

作者在Backbone中使用了Mish函数,而其他地方还是使用Leaky函数,这是作者通过消融实验对比出来的结果。

2.3.Dropblock

Dropblock是基于Dropout改进的,Dropout是在训练过程中随机“丢弃”一部分神经元的输出,减少神经元之间的依赖性。而Dropblock认为即使随机丢弃一些神经元,卷积层仍然可以从相邻的神经元学习到相似的特征,所以干脆将这一区域的神经元一起丢弃。

3.Neck

3.1.SPP

yolov4中SPP结构

3.2.PAN

在 YOLOv4 中,PAN 结构采用了类似于 FPN 的思想,但是增加了自底向上的路径(FPN 是自顶向下地融合高层特征和低层特征来生成多尺度特征图),形成了双向特征融合的网络结构。这种结构使得模型不仅能够自顶向下地强调语义特征,还能够自底向上地强调定位特征,增强了特征的传播效率和信息流。

PAN是作者借鉴分割领域的PANet中的PAN,但也有不同,前者为add,后者为concat通道数增加。上文网络结构中里面包括两个PAN结构。

4.Head

4.1.CIOU_Loss

CIoU Loss(Complete Intersection over Union Loss)是一种用于目标检测任务中的边界框回归损失函数。它是在IoU(Intersection over Union)基础上发展而来的一种更加全面的距离度量,旨在解决IoU损失的一些不足之处,比如它不能很好地反映边界框中心点的位置偏差以及长宽比的差异。

IoU Loss

IoU Loss 是一种衡量预测边界框和真实边界框之间重叠程度的指标。IoU 的定义是两个边界框交集面积与并集面积的比率。IoU Loss 通常定义为 1 - IoU 的值,即: 

GIoU Loss

GIoU Loss(Generalized Intersection over Union Loss)是在 IoU Loss 基础上改进的版本,它通过引入一个包含预测框和真实框最小闭包区域的概念,来解决 IoU Loss 在边界框不重叠时无法提供梯度的问题。GIoU Loss 定义为:

​ 其中,Convex Hull 是指包含两个框的最小闭包区域。

DIoU Loss

DIoU Loss(Distance-IoU Loss)进一步改进了 GIou Loss,除了考虑边界框的面积重叠外,还加入了中心点之间的距离因素,这样可以更好地反映边界框的相对位置。DIoU Loss 定义为: 

CIoU Loss

CIoU Loss 进一步扩展了 DIoU Loss,除了考虑中心点之间的距离外,还加入了对边界框长宽比的惩罚项,这有助于减小长宽比的偏差。CIoU Loss 的公式如下: 

其中:

  • 𝜌(𝑐,𝑐′)ρ(c,c′) 表示预测框和真实框中心点的角度差异。
  • 𝛼α 是一个平衡因子,用来平衡中心点距离损失和长宽比损失。

CIoU Loss 的优势

  • 更好的泛化能力:CIoU Loss 不仅关注边界框的面积重叠,还考虑了中心点位置偏差和长宽比偏差,因此可以更好地指导边界框回归的优化。
  • 更快的收敛速度:由于包含了更多关于边界框几何形状的信息,CIoU Loss 可以帮助模型更快地收敛。
  • 更稳定的训练过程:对于小目标检测,CIoU Loss 能够更稳定地指导边界框回归,尤其是在小目标的长宽比变化较大的情况下。
4.2.DIOU_nms

DIoU NMS (Distance-IoU Non-Maximum Suppression) 是一种用于目标检测后处理阶段的非极大值抑制 (Non-Maximum Suppression, NMS) 方法。传统的 NMS 方法通常使用 IoU (Intersection over Union) 来衡量预测边界框之间的重叠程度,并根据得分排序后去除重叠的边界框。DIoU NMS 在传统 NMS 的基础上进行了改进,通过考虑边界框中心点之间的距离来更精确地筛选出最优的边界框。


参考

深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解

YOLOv4网络详解

需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:原理与源码解析》 【为什么要学习这门课】 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的源码程序文件。【相关课程】 除本课程《Windows版YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《Windows版YOLOv4目标检测实战:训练自己的数据集》《Windows版YOLOv4-Tiny目标检测实战:训练自己的数据集》《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》《Windows版YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mikko_6214

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

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

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

打赏作者

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

抵扣说明:

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

余额充值