YOLOv4论文解读

论文原文:

https://arxiv.org/pdf/2004.10934.pdf

代码实现:

https://github.com/AlexeyAB/darknet

一、介绍

原文名称:《YOLOv4: Optimal Speed and Accuracy of Object Detection》,可以看出这是一个非常自信的题目,声称YOLOv4在目标检测具有最优的速度和准确率。相比于Joe Redmon的最终作品YOLOv3,Alexey Bochkovskiy为一作的YOLOv4确实取得了非常明显的速度和准确率的提升。笔者认为YOLOv4的提升更多的还是一些工程上的奇技淫巧,将最近几年内提出的用于其他模型的方法结合YOLO进行融汇贯通。从数据增强,模型结构和训练方法等都进行了大量的改进,通过本文也可以了解到最近一些年提出的工程上的最佳实践。
YOLOv4在MS COCO数据集上对比其他模型
上图横轴为效率,纵轴为准确率。效率和准确率都高则会在图中右上部分。在低帧率上,例如EfficientDet能够达到更高的准确率,但是就低于30FPS而言(图中非蓝色部分),达不到实时流畅的程度。所以说YOLOv4在效率和准确率上具有最佳性价比更加贴切。

二、YOLOv4改进

YOLOv4的改进内容十分丰富,但原作者在Introduction部分自述贡献主要包括以下三点:

  1. 提出了一个高效高性能的目标检测模型,确保任何人都可以使用单张传统的GPU便可以训练YOLOv4,例如1080Ti或2080Ti(相比于TITAN V 或者Tesla V100等高端显卡或多张显卡而言)。
  2. 结合最新的BoF(Bag-of-Freebies)和BoS(Bag-of-Specials)方法YOLOv4进行改进。(BoF,一袋免费的商品,比喻的是一些训练方法技巧,加入这些训练方法和技巧,并不会增加模型推理时候的开销,即在模型部署使用时并不会推理更慢或者占用更高的机器性能,但是可能会在训练时多费一些时间和功夫,加入这些方法和技巧肯定能使模型训练的更好,因此比作一袋免费的商品,只会带给模型好处,不要白不要的道理!BoS,一袋特价的商品,和BoF的差别在于,可能会在部署使用时有少量额外的开销,但是能大幅提升模型性能,因此也是可以权衡利弊考虑加入的一些方法)。
  3. 修改并适配最新的训练方法使它们更高效且适合用于单张GPU训练,包括CBN,PAN,SAM等。

三、相关工作(站在巨人的肩上,并不是由本作者提出的方法,但是现有的研究成果)

1、目标检测模型(通用范式)

作者对相关工作的目标检测模型进行综述,详细回顾了近些年提出的一些目标检测模型的通用套路。即无论使用哪种算法,基于深度学习的目标检测模型都逃不出以下套路:

目标检测模型
上图中,可以看到目标检测模型都可以按套路分为四个部分:Input(输入)、Backbone(骨干)、Neck(颈部)、Head(头部,又分为Dense Prediction 和Sparse Prediction)。头部分为两类,分别对应一阶段目标检测算法(One-Stage Detector)和两阶段目标检测算法。例如我们所讲的YOLO即是前者,我们也在YOLOv1论文解读中谈论到了YOLO仅使用单个神经网络进行预测,相比于R-CNN系列的两阶段目标检测算法,没有根据候选框和卷积层特征再训练一个模型(即Sparse Prediction)这一步,而是直接根据卷积层特征输出进行的预测。

2、BoF(Bag-of-Freebies,一些不用白不用,用了有好处的方法)

①数据增强

  • 像素级调整:调整样本的光线、亮度、饱和度、对比度等,随机加入噪声,也会进行缩放,裁剪、旋转和翻转等操作。
  • 逻辑性调整模拟现实中的遮挡等,采用随机擦除(random erase)和CutOut等方法,比如随机选择图片的一个举行区域,全部置白或者置黑等(表现在模型的卷积层中,即针对feature map则体现为DropOut(失活一部分神经元)、DropConnect(失活一部分连接)和DropBlock(失活一整块神经元区域))。
  • 结合多张图片:一种是融合(MixUp),例如两张图片各占比%50融合为一张,再通过比例去确定训练样本的标签;另一种是剪切合并(CutMix),将一个图像的部分剪切下来覆盖到另一张图像上。
    MixUp和CutMix
  • 图像风格迁移风格迁移GAN(Style transfer GAN),通过生成对抗网络训练,能够将训练样本之间进行不同风格迁移,生成多样的训练数据。

②解决样本分布失衡

  • 调整不平衡的数据分布:困难负样本挖掘(hard negative example mining)和在线困难负样本挖掘(online hard negative example mining),即把错误分类的负样本再次送入分类器进行训练(就像学生做错题集,错的题目多学才能提高能力),上述两方法只对两阶段目标检测算法有效,因此YOLO不适用。适用于一阶段目标检测平衡样本分布的方法是使用focal loss来平衡样本数量,该损失函数是对二分类交叉熵损失函数的改进。

③标签改进

  • 使用软标签代替硬标签:标签平滑(label smoothing)即用“概率”替换“是非”。

③新的BBox检测目标函数

  • CIoU损失函数:传统的IoU损失函数可能会由于预测区域和实际区域之间没有交集而产生梯度消失问题,通过在传统的IoU损失函数基础上做一些改进来避免梯度消失问题。

3、BoS(Bag-of-Specials,一些用了以后利大于弊的方法)

  • 匹配多尺度图像输入:提出了SPP,ASPP,RFP等分割特征图的方法提升模型精度(不适用于全连接层的模型),SPP在YOLOv3-608中被使用,RFB在SSD中被使用。
  • 注意力机制:又被分为channel-wise attention(代表为Squeeze-and-Excitation (SE))和point-wise attention(代表为Spatial Attention Module (SAM) ),YOLOv4选择了后者,因为其开销更小。
  • 特征整合:最初的特征整合技术包括跨层连接(skip connection)和hyper-column,将底层的物理特征整合为高层的语义特征。因为FPN的流行,更多整合特征金字塔的轻量级模型被提出,例如SFAM,ASFF,BiFPN,最终目标还是实现多尺度的检测任务。
  • 激活函数改进:ReLU有效改善了tanh和sigmoid的梯度消失问题,还有很多变种LReLU,PReLU,ReLU6,SELU,Swish,hard-sWish和Mish。其中Swish和Mish都是连续可微的激活函数。
  • 后处理方法:NMS能够减少BBox对同一目标物体不好的预测框。使用DIoU NMS通过计算预测的置信度得分和概率,对同一目标物体的预测框进行排序输出最好的一个。

四、YOLOv4的技术选择

YOLOv4模型结构:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

使用的BoF和BoS:

对于backbone使用的BoF:

  • CutMix
  • Mosaic data augmentation
  • DropBlock regularization
  • Class label smoothing

对于backbone使用的BoS:

  • Mish activation
  • Cross-stage partial connections (CSP)
  • Multiinput weighted residual connections (MiWRC)

对于detector使用的BoF:

  • CIoU-loss
  • CmBN,DropBlock regularization
  • Mosaic data augmentation
  • self-Adversarial Training
  • Eliminate grid sensitivity
  • Using multiple anchors for a single ground truth
  • Cosine annealing scheduler
  • Optimal hyper-parameters
  • Random taining Shapes

对于detector使用的BoS:

  • Mish activation
  • SPP-block
  • SAM-block
  • PAN path-aggregation block
  • DIoU-NMS。

上述技术都可以单独查阅阅读并理解,值得一提的是:

  • CSPDarknet53即是对Darknet53应用跨阶段局部连接技术进行的模型改进。

  • Cosine annealing scheduler (模拟余弦退火)初看中文翻译觉得很难理解,其实是学习率衰减的一种方式,衰减速率曲线类似余弦函数cos从最高点到最低点的部分。简单可理解为起初学习率衰减慢,训练中间衰减快,最后衰减速率再变缓。

  • SAM-Block进行了修改,取消了最大池化和均值池化,直接采用了卷积操作。
    修改的SAM模块

  • PAN也进行了修改,将两层相加改为两层拼接。
    修改的PAN

五、实验对比

作者进行了大量的实验,围绕两个方面进行:

  1. YOLOv4加入上述BoS和BoF后对模型精度和执行时间的影响即变化:
    加入BoF和BoF对YOLO的影响

  2. YOLOv4和其他目标检测模型的对比:
    YOLOv4和其他目标检测模型的对比

参考文献

https://arxiv.org/pdf/2004.10934.pdf
https://github.com/AlexeyAB/darknet

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值