即使是目标检测也在近几年开始成熟,竞争依然激烈。如下图所示,YOLOv 4声称在保持高处理帧速率的同时具有最好的精确度。它实现了43.5%AP(65.7%AP₅₀)对MSCOCO的准确性,在TeslaV 100上有大约65 FPS的推理速度。在目标检测中,高精度不再是唯一的追求。我们希望模型能在边缘设备中顺利运行。如何用低成本的硬件实时处理输入视频也变得非常重要。
在YOLOv4中比价有参考价值的是最新技术的评估,以及相关整合,当然它也使YOLOv4更适合在单GPU上进行训练。
Bag of freebies (Bof) & Bag of specials (BoS)
模型精度的提升可以是对数据进行增强,调整数据不平衡,回归函数的选择等等,这些操作都没有改变模型的推断时间,这里我们称之为Bag of freebies。
对于Bag of specials 是对推理时间有轻微的改变,但是可以达到比较好的效果。这操作可以为使用attention机制,特征整合, 例如skip-connections & FPN后处理类似于非最大抑制。在本文中,我们将讨论如何设计特征提取器和颈部,以及所有这些Bof和bos的优点。
Backbone
Dense Block & DenseNet
为了提高精度,我们可以设计一个更深层次的网络来扩展接收域,增加模型的复杂性。为了减轻训练难度,可以采用跳跃连接.我们可以通过高度相互关联的层来进一步扩展这一概念。
每个Dense Block 包含多个卷积层,每层Hi由convolution batch normalization, ReLU组成。Hi不只是使用最后一层的输出,而是将以前所有层的输出以及原始层的输出作为输入。即x₀,x₁,…,xᵢ₋₁.下面的每个Hi输出四个特征图。因此,在每一层,特征图的数量增加了四个--增长率。
然后,通过在由卷积和池组成的过渡层中组成多个密集块,从而形成DenseNet
下面是详细的结构设计。
Cross-Stage-Partial-connections (CSP)
CSPNet将DenseBlock的输入功能映射分为两部分。第一部分x₀'绕过DenseBlock并成为下一个过渡层输入的一部分。第二部分x₀"将被认为Dense block,如下所示。
这种新的设计通过将输入分成两个部分来降低计算复杂度--只有一个通过Dense Block。
CSPDarknet53
YOLOv 4利用上面的CSP连接,下面的Darknet-53作为特征提取的主干.
与基于ResNet的设计相比,CSPDarknet 53模型具有更高的目标检测精度,甚至具有更好的分类性能。但是CSPDarknet 53的分类精度可以通过Mish和其他稍后讨论的技术来提高。因此,YOLOv 4的最终选择是CSPDarknet 53。
Neck
目标检测器由特征提取的主干和用于目标检测的头部(下面最右边的块)组成。为了检测不同尺度下的目标,提出了一种基于头部探测特征图的不同空间分辨率的层次结构。
为了丰富输入头部的信息,从自下而上的流和自顶向下的流中获取的相邻特征映射被添加到元素级或连接在一起,然后再输入头部。因此,头部输入将包含来自自下而上流的空间丰富信息和来自自顶向下流的语义丰富信息。这个系统的这一部分叫做neck。让我们看下更多关于它的细节设计。
Feature Pyramid Networks (FPN)
YOLOv 3采用与FPN类似的方法,在不同的尺度级别上进行对象检测预测。
在对特定规模进行预测时,FPN上采样(2×)先前的自顶向下stream,并将其与自下而上stream的相邻层相加(见下图)。结果被传递到一个3×3卷积滤波器中,以减少过采样,并为头部创建下面的特征图P4。
SPP (spatial pyramid pooling layer)
SPP在检测不同尺度的对象时采用了一种稍微不同的策略。它将最后一个池层(在最后一个卷积层之后)替换为一个空间金字塔池层。特征映射在空间上被划分为m×m bins,分别为m,例如,1,2和4。然后,将最大池应用到每个信道的每个bins中。这形成了一个固定长度的表示法,可以用FC层进一步分析.
许多基于cnn的模型包含fc层,因此,只接受特定尺寸的输入图像.相反,SPP接受不同大小的图像。然而,有些技术,如完全卷积网络(FCN),不包含FC层,并接受不同维度的图像。这种设计对于空间信息非常重要的图像分割特别有用。因此,对于YOLO来说,将二维特征映射转换为固定大小的一维向量并不一定可取.
YOLO with SPP
在YOLO中,SPP被修改以保持输出空间维数。对大小为1×1、5×5、9×9、13×13的sliding kernel添加最大池,保持空间维数。然后将来自不同kernel大小的功能映射concatenated在一起作为输出。
下图表示了如何将SPP集成到YOLO中。
Path Aggregation Network (PAN)
在早期DL中,模型设计相对简单。每个层从前一层接收输入。早期层提取局部纹理和模式信息,以建立后层所需的语义信息。然而,随着我们向正确的方向发展,对预测进行微调所需的本地化信息可能会丢失。
在后来的DL开发中,层间的互连变得越来越复杂。在DenseNet中,它走向了极端。每个层都与以前的所有层相连接。
在FPN中,信息是从自下而上和自上而下stream中的相邻层组合而成.
各层之间的信息流是模型设计中的另一个关键决策。
下图是用于对象检测的路径聚合网络(PAN)。增强了自下而上的路径(B),使低层信息更容易传播到顶部。在FPN中,局部空间信息在红色箭头中向上移动。虽然在图中没有清楚地演示,但是红色路径经过了大约100多个层。PAN引入了一条捷径路径(绿色路径),它只需10层左右就能到达N层的顶部₅层。这种短路概念使上层可以获得精细的局部化信息。
作为注释,颈部设计可以可视化如下:
但是,在YOLOv 4中,功能映射不是添加相邻层,而是连接在一起。
在FPN中,在不同的尺度级别上分别独立地检测对象。这可能会产生重复的预测,而不会利用其他特征地图中的信息。PAN首先使用元素级max操作将所有层的信息融合在一起(我们将跳过 这里的详细信息)。
Spatial Attention Module (SAM)
注意力在DL设计中得到了广泛的应用。在SAM中,最大池化和平均池化分别应用于输入特征映射,以创建两组特征映射。结果被馈送到卷积层,然后是 sigmoid函数,以产生空间注意力。
该空间注意掩码被应用于输入特征以输出精化的特征映射。
在YOLOv 4中,使用修改后的SAM而不应用最大池化和平均池化。
在YOLOv 4中,FPN的概念逐渐被实施/替换为改进的SPP、PAN和PAN。
Bag of Freebies (BoF) for backbone
YOLOv 4骨干的BoF功能包括:
CutMix和Mosaic数据增强 DropBlock regularization Class label smoothing
CutMix数据增强
CutMix数据增强移除图像的一个区域(见下图)。这迫使该模型在制定分类时不要对具体特征过于自信。然而,图像的一部分充满了无用的信息,这是一种浪费。在CutMix中,图像的一部分被剪切和粘贴在另一个图像上.地面真实标签按贴片面积按比例调整,例如0.6像狗,0.4像猫
从概念上讲,CutMix对对象的组成有更广泛的看法。裁剪区域迫使模型学习具有不同特征集的对象分类。这避免了过度自信。由于该区域被另一个图像所取代,图像中的信息量和培训效率也不会受到显著影响。
Mosaic数据增强
马赛克是一种数据增强方法,它将4个训练图像合并为一个训练图像(而不是CutMix中的2个)。这增强了对正常上下文之外的对象的检测。此外,每一小批包含一个大的图像变体(4×),因此,减少了大的小批大小的估计均值和方差的需要。
DropBlock regularization
在完全连接的层,我们可以应用下垂迫使模型学习各种功能,而不是过于自信的少数。然而,这可能不适用于卷积层。相邻位置高度相关。因此,即使一些像素被删除(下面的中间图),空间信息仍然是可检测的。DropBlock正则化建立在一个类似的概念上,在卷积层上工作。
不删除单个像素,而是删除像素块大小×块大小的块
Bag of Specials (BoS) for backbone
Mish activation, Cross-stage partial connections (CSP), Multi-input weighted residual connections (MiWRC)
Mish activation
假设激活函数的形式是
对于一元或二元运算符有不同的函数候选(如余弦函数)。我们可以根据不同的任务(如分类)和数据集对这些函数的选择和相应的模型性能进行随机猜测。最后,我们可以选择一个性能最好的激活函数.
应用强化学习,可以更有效地搜索求解空间。
使用这种方法并进行实验,下面的新的激活函数,称为swish,显示了比relu和许多其他激活函数更好的性能。
Mish是另一个与relu和Swish相似的激活函数。正如论文所宣称的那样,Mish可以在不同数据集的许多深层网络中超越它们。
使用Mish对CSPDarknet 53和探测器,它提高了两个准确性的YOLOv 4。
Multi-input weighted residual connections (MiWRC)
在过去的几年里,研究人员一直在关注哪些特征地图将被输入到一个层中。有时,我们打破了只使用前一层的传统。
现在,如何连接层变得更加重要,特别是对于对象检测器。我们已经讨论了FPN和PAN的例子。下面的图表(D)显示了另一个名为BiFPN的颈部设计,根据BiFPN的论文 ,它具有更好的准确性和效率。
在YOLOv 4中,将其性能与被YOLOv 4认为是最先进的技术之一的EfficientDet进行了比较。所以让我们花点时间研究它。如下图所示,EfficientDet使用EfficientNet作为主干特征提取器,使用BiFPN作为颈。
作为参考,下面的图表是EfficientNet的体系结构,它构建在由倒置的residual block组成的MBConv层上。
正如本文所引用的,倒置residual block 由以下几个部分组成:
The first layer is called a depthwise convolution, it performs lightweight filtering by applying a single convolutional filter per input channel. The second layer is a 1 × 1 convolution, called a pointwise convolution, which is responsible for building new features through computing linear combinations of the input channels.
假设输入的维数为hᵢ×wᵢ×dᵢ。它对每个信道采用k×k-1的dᵢ卷积滤波器.然后将1×1卷积滤波器应用于所有信道,产生hᵢ×wᵢ×dⱼ输出。因此,总的计算复杂度是:
它的主要优点是与传统的卷积层相比,计算量要低得多。
在许多ML和DL问题中,我们学习了输入的低维表示.我们通过创建一个“信息”瓶颈来提取数据的核心信息。这迫使我们发现最重要的信息,这是学习的核心原则。根据这一原理,倒残差块以低维表示作为输入,并对其进行卷积(线性运算)和非线性运算。但是对于像relu这样的非线性部分,有一个主要的问题。非线性操作不成比例地拉伸或压缩区域。在这种压缩中,输入可以映射到相同的区域/点。例如,relu可能会在这个低维空间中折叠通道,并不可避免地丢失信息。如文件所引述:
It is important to remove non-linearities in the narrow layers in order to maintain representational power.
为了解决这个问题,我们可以暂时扩展维度(通道的数量)。希望我们现在有了很多渠道,在一些渠道中,经过非线性运算后,信息仍然可以保存。以下是倒置剩余块的详细信息:
如图所示,低维表示首先扩展到tk信道.然后用3×3深度卷积对其进行滤波。随后,功能将在模块的末尾还原回低维。在高维空间中加入非线性运算
从模块的开始到结束添加残余连接。左边的图是传统的残差块,右边是描述的倒残差块。
理解“效率”的关键概念是很好的。而效率集对YOLOv 4的主要贡献是多输入加权剩余连接。在EfficientDet论文中,它观察到不同的输入特征在不同的分辨率下,它对输出特征的贡献是不相等的。但在我们先前的讨论中,我们同样地增加了这些特性。在EfficientDet中,在组合输出时,输入特性的权重不同,如下所示:
其中wᵢ将像其他可训练的参数一样被训练和学习。
Bag of Freebies (BoF) for detector
YOLOv 4探测器的BOF特性包括:
CIoU-loss, CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training, Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler, Optimal hyperparameters, and Random training shapes