ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

YOLOv4

2021-07-16 17:32:28  阅读:509  来源: 互联网

标签:YOLOv4 函数 Mish 卷积 SPP CSP


 YOLOv4: Optimal Speed and Accuracy of Object Detection

论文:https://arxiv.org/abs/2004.10934

代码:https://github.com/AlexeyAB/darknet

YOLOv4在COCO上,可达43.5%AP,速度高达65fps

YOLOv4的特点是集大成者,俗称堆料,但最终达到这么高的性能,一定是不断堆料、不断调参的结果。

1、框架:

  • backbone:CSPdarknet53
  • neck:SPP ,PAN
  • Head:YOLOv3,在head部分决定网络是检测还是分类。

对于GPU,作者在卷积层中使用:CSPResNeXt50/CSPDarknet53

对于VPU,作者使用分组卷积,但避免使用SE块-具体来说,它包括以下模型:EfficientNet-lite/MixNet/GhostNet/MobileNetV3

目标是在输入网络分辨率、卷积层数、参数数量和层输出(filters)的数量之间找到最佳平衡。

  • 416*416*3输入
  • 压缩宽度和高度到通道维度
  • 在后面几层已经具有一定语义信息
  • 进行CBL*3

CSPDarknet53(CSP)

CSPDarknet53(CSP)是darknet53的改进版本,经过主干神经网会得到3个有效特征层输出13*13*1024、26*26*512和52*52*256的特征层CSP

  • resblock构成
  • Mish 激活函数:Relu激活函数一直以来是做卷积神经网络的首选。不过随着mish出现,这种情况可能会发生改变。看函数形状会发现这个函数不是单调的,Relu和Mish对比,Mish的梯度更平滑,而且实现证明Mish和各种优化器结合的效果都比较好。更具体的说一下,Mish无边界(即正值可以到达任何高度),避免了由于封顶而导致的饱和。理论上对负值的轻微允许更好的梯度流。而不是像Relu中那样的硬0边界。最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入深入网络,从而得到更好的准确性和泛化。   尽管如此,我测试了许多激活函数,他们也满足了其中的许多想法,但大多数都无法执行。这里的主要区别可能是Mish函数在曲线上几户所有点上的平滑度。     在简单测试中,越来越多的层被添加到一个测试神经网络总,而没有一个统一的函数。随着层深的增加,Relu精度迅速下降,其次是Swish。相比之下,mish能更好地保持准确性,这可能是因为它能更好的传播信息。

  • 使用CSPDarknet的结构(CSP+Darknet)

融合特征提取 neck

SPP结构

  • 首先进行13*13*1024卷积进行3次卷积
  • 然后进行SPP模块,只需要不同池化核进行池化后再进行堆叠就可以了
  • 最后再进行3次卷积

PANet 

SE 和SAM

  • SENet(Squeeze-and-Excitation)增加2%计算量(但推理时有10%的速度),可以提升1%的ImageNet top-1精度。
  • Spatial Attention Module(SAM),增加0.1%计算量,提升0.5%的top-1准确率。

数据增强

  • 数据增强(扩充)
  1. 亮度、饱和度、噪声
  2. 几何变形
  • 模拟对象遮挡
  1. random erase
  2. cutout
  3. hide-and-seek grid mask 随机或均匀选取图片中的集合区域将其全部替换为0
  • feature map
  1. dropout
  2. dropconnect
  3. dropblock
  • 图像融合
  1. Mixup
  2. CutMix作者在CutMix基础上提出Mosica增强

  • 解决类别不平衡
  1. hard negative example mining
  2. online hard example mining
  3. focal loss
  • label smoothing:[0,0,1]转换到[0.01,0.01,0.90]

  • bbox

YOLOv4 = CSPDarknet53+SPP+PAN+YOLOv3其中YOLOv4用到相当多的技巧:

  • 用于backbone的BoF:CutMix和Mosaic数据增强,DropBlock正则化,Class label smoothing
  • 用于backbone的BoS:Mish激活函数,CSP,MiWRC
  • 用于检测器的BoF:CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,Self-Adversarial 训练,消除网格敏感性,对单个ground-truth使用多个anchor,Cosine annealing scheduler,最佳超参数,Random training shapes
  • 用于检测器的Bos:Mish激活函数,SPP,SAM,PAN,DIoU-NMS

2、步骤:

3、细节:吸收各个领域的trick改进自己的算法:

  • 输入端创新:Mosaic数据增强、cmBN、SAT自对抗训练
  • BackBone(CNN)主干网络:CSPDarknet53、Mish激活函数、Dropblock
  • Neck:在BackBone和最后的输出层之间的一些层,比如Yolov4中的SPP模块、FPN+PAN结构
  • Prediction:主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms

cmBN 参考链接https://blog.csdn.net/qq_35447659/article/details/107797737

标签:YOLOv4,函数,Mish,卷积,SPP,CSP
来源: https://blog.csdn.net/zml194849/article/details/118810125

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有