新闻  |   论坛  |   博客  |   在线研讨会
YOLOv4详细分析 | 细数当前最佳检测框架小细节(2)
CV研究院 | 2020-12-30 10:03:23    阅读:876   发布文章

用于骨干部分的 Bag of Specials(BoS)

·  Mish 激活

·  交叉阶段部分连接(CSP)

·  多输入加权的残差连接(MiWRC)

Mish 激活

假设激活函数的形式为:

24.png

其中一元或二元算子有很多不同的候选函数,比如余弦函数。在选用这些函数时,我们可以随机猜测,然后基于不同的任务(比如分类)和数据集来评估对应模型的表现。最终,我们可以选出能让模型表现最好的激活函数。

我们还可以应用强化学习来更高效地搜索解空间。

23.png

使用此方法并进行实验,结果发现了下面这个新激活函数 Swish,其表现优于 ReLU 以及其它许多激活函数。

22.png

具有不同 β 值的 Swish 激活函数

Mish 是另一个与 ReLU 和 Swish 很相似的激活函数。Mish 的论文(arXiv:1908.08681)宣称使用 Mish 的深度网络在许多不同数据集上的表现都更优。

21.png

为 CSPDarknet53 和检测器使用 Mish,YOLOv4 的两个准确度都获得了提升。

多输入加权的残差连接(MiWRC)

过去几年里,研究者很关注应该向网络层输入哪些特征图。有时候,我们会突破仅使用之前一层的传统方法。

现在,更重要的是层的连接方式,尤其是目标检测器中层的连接方式。前面已经讨论过 FPN 和 PAN 示例。下图中的 d 展示了另一种颈部设计 BiFPN,其论文(arXiv:1911.09070)宣称 BiFPN 在准确度与效率的权衡方面表现更好。

20.png

YOLOv4 比较了其与 EfficientDet 的表现,而后者被认为是目前最先进的技术之一。我们来看看这种技术。如下所示,EfficientDet 以 EfficientNet 作骨干,以 BiFPN 为颈部。

19.png

为便参照,下面给出了基于 MBConv 层构建的 EfficientNet 的架构,这些层由反向残差模块组成。

18.png

正如其论文(arXiv:1801.04381)中提到的那样,这种反向残差模块的构成方式为:

第一层称为逐深度卷积,其通过为每个输入通道应用单个卷积过滤器来执行轻量级的过滤。第二层是一个 1×1 卷积,称为逐点卷积,负责通过计算输入通道的线性组合来构建新特征。

假设输入的维度为 hᵢ × wᵢ × dᵢ。则其会应用 dᵢ 个 k × k 的卷积过滤器——每个通道一个。然后其会为所有通道应用 1×1 卷积过滤器,得到大小为 hᵢ × wᵢ × dⱼ 的输出。因此,总计算复杂度为:

17.jpg

其关键优势是所需的计算量比传统卷积层要少得多。

在许多机器学习和深度学习问题中,我们都要学习输入的低维表征。我们会通过创建「信息」瓶颈来提取数据的核心信息。这会迫使我们发现最重要的信息,这正是学习的核心原理。遵循这一原理,反向残差模块以低维表征为输入,然后使用卷积(线性运算)和非线性运算对其进行操作。但是,ReLU 等非线性部分面临着一大问题:非线性运算会不成比例地拉伸或压缩某些区域。在发生这样的压缩时,输入可能会映射到同样的区域 / 点。举个例子,ReLU 可能会将通道折叠进这片低维空间中,从而导致信息不可避免地丢失。正如其论文中写道:

移除窄小层中的非线性特性是很重要的,这样才能维持表征能力。

为了解决这一问题,我们可对维度(通道的数量)进行临时的扩展。我们希望当我们的通道数量较多时,在经过非线性运算之后,信息仍可能保存于某些通道之中。下面给出了反向残差模块的一些细节:

16.png

可以看到,低维表征首先被扩展到了 t_k 个通道。然后,使用轻量的 3 × 3 逐深度卷积对其进行过滤。在该模块的最后,特征又会被约减回低维。当其保持在高维空间中时,就加入非线性运算。

15.png

该模块的起始处和终点之间添加了一个残差连接。下面左图是传统的残差模块,右图是这里描述的反向残差模块。

14.png

理解 EfficientDet 的核心概念是很有趣的。但 EfficientDet 在 YOLOv4 上的主要贡献是多输入加权的残差连接。在 EfficientDet 论文中,可以观察到不同分辨率下不同的输入特征,它们对输出特征的贡献也不相等。但在之前的讨论中,我们无差别地添加了这些特征。在 EfficientDet 中,在构建输出时,输入特征的加权是各不相同的:

13.jpg

其中 wᵢ 的训练和学习方式与其它可训练参数一样。

用于检测器的 Bag of freebies (BoF)

用于 YOLOv4 检测器的 BoF 特征包括:

  • CIoU-loss

  • CmBN

  • DropBlock 正则化

  • Mosaic 数据增强

  • 自对抗训练

  • 消除网格敏感度

  • 为单个基本真值使用多个锚

  • 余弦退火调度器

  • 最优超参数

  • 随机训练形状

CIoU-loss

损失函数能为我们提供如何调整权重以降低成本的信号。所以在预测结果错误时,我们期望其能为我们提供前进的方向。但在使用 IoU 且基本真值框与预测结果不重叠时,这却无法实现。假设有两个预测结果与基本真值都不重叠,则 IoU 损失函数无法确定哪个结果更好——即便其中一个结果可能与基本真值更接近。

12.jpg

Generalized IoU(GIoU)通过将该损失优化为以下形式而解决了这一问题:

11.jpg

但这个损失函数通常会首先扩展其预测边界框,直到其与基本真值区域有重叠。然后它会缩小以增大 IoU。相比于理论上的迭代次数需求,这个过程实际需要更多迭代次数。

首先,引入 Distance-IoU Loss(DIoU):

10.jpg

其引入了一个新的目标以减少两个框的中心点之间的距离。

最后,引入 Complete IoU Loss(CIoU)以便:

  • 增大基本真值框与预测框之间的重叠面积;

  • 最小化它们的中心点之间的距离;

  • 维持框的长宽比的一致性。

其最终定义为:

9.jpg

CmBN

原始的批归一化会收集小批量数据内样本的均值和方差,以白化(whiten)层输入。但是,如果小批量数据规模很小,则这些估计结果将具有很高的噪声。一种解决方案是在许多小批量数据上估计它们。但是,由于每次迭代中权重都会变化,因此在这些权重下收集的统计数据可能会在新的权重下变得不准确。单纯地求平均可能出错。幸运的是,权重的改变是逐渐发生的。交叉迭代批归一化(CBM)使用了以下的调整来基于 k 个之前的迭代估计这些统计数据。

8.jpg7.png

CmBN 是一个经过修改的选项,其仅收集单个批次内小批量数据之间的统计数据。

自对抗训练(SAT)

SAT 是一种数据增强技术。其首先会在训练样本上执行一次前向通过。使用传统方法时,我们会在反向传播过程中调整模型的权重来提升检测器检测图像中目标的能力。但这里所采样的方向却相反。它会修改图像,使其能在最大程度上降低检测器的性能,即创建以当前模型为目标的对抗攻击——即使新图像可能在人眼看来与原来的一样。接下来,使用这张新图像与原始的边界框和类别标签来训练该模型。这有助于提升模型的泛化能力并降低过拟合。

消除网格敏感度

边界框 b 的计算方式为:

6.png

对于 bₓ=cₓ 和 bₓ=cₓ+1 的情况,我们需要 tₓ 分别具有很大的负值和正值。但我们可以将 σ 与一个比例因子(>1.0)相乘,从而更轻松地实现这一目标。以下是对源代码的修改:

5.png

为单个基本真值使用多个锚点

如果 IoU(ground truth, anchor) > IoU threshold,则为单个基本真值使用多个锚点。(注:作者没有更多地说明该方法在 YOLOv4 中的作用。)

余弦退火调度器

余弦调度会根据一个余弦函数来调整学习率。首先,较大的学习率会以较慢的速度减小。然后在中途时,学习的减小速度会变快,最后学习率的减小速度又会变得很慢。

4.png

这张图展示了学习率衰减的方式(下图中还应用了学习率预热)及其对 mAP 的影响。可能看起来并不明显,这种新的调度方法的进展更为稳定,而不是在停滞一段时间后又取得进展。

3.png

余弦学习率 + 预热

使用遗传算法(进化算法)的超参数选择

进化算法是一种有根据的猜测方法。其遵循「适者生存」的概念。举个例子,如果我们随机选择 100 组超参数。然后使用它们训练 100 个模型。之后,我们从中选出表现最好的 10 个模型。对于每个被选中的模型,都根据原始版本创建 10 个超参数略有不同的变体版本。再使用这些新的超参数重新训练模型,再次选出其中表现最好的。随着我们不断迭代,我们应该可以找到超参数的最佳集合。另外,我们也可以一开始使用默认超参数,然后再执行突变。正如其论文(arXiv: 2004.10934)中写道:

遗传算法使用 YOLOv3-SPP,根据 GIoU 损失进行训练,并为 min-val 5k 数据集搜索 300 epoch。我们为遗传算法实验采用了搜索得到的学习率 0.00261、动量 0.949、用于分配基本真值的 IoU 阈值 0.213 以及损失归一化算子 0.07。

随机训练形状

许多单阶段目标检测器都是用固定的输入图像形状进行训练的。为了提升泛化能力,我们可以使用不同的图像大小训练模型。(YOLO 中的多尺度训练。)

用于检测器的 Bag of Specials(BoS)

用于 YOLOv4 检测器的 BoS 特征包括:

  • Mish 激活

  • 修改版 SPP 模块

  • 修改版 SAM 模块

  • 修改版 PAN 路径聚合模块

  • DIoU-NMS

DIoU-NMS

非极大值抑制(NMS)会过滤掉其它预测同一目标的边界框并保留置信度最高的边界框。

2.png

DIoU(前面讨论过)用作 NMS 的一个因子。该方法在抑制冗余的边界框时会使用 IoU 和两个边界框的中心点之间的距离。这能使得模型能更加稳健地应对有遮挡的情况。

评估过的技术

尽管本文介绍的都是已被整合进 YOLOv4 中的技术,但 YOLOv4 也投入了很大努力来评估其它技术。最后,展示一下 YOLOv4 考虑过的技术列表:

1.png

原文链接:https://medium.com/@jonathan_hui/yolov4-c9901eaa8e61

/End.

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客