赞
踩
YOLOv4: Optimal Speed and Accuracy of Object Detection
最优的目标检测速度和精度
目录
有大量的功能,据说提高卷积神经网络( CNN )的准确性。需要在大型数据集上对这些特性的组合进行实际测试,并对结果进行理论上的验证。有些特征只在某些模型上运行,只针对某些问题,或者只针对小规模数据集;虽然一些特性,如批标准化和残差连接,适用于大多数模型、任务和数据集。我们假设这些通用特性包括加权残差连接( WRC )、跨阶段部分连接( CSP )、跨小批量归一化( CmBN )、自对抗训练( SAT )和Mish激活。我们使用了新的特性:WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失,并将其中的一些特性结合起来,实现了最先进的结果:在Tesla V100上,MS COCO数据集以65 FPS的实时速度达到43.5 % AP ( 65.7 % AP50 )。
论文链接:https://arxiv.org/abs/2004.10934
源码链接:https://github.com/AlexeyAB/darknet
我们提供了一个最先进的探测器,它比所有可用的替代探测器更快( FPS )和更准确的( MS COCO AP50 ... 95和AP50)。所描述的探测器可以在具有8 - 16GB - VRAM的传统GPU上训练和使用,这使得它的广泛应用成为可能。单级锚基探测器的最初概念已证明其可行性。我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的准确性。这些特点可以作为未来研究和发展的最佳实践。
最精确的现代神经网络并不实时运行,需要大量的GPU来进行大规模的小批量训练。我们通过创建一个在常规GPU上实时运行的CNN来解决这些问题,而训练只需要一个常规GPU。
这项工作的主要目标是在生产系统中设计目标探测器的快速运行速度和并行计算的优化,而不是低计算量的理论指标( BFLOP )。我们希望所设计的对象能够容易地被训练和使用。例如,任何人使用传统的GPU进行训练和测试,都可以获得实时、高质量、令人信服的目标检测结果,如图1所示的YOLOv4结果。我们的贡献总结如下:
作者定义了两个新的概念名词:免费的包和特殊的包。
新概念名词解释见下文,经典的算法总结有兴趣可以阅读原论文。
通常,一个传统的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标探测器在不增加推理成本的情况下获得更好的精度。我们把这些只改变训练策略或者只增加训练成本的方法称为 "bag of freebies" 。对象检测方法经常采用的并符合 bag of freebies 的定义的是数据增强。数据增强的目的是增加输入图像的可变性,使设计的目标检测模型对不同环境下获取的图像具有更高的鲁棒性。例如,光度失真和几何失真是两种常用的数据增强方法,它们无疑有利于目标检测任务。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何变形,我们加入了随机缩放、裁剪、翻转和旋转。
对于那些只增加少量推理成本但能显著提高对象检测精度的插件模块和后处理方法,我们称之为 "bag of specials" 。一般来说,这些插件模块都是为了增强模型中的某些属性,如扩大感受野、引入注意力机制或加强特征整合能力等,而后处理是筛选模型预测结果的一种方法。
一个现代的检测器通常由两部分组成,一个是在ImageNet上预训练的主干,另一个是用于预测对象的类和边界框的头部。对于那些运行在GPU平台上的检测器,它们的主干网络可以是VGG [ 68 ]、ResNet [ 26 ]、ResNeXt [ 86 ]或DenseNet [ 30 ]。对于那些在CPU平台上运行的检测器,其主干可以是SqueezeNet [ 31 ]、MobileNet[ 28,66,27,74]或ShuffleNet[ 97、53 ]。至于头部部分,通常分为两种,即one-stage目标探测器和two-stage目标探测器。
近年来发展起来的目标探测器往往在骨架和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称它为物体探测器的颈部。通常,一个颈部由若干自下而上的路径和若干自上而下的路径组成。具备该机制的网络包括特征金字塔网络( Feature Pyramid Network,FPN ) [ 44 ]、路径聚合网络( Path Aggrega-tion Network,PAN ) [ 49 ]、Bi FPN [ 77 ]和NAS - FPN [ 17 ]。除了上述模型之外,一些研究人员强调直接构建一个新的骨干( Det Net 、Det NAS )或一个新的整体模型( Spine Net 、Hit De-tector )来进行目标检测。
综上所述,一个普通的物体探测器是由 “特征输入、骨干网络、颈部和头部” 四部分组成的:
图2 普通的目标检测器
YOLOv4 consists of:
- Backbone: CSPDarknet53《CSPNet:一种能够增强CNN学习能力的新型主干网络》
- Neck: SPP《用于视觉识别的深度卷积网络中的空间金字塔池化》, PAN《路径聚合网络用于实例分割》
- Head: YOLOv3《Yolov3:一个增量改进》
图3 YOLOv4的网络架构。此图来源于某位大神之手,详细的绘制出了YOLOv4的整体框架和各个模块的具体结构。如论文所述,YOLOv4不例外的由输入端、骨干、颈部和预测头部组成,中间两部分融合了FPN和PAN的精髓,使得网络可以汇聚不同尺度特征图的信息,最终经过头部输出预测结果。
图4 来自论文《CSPNet》的CSPX模块残差设计图。如图3 所示,CSPX模块有X个残差组件( Res Unit )和若干个CBL组成。其中,残差组件有两个CBL进行残差设计而成。CBL = 卷积 + BN + LeakyReLU,是YOLOv4模型的基石。可以看出,CSPX模块是一种残差中的包含残差的结构。
图5 具有空间金字塔池化层的网络结构。其中256为层的滤波器个数,为最后一个卷积层。输入图像,首先经过一个卷积层输出任意尺寸的特征图,经过层输出通道数为256的特征图。然后进入SPP层,左边把特征图分成16份,经过最大池化输出一个16×256-d的特征图,展平后得到特征向量( 1×16*256 ),剩余的两个分别分成4份和1份,同理得出特征向量( 1×4*256 )和特征向量( 1×1*256 ),拼接得到最终的特征向量( 1×21*256 )。最后,经过全连接层和1000-way的Softmax层输出预测结果。
图6 左边是《PAN》中的模块结构,右边是改进后的PAN模块结构。显而易见,只是把特征图之间的相加改成了特征图之间的拼接。
我们在ImageNet( ILSVRC 2012版 )数据集上测试了不同训练改进技术对分类器精度的影响,然后在MS COCO ( test-dev 2017 )数据集上测试了对检测器精度的影响。
在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8,000,000;批次大小和小批量大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1;热身步数为1000步;动量和权重衰减分别设为0.9和0.005。我们所有的BoS实验都使用与默认设置相同的超参数,而在BoF实验中,我们添加了额外的50 %的训练步骤。在BoF实验中,我们验证了Mix Up、Cut Mix、Mosaic、模糊化数据增强和标签平滑正则化方法。在BoS实验中,我们比较了LReLU、Swish和Mish activated函数的效果。所有实验均使用1080Ti或2080Ti GPU进行训练。
在MS COCO目标检测实验中,默认的超参数如下:训练步数为500,500;采用步长衰减学习率调度策略,初始学习率为0.01,在40万步和45万步分别乘以一个因子0.1;动量和重量衰减分别设置为0.9和0.0005。所有架构都使用单个GPU执行批处理大小为64的多尺度训练,而小批处理大小为8或4则取决于架构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验都使用默认设置。遗传算法采用YOLOv3 - SPP对GIoU损失进行训练,对min-val 5k组搜索300个epoch。采用搜索学习率0.00261、动量0.949、IoU阈值分配 ground truth 0.213、损失正规化0.07进行遗传算法实验。我们已经验证了大量的BoF,包括网格敏感性消除、马赛克数据增强、IoU阈值、遗传算法、类标签平滑、交叉小批量归一化、自对抗训练、余弦退火调度器、动态小批量大小、DropBlock、Optimized Anchors、各种IoU损失。我们还在各种BoS上进行了实验,包括Mish、SPP、SAM、RFB、Bi FPN和Gaussian YOLO [ 8 ]。对于所有实验,我们只使用一个GPU进行训练,因此没有使用优化多个GPU的syncBN等技术。
图7:各种数据增强方法。
表2:Bof和Mish对Cspresnext - 50 Clas - Sifier准确率的影响。
表3:Bof和Mish对Cspdarknet - 53 Classi - Fier精度的影响。
表4:Bag-of-Freebies 的消融研究。( CSPResNeXt50 - PANet - SPP , 512 × 512)。
- S:在YOLOv3中,消除网格敏感性的方程,其中总是整数倍,用于计算物体坐标,因此,值接近值需要极高的绝对值。我们通过将Sigmoid乘以超过1.0的因子来解决这个问题,从而消除了对象无法检测的网格的影响。
- M:马赛克数据增强-在训练期间使用4幅图像马赛克,而不是单幅图像。
- IT:IoU阈值-使用多个锚用于a single ground truth IoU (truth, anchor) > IoU threshold。
- GA:遗传算法-使用遗传算法在前10 %的时间段内选择网络训练过程中的最优超参数。
- LS:类标签平滑- -为sigmoid激活使用类标签平滑。
- CBN:CmBN -使用 Cross mini-Batch Normalization 在整个批次内收集统计信息,而不是在单个 mini-batch 内收集统计信息。
- CA:余弦退火调度器- -在正弦训练过程中改变学习速率。
- DM:动态小批量- -使用随机训练形状在小分辨率训练时自动增加小批量。
- OA:优化的锚点- -使用优化的锚点进行512x512网络分辨率的训练。
- GIoU、CIoU、DIoU、MSE:使用不同的损失算法进行 bounded box 回归。
表5:Bag-of-Specials 的消融研究。( 512 × 512 )。
表6:使用不同的分类器预训练权重进行检测器训练(所有其他训练参数在所有模型中都是相似的)。
表7:使用不同的 mini-batch size 进行检测器训练。
图8 不同物体探测器的速度和精度比较。(一些文章只针对其中一个GPU : Maxwell / Pascal / Volta ,阐述了它们探测器的FPS),YOLOv4在三种GPU上进行了测试。
获得的结果与其他最先进的对象检测器的比较如图8 所示。我们的YOLOv4位于 Pareto 最优曲线上,在速度和精度上都优于最快和最准确的检测器。
由于不同的方法使用不同架构的GPU进行推理时间验证,我们在Maxwell、Pascal和Volta架构的常用GPU上运行YOLOv4,并与其他最先进的方法进行比较。表8 列出了使用Maxwell GPU的帧速率比较结果,它可以是GTX Titan X ( Maxwell )或Tesla M40 GPU。表9 列出了使用Pascal GPU的帧率比较结果,可以是Titan X ( Pascal )、Titan Xp、GTX 1080 Ti或Tesla P100 GPU。至于表10,它列出了使用Volta GPU的帧速率比较结果,它可以是Titan Volta或Tesla V100 GPU。
检测速度取决于GPU的性能 (万恶的资本主义),但是在不同的GPU上训练模型,检测精度基本一致。这里只列举YOLOv4的训练结果,论文中还对其他优秀的模型进行了不同GPU的训练,感兴趣自行阅读。
表8 在Maxwell GPU上的训练结果(Tesla M40 4G 4000RMB)
表9 在Pascal GPU上的训练结果(Tesla P100 16G工包:17888RMB)
表10 在Volta GPU上的训练结果(Tesla V100 16G:38888RMB)
>>> YOLO系列的论文已经告一段落,期间也精读了DETR系列的一些论文,颇有感受。YOLOv4更像是一篇总结性的文章,具体描述了整个模型的各个阶段,并对每个阶段的经典算法进行了研究和消融实验,值得我们重新思考神经网络模型的框架。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。