zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《YOLOv4:Optimal Speed and Accuracy of Object Detection》论文笔记

论文笔记 and of object Detection optimal speed
2023-09-11 14:22:29 时间

参考代码:darknet

1. 概述

导读:检测网络发展到现如今已经有很多的改进思路,这些改进思路在狭义或是广义程度上都对检测网络的性能有所提升。在这篇文章中对这些改进的思路进行探究,从理论上分析对检测结果的影响。文章发现一些检测优化的技巧是针对某个数据集,某个问题等较为单一的方面进行设计与优化的,并不具有较高的通用价值,因而这篇文章更加关注于具有通用价值的改进思路。这些思路包括:加权的残差连接(Weighted Residual Connections,WRC),跨stage特征融合(Cross Stage Partial connections,CSP),Cross mini-Batch Normalization(CmBN),自对抗训练(Self-adversarial training),Mish激活。文章在WRC,SCSP,CmBN,DropBlock正则化,CIoU损失基础上进行选择优化得到了一个新的高性能检测检测网络YOLOv4,在COCO数据集上性能达到43.5%,在V100上能跑到65FPS。比较可贵的一点是照顾了硬件的算力,在单GPU上也能完成训练。

文章的算法与之前的一些算法进行比较其结果见下图所示:
在这里插入图片描述
文章的主要贡献归纳为:

  • 1)设计了一个高效强大的检测模型,可以在单1080Ti或是2080Ti GPU上快速训练快速且准确的检测器;
  • 2)验证了前面提到检测优化技巧的有效性;
  • 3)对于一些网络结构(CBN,PAN,SAM)进行改进使得其可以高效运行在单GPU上;

1.1 优化的一些技巧

在这篇文章中作者将检测网络划分为4个不同的阶段,每个不同的阶段下都有对应的优化技巧,见下图2所示:
在这里插入图片描述

1.1.1 Bag of freebies(BoF)

在检测优化过程中有一类方法是可以通过改进训练策略或是增加训练的成本(数据增广)来实现检测网络性能的提升。

1. 数据增广层面
数据增广常用的形式有图像变换(亮度,对比度,饱和度等)与几何变换(大小缩放,剪裁,翻转,旋转等)。

除此之外,有使用随机涂白的形式进行模拟遮挡情形,代表的方法有CutOut。除了在输入的图像上进行随机涂白,也有在特征图上进行操作的,如DropOut,DropConnect和DropBlock。也有使用图像混叠的形式进行数据增广,比如MixUP。也可以将GAN引入作为风格迁移进行数据增广。

在训练数据中会有较多的偏向性,比如在类别上,一些采样的方法(困难样本挖掘)可以缓解部分问题。在一阶段检测网络里面使用Focal Loss进行样本损失平衡。也有使用知识蒸馏里面的标签软化使得网络训练结果更加鲁棒。

2. 损失函数层面
早先的检测网络损失函数多以范数类型的算是函数为主,后面通过将检测的度量标准直接作为损失函数度量,从而将IoU引入到网络损失函数中去,从而有了CIoU与DIoU之类的损失函数。

1.1.2 Bag of specials(BoS)

对现有的检测算法增加模块或是改进后处理方法都可以在较少开销的情况下实现较大的性能提升。对于增加模块常见的有,增大感受野,引入注意力机制,增强特征融合。

1. 检测网络中的改进模块
一些常见的网络模块提供给模型以增加网络的感受野,比如SPP,ASPP,RFB等模块。
对于attention机制在图像里面主要是channel层和spatial层的,其中Squeeze-and-Excitation(SE)和Spatial Attention Module(SAM)就是其中的代表。

在检测领域图像特征的融合也是很关键的,综合运用多个尺度的信息会极大提升检测性能。因而就有了FPN,SFAM,ASFF和BiFPN之类的特征融合网络。

除此之外,激活函数也是一个不容忽视的点,从2010年提出来的ReLU一直到LReLU,PReLU,ReLU6,SELU(Scaled Exponential Linear Unit),Swish,hard-Swish和Mish等。

2. 检测后处理
对于检测的后处理一般是采用NMS来去掉多余的检测框,有一些对应的改进,如soft NMS,DIoU NMS等。

2. 方法设计

2.1 检测网络中子结构选择

2.1.1 基础网络选择

文章发现咋ImageNet分类任务中CSPResNext50是好于CSPDarknet53的,但是在MS COCO检测数据集下就是相反的结果,这两个网络里面对不同任务的倾向性,分类表现好的并不一定适合于检测任务。

2.1.2 特征融合网络选择

在确定好BackBone之后就需要为增加网络感受野和参数(拟合能力)选择额外的网络结构了,如FPN,PAN,ASFF,BiFPN等。在检测任务中对网络的要求体现为如下三点:

  • 1)更高的图像输入尺寸,从而有利于小目标的检测;
  • 2)更多的网络层,以利于获取更大的网络感受野,从而可以有效覆盖输入图像;
  • 3)更多的网络参数,以利于增大网络的表达能力,从而适应一张图像中存在的不同尺寸的目标;

因而结合上面内容对之前提到的一些网络进行分析,得到下表1:
在这里插入图片描述
因而从表中得到CSPDarknet53是其中较优的选择。对于网络感受野的影响其影响可以归纳为:

  • 1)大的感受野可以感知到整个目标;
  • 2)大的感受野可以感知到目标周围的信息;
  • 3)大的感受野增加了图像像素到最后特征点的链接数量,增大了拟合能力;

综上分析,文章在网络结构选择方面最后的结论为:BackBone选择CSPDarknet53,在此基础之上选择SPP模块进一步增大感受野,使用PANet中的特征融合模块增加网络的参数,增加网络表达能力,使用YOLOv3中的检测头作为检测头,从而构建了新的检测网络YOLOv4基础结构。

2.2 BoF于BoS中技巧的选择

这里对BoF于BoS中的技巧进行了总结:
在这里插入图片描述
在经过一些分析比较之后,对其中的一些方法可以进行排除于选择。PReLU和SELU较难训练,ReLU6是为量化网络而设计的,因而这些激活函数被排除。在正则化方法好不犹豫地选择了DropBlock的方式。由于没有多卡GPU进行训练,因而syncBN被排除了。
为适应单GPU训练的改进

这里对于单GPU训练的场景做了如下额外的设计于优化:

  • 1)使用Mosaic数据增广,并引入SAT;
  • 2)使用遗传算法选择优化网络超参数;
  • 3)对于SAM,PAN,CmBN(Cross mini-Batch Normalization)进行修改使其训练与检测更加高效;

文章使用Mosaic的数据增广的方法,将4张图片进行混合,而不是CutMix中的2张图片,这样可以显著减少训练Batch的数量。
在这里插入图片描述
除了上面的图像数据增广之外,文章还是用SAT(自对抗网络)进行数据增广。这个过程的第一步是使用对抗网络去修改原始的图像,以消除图像中的目标。第二步就是使用检测网络用正常的方式去训练这个改动之后的图片。

在BN上文章采用了修改的CBN得到CmBN,在一个Batch上进行划分,再在划分结果上进行统计。
在这里插入图片描述
文章对SAM模块进行了改进使用spatial上的attention替换了channel上的attention,见下图:
在这里插入图片描述
对于PAN使用concat替换了shortcut,见下图所示:
在这里插入图片描述

2.3 YOLOv4的网络结构

在这里插入图片描述

3. 实验结果

这里贴出一部分检测的性能比较:
在这里插入图片描述
文章比较精华的消融实验部分内容比较多,这里就不细细展开,有兴趣的请参考原文。