论文地址
We use new features: WRC, CSP,CmBN, SAT, Mish activation, Mosaic data augmentation, CmBN, DropBlock regularization, and CIoU loss, and com-bine some of them to achieve state-of-the-art results: 43.5%AP (65.7% AP50) for the MS COCO dataset at a real-time speed of ∼65 FPS on Tesla V100.
对于运行在GPU平台上的检测器,其骨干可以是VGG、ResNet、ResNeXt或DenseNet。
对于那些运行在CPU平台上的检测器,其骨干可以是SqueezeNet、MobileNet或ShuffleNet。
对于Head部分,通常分为one stage(一级目标检测器)和tow stage(二级目标检测器)两种。tow stage: R-CNN系列,包括fast R-CNN、faster R-CNN、R-FCN和Libra R-CNN。也可以使两阶段对象检测器成为无锚对象检测器,如RepPoints。
one stage: 最具代表性的模型有YOLO、SSD和RetinaNet。
近年来,Anchor free(无锚单级目标检测器)得到了发展。这类探测器有CenterNet、cornnet、FCOS等。
近年来发展起来的目标检测器通常在 Backbone 和 Head 之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体探测器的颈部 Neck。通常,一个颈由多条自底向上的路径和多条自顶向下的路径组成。具有该机制的网络包括:特征金字塔网络(FPN)、路径聚合网络(PAN)、BiFPN和NAS-FPN。
我的理解是,使目标检测器在不增加训练成本的情况下获得更高的精度。我们把这些只改变训练策略或只增加训练成本的方法称为“Bag of freebies”
数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的图像具有更高的鲁棒性。
例如,光度失真和几何失真是两种常用的数据增强方法,它们对目标检测任务有明显的好处。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何失真,我们添加随机缩放、裁剪、翻转和旋转。
其他一些 Bag of freebies 专门用于解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题。但由于一级目标检测器属于密集预测体系结构,因此实例挖掘方法不适用于这种检测器。
Bounding Box回归的目标函数
IoU、GIoU、DIoU与CIoU
结论:CIoU在BBox回归问题上具有较好的收敛速度和精度。
只增加了少量推理成本但却能显著提高目标检测精度的插件模块和后处理方法,我们称之为“Bag of specials”
Generally speaking, these plugin modules are for enhancing certain attributes in a model, such as enlarging receptive field, introducing attention mechanism, or strengthening feature integration capability, etc., and post-processing is a method for screening model prediction results.
-----------------------------------------------翻译:
一般来说,这些插件模块(Bag of specials)是为了增强模型中的某些属性,如扩大感受野,引入注意力机制,或增强特征集成能力等,后处理是一种筛选模型预测结果的方法。
可用于增强感受野的常见模块有SPP、ASPP和RFB。
SPP模块源于空间金字塔匹配(Spatial Pyramid Matching, SPM) , SPM的原始方法是将特征图分割成若干个d × d相等的块,其中d可以为{1,2,3,…},从而形成空间金字塔,进而提取 bag-of-word features。
SPP 将SPM集成到CNN中,使用最大池化操作代替bag-of-word操作。由于He等人提出的SPP模块输出的是一维特征向量,因此无法应用于全卷积网络(FCN)中。因此,在YOLOv3的设计中,Redmon和Farhadi将SPP模块改进为内核大小为k × k的max-pooling输出级联,其中k = {1,5,9,13}, stride = 1。在这种设计下,较大的k × k maxpooling有效地增加了骨干特征的接受域。在增加了SPP模块的改进版本后,YOLOv3-608在MS COCO对象检测任务上对AP50进行了2.7%的升级,但增加了0.5%的额外计算量。
ASPP 模块与改进后的SPP模块在操作上的差异主要来自于原来的k×k内核大小,stride的max-pooling为1到若干个3 × 3内核大小,扩张比为k,扩张卷积运算时stride为1。RFB模块是使用k×k核的几个扩张卷积,扩张比等于k, stride等于1,获得比ASPP更全面的空间覆盖。
RFB 只需要花费7%的额外推理时间,就可以使MS COCO上SSD的AP50增加5.7%。
The attention module that is often used in object detection is mainly divided into channel-wise attention and pointwise attention, and the representatives of these two attention models are Squeeze-and-Excitation (SE) and Spatial Attention Module (SAM) .
随着FPN等多尺度预测方法的流行,许多集成不同特征金字塔的轻量级模块被提出。这类模块包括saff、ASFF和BiFPN。sfm的主要思想是利用SE模块对多尺度拼接的特征映射进行信道级重加权。对于ASFF,使用softmax作为点级重加权,然后添加不同比例尺的特征图。
在BiFPN中,提出了多输入加权残差连接执行比例尺水平重加权,然后添加不同比例尺的特征映射。
在深度学习的研究中,一些人把研究重点放在寻找好的激活函数上。一个好的激活函数可以使梯度更有效地传播,同时也不会造成过多的额外计算成本。
2010年,Nair和Hinton提出了ReLU,从根本上解决了传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。随后,同样用于解决梯度消失问题的LReLU、PReLU、ReLU6、scaling指数线性单元(SELU)、Swish、hard-Swish、Mish等也被提出。
LReLU和PReLU的主要目的是解决输出小于零时ReLU的梯度为零的问题。
至于ReLU6和hard-Swish,它们是专门为量化网络设计的。
对于神经网络的自归一化,提出了SELU激活函数来满足这一目标。
需要注意的是,Swish和Mish都是连续可微的激活函数。
在基于深度学习的对象检测中,常用的后处理方法是NMS,它可以过滤对同一对象预测不佳的bbox,只保留响应较高的候选bbox。NMS试图改进的方法与优化目标函数的方法是一致的。
NMS提出的原始方法没有考虑上下文信息,因此Girshick等在R-CNN中添加了分类置信度评分作为参考,根据置信度评分的顺序,按照评分由高到低的顺序进行greedy NMS。
对于soft NMS,考虑了在IoU评分的greedy NMS中,对象的遮挡可能导致信任评分下降的问题。DIoU NMS开发者的思路是在软NMS的基础上,将中心点距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法都没有直接引用捕获的图像特征,因此在后续开发无锚方法时不再需要进行后处理。
我们的目标是在输入网络分辨率、卷积层数量、参数数量(滤波器尺寸²滤波器信道/组)和层输出数量(滤波器)之间找到最佳平衡。
下一个目标是选择额外的块来增加感受野,针对不同的detector levels,从不同的backbone levels选择聚合参数的最佳方法。例如:FPN, PAN, ASFF, BiFPN。
分类最佳的参考模型并不总是检测器的最佳模型。与分类器相反,检测器需要以下各项:
假设地说,我们可以假设 应该选择一个具有更大感受野大小(卷积层数量更大,为3×3)和更多参数的模型作为主干。 表1显示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。CSPResNeXt50仅包含16个卷积层3×3、425×425感受野和20.M参数,而CSPDarknet53包含29个卷积层数3×3,725×725感受野以及27.M参数。这一理论证明,再加上我们的大量实验,表明CSPDarknet53神经网络是这两种网络中作为探测器主干的最佳模型。
我们在CSPDarknet53上添加SPP块,因为它显著增加了感受野,分离出了最重要的上下文特征,并且几乎不会降低网络运行速度。我们使用PANet作为不同检测器级别的不同主干级别的参数聚合方法,而不是YOLOv3中使用的FPN。
最后,我们选择CSPDarknet53主干、SPP附加模块、PANet路径聚合颈部和YOLOv3(基于锚的)头部作为YOLOv 4的架构。
为了改进目标检测训练,CNN通常使用以下方法:
至于训练激活函数,由于PReLU和SELU更难训练,而ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除。在重量化方法中,发表DropBlock的人将他们的方法与其他方法进行了详细的比较,他们的正则化方法取得了很多成果。因此,我们毫不犹豫地选择DropBlock作为正则化方法。至于归一化方法的选择,因为我们只关注使用一个GPU的训练策略,所以不考虑syncBN。
为了使所设计的探测器更适合在单个GPU上进行训练,我们进行了以下额外的设计和改进:
Mosaic代表了一种新的数据增强方法,它混合了4幅训练图像。基于现有数据极大的丰富了样本的多样性,极大程度降低了模型对于多样性学习的难度。
自我对抗训练(SAT)也代表了一种新的数据增强技术,分为两个前后阶段。在第一阶段,神经网络改变原始图像,而不是网络权重。通过这种方式,神经网络对自身执行对抗性攻击,改变原始图像,从而产生图像上没有所需对象的欺骗。在第二阶段,训练神经网络以正常方式检测修改后图像上的目标。
CmBN表示CBN修改后的版本,如图4所示,定义为交叉迷你批量规范化(CmBN)。这仅收集单个批次中的小批次之间的统计信息。
我们将SAM从空间关注修改为点关注,并替换PAN到串联的快捷连接,分别如图5和图6所示。
YOLOv4 consists of:
放个传送门:SPP和PAN以后学
YOLO v4 uses:
对论文前面提到的Tricks进行测试,验证是否有效。
我们在ImageNet (ILSVRC 2012 val)数据集上测试了不同训练改进技术对分类器准确性的影响,然后在MS COCO (test-dev 2017)数据集上测试了检测器准确性的影响。
training
首先,研究了不同特征对分类器训练的影响;具体来说,是Class标签平滑的影响,不同数据增强技术、双边模糊、MixUp、CutMix和Mosaic的影响。以及不同激活的影响,如Leaky-ReLU(默认)、Swish和Mish。
通过研究在不影响FPS的情况下提高检测器精度的不同特征,我们显著扩展了BoF列表:
进一步研究了不同的骨干模型对检测器精度的影响,如表6所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最佳的。
最终的结果是骨干CSPDarknet53比CSPResNeXt50更适合于检测器。
我们观察到,由于各种改进,CSPDarknet53模型展示了更大的能力来提高检测器的精度。
最后,我们对不同小批量训练模型的结果进行分析,结果如表7所示。从表7的结果中我们发现,在加入BoF和BoS训练策略后,小批量大小对检测器的性能几乎没有影响。这一结果表明,引入BoF和BoS后,不再需要使用昂贵的gpu进行培训。
剩下的就是同期网络性能对比图了,还有作者对比的数据。(mAP和FPS)
yolov4是一篇很综合的论文,本身也引用了大量的论文,而且论文中很多的内容我还没有学习到。以后会慢慢更新这些未学习的内容!