Yolov4论文阅读

论文地址:https://arxiv.org/pdf/2004.10934.pdf

   yolov4和yolov5两个模型相继在四五月份出来(尽管后者的名字还存在一些争议),最近正好有一个目标检测的任务要做,就试了试yolov5,只用yolov5s网络的默认参数在自己的数据集上训练就达到了很好的检测效果,速度也相当快(在GTX1070上检测一帧640x640的图像耗时仅仅8ms)。然而yolov5在很大程度上只是从工程上对yolov4进行了优化,也没有相应的论文,所以把yolov4的论文仔细阅读了一下,发现文章里对当前目标检测领域里一些优秀的实践做了较好的归纳,故记录一下文章内容。

   先引用一张图
yolov4思维导图
   有很多方法可以提升神经网络的准确率,在实践中评判一种方法的好坏主要看两点,一是在大规模数据集上是否work,二是是否有理论依据。我们假设某些具有普适性的方法包括:Weighted-residual-connection(WRC),cross-stage-partial-connections(SCP),cross mini-batch Normalization(CmBN),self-adversarial-training(SAT)以及mish-activation。我们还使用了一些新的tricks,包括Mosaic data augmentation,DropBlock regularization,CIoU loss,设计了一个YOLO-V4,并且在MS coco数据集中取得了新的state-of-the-art的结果:在Tesla V100显卡能达到43.5% AP(65.7% AP)的精度,且达到~65FPS的速度。
   主要贡献:
      1.开发了一个快速而准确的目标检测模型,仅仅使用一块1080Ti或2080Ti就能够完成训练;
      2. 在训练过程中,验证了目标检测的Bag-of-Freebies和Bag-of-Specials对模型的影响;
      3. 简化以及优化了一些最新提出的算法,包括(CBN,PAN,SAM),从而使Yolo-V4能够在一块GPU上就可以训练起来。

   一个目标检测算法通常包括三个部分:Backbone, Neck和Head

   Backbone: 算法的主干网络,主要用于对图像的特征提取,一些常用的分类模型的卷积层部分,可以在Imagenet上进行预训练,如VGG16,19,ResNet-50, ResNeXt-101, Darknet53,和一些轻量级网络,如MobilenetV1,2,3 ShuffleNet1,2;

   Neck:特征融合部分,对主干网络的特征层进行加工,使其更加适合于检测任务,主要包括两种:1. additional blocks: SPP,ASPP in deeplabV3+,RFB,SAM; 2 Path-aggregation blocks: FPN, PAN, NAS-FPN, BiFPN, ASFF, SFAM;

   Heads(检测头):算法输出的结果,例如直接预测bbox的x,y,w,h以及类别,或是想得到一个heatmap
密集型预测(一阶段方法):
    anchor-based: RPN, SSD, YOLO, RetinaNet
    anchor-free: CornerNet,CenterNet, MatrixNet, FCOS
稀疏型预测(二阶段方法):
    anchor-based: R-CNN系列
    anchor-free: RepPoints

Bag of freebies

   使用一些训练技巧,在不增加模型前向计算耗时的前提下使模型取得更好的准确度。

首先是一些数据增广的方法
   主要有两种:色彩方面的增强(改变图像的像素值),和几何增广。

   色彩增广:对比度增广,亮度增广,以及HSV空间增广;
   几何增广:随机翻转,随机裁剪,拉伸,旋转;

   还有一些改善目标遮挡等问题的数据增广方法。
   1.随机裁剪矩形区域,并用0填充,如random erase和CutOut算法;
   2.随机裁剪多个矩形区域,如hide-and-seek, grid mask;

   3.MIX-UP方法,Mix-up在分类任务中,将两个图像按照不同的比例相加,在目标检测中的做法就是将一些框相加,这些label中就多了一些不同置信度的框。

   4.style-transfer GAN做数据增强。

解决数据不均衡的方法
   数据不均衡主要表现在两个方面,一是背景类和前景类之间的数据不均衡,二是不同前景类之间的数据不均衡。比较经典的方法包括:two-stage算法中使用的难例挖掘,Focal loss, 以及对于one-hot编码后label没有关联的问题进行label-smooth。

改进损失函数
   相较于之前计算独立计算bbox的坐标、宽高的偏差,计算IOU的loss更具优势,后者既考虑到了目标的整体性,还具备尺度不变性。

Bag of specials
   一些额外的模块,以增加较少计算量为代价来提升模型的准确率,如特征增强模块。主要包括以下方法:

增大感受野
   SPP:主要解决的问题是网络中有全连接层时,不同大小目标区域的特征输入到检测头时维度需要保持一致,具体做法是把特征图划分为固定的块数进行pooling操作
   ASPP:
   RFB:对同一个特征图使用几个不同dilated ration的空洞卷积操作,提取到不同大小感受野的特征,并进行融合

注意力机制
   1.通道注意力:在特征图中引入一个1x1xC的weights,对每个通道赋予不同的权重,C为特征层的通道数,这里有SEnet;
   2.空间注意力:在HW维度上加入attention;
通道+空间:同时用到上面两种方法;

特征融合
   1.Skip connection:融合低层和高层的信息,如Unet
hyper-column: 使用不同kernel size的卷积融合不同大小感受野的信息,如Inception
   2.FPN,ASFF,BiFPN:将深层特征图上采样之后与浅层特征图融合

激活函数
   LReLU和PReLU解决输出小于零时ReLU的梯度为零的问题,ReLU6和hard-Swish为量化网络设计的,SELU对神经网络进行自归一化。

后处理
   NMS,soft NMS,DIoU NMS

YOLO-v4方法
   针对实际生产系统中的高效计算而设计,而不是理论上的指标,提供两种实时的网络选择:
   1.对于GPU:CSPResNeXt50 ,CSPDarknet53
   2.对于VPU:EfficientNet-lite , MixNet [76] , GhostNet [21] , MobileNetV3

结构选择

   在ImageNet分类方面,CSPResNext50比CSPDarknet53好,然而就检测MS COCO数据集上的对象而言,CSPDarknet53比CSPResNext50更好。
   对于分类最佳的参考模型对于检测器并非总是最佳的,检测任务不同于分类任务主要表现在:
      1.更大的网络输入,用于检测小目标
      2.更多的层-以获得更大的感受野来覆盖增大的输入图像
      3.更多的参数-为了增强从单张图像中检测出不同大小的多个对象的能力

   在CSPDarknet53上添加SPP块,显著增加了感受野,分离出最重要的上下文特征,并且几乎不会降低网络操作速度。使用PANET代替YOLOv3中使用的FPN作为不同深度的特征聚合方法,用于多尺度检测。

   最后,选择 CSPDarknet53 为主干网络、SPP模块、PANET路径聚合Neck和YOLOv3(基于锚点的)检测头作为YOLOv4的整体结构。

BoF和BoS的选择
   为了改进目标检测训练,CNN通常使用以下方法:
      激活:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
      边界框回归损失:MSE,IoU,GIoU,CIoU,DIoU
      数据增强:CutOut,MixUp,CutMix
      正则化方法:DropOut, DropPath ,Spatial DropOut或DropBlock
   通过均值和方差对网络激活进行归一化:Batch Normalization (BN),Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN), orCross-Iteration Batch Normalization (CBN)
   跨连接:Residual connections, Weightedresidual connections, Multi-input weighted residualconnections, or Cross stage partial connections (CSP)

   在激活函数方面,PReLU和SELU更难训练,ReLU6是专门为量化网络设计的,因此不选择使用它们。Drop-Block与其他方法相比具有显著优势,选择了DropBlock作为我们的正则化方法。至于标准化方法的选择,由于专注于仅使用一个GPU的训练策略,因此不考虑syncBN。

其他的改善

   1。引入了一种新的数据增强方法:Mosaic, and Self-Adversarial Training (SAT)
   2.应用遗传算法选择最优的超参数
   3.修改了一些现有方法,使我们的设计适合进行有效的训练和检测-改进的SAM,改进的PAN ,以及跨小批量标准化(CmBN)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值