今天刷看到了YOLOv4之时,有点激动和兴奋,等了很久的YOLOv4,你终究还是出现了
论文地址:https://arxiv.org/pdf/2004.10934.pdf
GitHub地址:https://github.com/AlexeyAB/darknet
觉得作者很地道,论文附上开源,没有比这更开心的事情了吧!
首先附上对论文总结的思维导图,帮助大家更好的理解!
下边是对论文的翻译,有些地方可能翻译的不是很准备,欢迎指正补充
(思维导图和论文译文PDF均可在公众号【计算机视觉联盟】回复YOLOv4获取)
摘要有很多特征可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并需要对结果进行理论证明。某些特征仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小型数据集上运行;而某些特征(例如批归一化和残差连接)适用于大多数模型,任务和数据集。我们假设此类通用特征包括加权残差连接(WRC),跨阶段部分连接(CSP),交叉小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。我们使用以下新功能:WRC,CSP,CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlock正则化和CIoU丢失,并结合其中的一些特征来实现最新的结果:在MS COCO数据集上利用Tesla V10以65 FPS的实时速度获得了43.5%的AP(65.7%AP50)。开源代码链接:https://github.com/AlexeyAB/darknet。
1、介绍大多数基于CNN的物体检测器仅适用于推荐系统。例如,通过慢速精确模型执行的城市摄像机搜索免费停车位,而汽车碰撞警告与快速不精确模型有关。提高实时物体检测器的精度不仅可以将它们用于提示生成推荐系统,还可以用于独立的过程管理和减少人工输入。常规图形处理单元(GPU)上的实时对象检测器操作允许以可承受的价格对其进行运行。最精确的现代神经网络无法实时运行,需要使用大量的GPU进行大量的mini-batch-size训练。我们通过创建在常规GPU上实时运行的CNN来解决此类问题,并且该培训仅需要一个传统的GPU。
这项工作的主要目标是在产生式系统中设计一个运行速度快的目标探测器,并对并行计算进行优化,而不是设计一个低计算量的理论指标(BFLOP)。我们希望所设计的对象易于训练和使用。如图1中的YOLOv4结果所示,任何人使用传统的GPU进行训练和测试,都可以获得实时、高质量和令人信服的目标检测结果。我们的贡献概括如下:
我们开发了一个高效且功能强大的目标检测模型。它使每个人都可以使用1080Ti或2080TiGPU来训练超快、精确的物体探测器。
我们验证了当前最新的“免费袋”和“特殊袋”检测方法在探测器训练过程中的影响。
我们修改了最新的方法,使其更有效,更适合于单个GPU的培训,包括CBN[89]、PAN[49]、SAM[85]等。
2、相关工作(Related work) 2.1 目标检测算法(Object detection models)目标检测算法一般有两部分组成:一个是在ImageNet预训练的骨架(backbone),,另一个是用来预测对象类别和边界框的头部。对于在GPU平台上运行的检测器,其骨干可以是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。对于在CPU平台上运行的那些检测器,其主干可以是SqueezeNet [31],MobileNet [28、66、27、74]或ShuffleNet [97、53]。对于头部,通常分为两类,即一级对象检测器和二级对象检测器。最具有代表性的两级对象检测器是R-CNN [19]系列,包括fast R-CNN [18],faster R-CNN [64],R-FCN [9]和Libra R-CNN [ 58]。还可以使两级对象检测器成为无锚对象检测器,例如RepPoints [87]。对于一级目标检测器,最具代表性的模型是YOLO [61、62、63],SSD [50]和RetinaNet [45]。近年来,开发了无锚的(anchor free)一级物体检测器。这类检测器是CenterNet [13],CornerNet [37、38],FCOS [78]等。近年来,无锚点单级目标探测器得到了发展,这类探测器有CenterNet[13]、CornerNet[37,38]、FCOS[78]等。近年来发展起来的目标探测器经常在主干和头部之间插入一些层,这些层通常用来收集不同阶段的特征图。我们可以称它为物体探测器的颈部。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。具有这种机制的网络包括特征金字塔网络(FPN)[44]、路径聚集网络(PAN)[49]、BiFPN[77]和NAS-FPN[17]。除上述模型外,一些研究人员将重点放在直接构建用于检测对象的新主干(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDe-tector [20])上。
总而言之,普通的检测器由以下几个部分组成:
输入:图像,斑块,图像金字塔
骨架:VGG16 [68],ResNet-50 [26],SpineNet [12],EfficientNet-B0 / B7 [75],CSPResNeXt50 [81],CSPDarknet53 [81]
颈部:
其他块:SPP [25],ASPP [5],RFB [47],SAM [85]
路径聚合块:FPN [44],PAN [49],NAS-FPN [17] ],Fully-connected FPN,BiFPN [77],ASFF [48],SFAM [98]
Heads :
密集预测(一阶段):
RPN[64],SSD [50],YOLO [61], RetinaNet [45](基于锚)
CornerNet[37],CenterNet [13],MatrixNet [60],FCOS [78](无锚)
稀疏预测(两阶段):
Faster R-CNN [64],R-FCN [9],Mask R-CNN [23](基于锚)
RepPoints[87](无锚)