万字长文解析Scaled YOLOv4模型(YOLO变体模型)


  • 文章。

    \(FLOPs=(C_i\times K^2)\times H\times W\times C_o\)

    对于上面说的那个特殊的 bottleneck conv block 来说,卷积过程特征图大小没有发生变化,假设特征图大小为 \(wh\),所以 bolckFLOPs 为:

    \[\begin{align*} r1 &= (b \times 1^2\times \frac{b}{4} + \frac{b}{4} \times 3^2\times \frac{b}{4} + \frac{b}{4} \times 1^2\times b)\times hw \\\\ &= \frac{17}{16}whb^2 \end{align*}\]

    这里值得注意的是,虽然各个 conv block 会略有不同,比如 每个 conv stage 的第一个 conv block 都会将特征图缩小一倍,但是其 FLOPs\(r1\) 是线性的关系,所以,对于有 \(k\)conv blockResNet 来说,其总的计算量自然就可大概近似为 \(17whkb^2/16\)ResNeXtDarknet 卷积层的 FLOPs 计算过程类似,所以不再描述。

    由表 1 可以看出,图像大小、深度和宽度都会导致计算代价的增加,它们分别成二次,线性,二次增长

    Wang 等人提出的 CSPNet 可以应用于各种 CNN 架构,同时减少了参数和计算量。此外,它还提高了准确性,减少了推理时间。作者把它应用到 ResNet, ResNeXt,DarkNet 后,发现计算量的变化如表 2 所示。

    CNN 转换为 CSPNet 后,新的体系结构可以有效地减少 ResNetResNeXtDarknet 的计算量(FLOPs),分别减少了 23.5%46.7%50.0%。因此,作者使用 CSP-ized 模型作为执行模型缩放的最佳模型

    3.2,为低端设备缩放的tiny模型

    对于低端设备,设计模型的推理速度不仅受到计算量和模型大小的影响,更重要的是必须考虑外围硬件资源的限制。因此,在执行 tiny 模型缩放时,我们必须考虑以下因素:内存带宽、内存访问代价(MACs)和 DRAM traffic。为了考虑到以上因素,我们的设计必须遵循以下原则:

    1,使计算复杂度少于 \(O(whkb^2)\)

    作者分析了高效利用参数的网络:DenseNetOSANet 的计算量,分别为 \(O(whgbk)\)\(O(max(whbg, whkg^2))\)。两者的计算复杂度阶数均小于 ResNet 系列的 \(O(whkb^2)\)。因此,我们基于 OSANet 设计 tiny 模型,因为它具有更小的计算复杂度。

    这里的 OSANet 其实是 VoVNet 网络,专门为 GPU 平台设计的更高效的 backbone 网络架,其论文解读可参考我之前写的文章。

    2,最小化/平衡 feature map 的大小

    说实话,没看明白论文这段内容,这不是跟论文 CSPNet 一样的结论吗,即分割为通道数相等的两条路径。

    为了获得在计算速度方面的最佳平衡,我们提出了一个新概念:在CSPOSANet 的计算块之间执行梯度截断。如果我们将原来的 CSPNet 设计应用到 DenseNetResNet 架构上,由于这两种架构的第 \(j\) 层输出是第 \(1^{st}\) 层到第 \((j-1)^{th}\) 层输出的积分,我们必须将整个计算块作为一个整体来处理。由于 OSANet 的计算块属于 PlainNet 架构,从计算块的任意层制作 CSPNet 都可以达到梯度截断的效果。我们利用该特性对基层的 \(b\) 通道和计算块(computational block)生成的 \(kg\) 通道进行重新规划,并将其分割为通道数相等的两条路径,如表 4 所示。

    当通道数量为 \(b + kg\) 时,如果要将这些通道分割成两条路径,最好将其分割成相等的两部分,即 \((b + kg)/2\)

    3,在卷积后保持相同的通道数

    评估低端设备的计算成本,必须考虑功耗,而影响功耗的最大因素是内存访问代价(\(MAC\))。根据 Shufflenetv2 的推导证明,可知卷积层的输入输出通道数相等时,即 \(C_{in} = C_{out}\) 时, \(MAC\) 最小。

    4,最小化卷积输入/输出(CIO)

    CIO 是一个可以测量 DRAM IO 状态的指标。表 5 列出了 OSACSP 和我们设计的 CSPOSANetCIO。当 \(kg > \frac {b}{2}\) 时,CSPOSANet 可以获得最佳的 CIO

    3.3,为高端设备缩放的Large模型

    feature pyramid network (FPN)的架构告诉我们,更高的 stage 更适合预测大的物体。表 7 说明了感受野与几个参数之间的关系。

    从表 7 可以看出,宽度缩放可以独立操作。当输入图像尺寸增大时,要想对大对象有更好的预测效果,就必须增大网络的 depthstage (一般每个 stage 都会降低特征图分辨率的一半)的数量。在表 7 中列出的参数中,\(\left \{ size^{input}, \#stage \right \}\) 的组合效果最好。因此,当执行缩放时,我们首先在 \(\left \{ size^{input} \right \}\)#stage 上执行复合缩放,然后根据实时的环境,我们再分别进一步缩放深度 depth 和宽度 width

    4,Scaled-YOLOv4

    4.1,CSP-ized YOLOv4

    YOLOv4 是为通用 GPU 上的实时目标检测而设计的。

    1,Backbone

    为了获得更好的速度/精度权衡,我们将第一个 CSP 阶段转换为原始的 DarkNet 的残差层。

    没能理解这段内容。

    2,Neck

    3,SPP

    4.2,YOLOv4-tiny

    YOLOv4-tiny 是为低端 GPU 设备设计的,设计将遵循 3.2 节中提到的原则。

    我们将使用 PCBpartial in computational block) 架构的 CSPOSANet 作为 YOLOv4 backbone。我们设 \(g = b/2\) 为增长率,最终使其增长到 \(b/2 + kg = 2b\)。通过计算,我们得到 \(k = 3\)YOLOv4 的卷积块(computational block)结构如图 3 所示。对于每个阶段的通道数量和 neck 网络结构,我们采用 YOLOv3-tiny 一样的设计。

    4.3,YOLOv4-large

    专门为云端 GPU 设计的,主要目的就是为实现高精度的目标检测。我们设计了一个完全 CSP 化的模型 YOLOv4-P5,并将其扩展到 YOLOv4-P6YOLOv4-P7Sacled-YOLOv4 large 版本的模型结构图,如下图所示。

    我们通过设计 \(size^{input}\), #stage 来对 backbone 执行复合缩放。我们把每个 stage 的深度设置为 \(2^{d_{s_{i}}}\)\(d_s\) 范围为 \([1, 3, 15, 15, 7, 7, 7]\)。与之前的 ResNet 的卷积划分为 4stage 不同,这里最多划分为 7stageYOLOv4-P7)。

    5,实验

    与其他实时目标检测检测器进行比较,对比实验结果如表 11 所示。

    总结

    通篇论文看下来,感觉这篇论文最主要的贡献在于通过简单的理论分析和对比实验,验证了模型缩放的原则,进一步拓展了 CSPNet 方法,并基于此设计了一个全新的 Scaled-YOLOv4。个人感觉就是针对不同的 GPU 平台,可以根据作者分析出来的模型缩放理论且符合其他一些原则的情况下,通过选择不同的模型宽度和深度参数,让模型更深更宽。

    anchor-free 的方法,如 centernet 是不需要复杂的后处理,如 NMSBackbone 模型的宽度、深度、模块的瓶颈比(bottleneck)、输入图像分辨率等参数的关系。

    Reference

    [43] Sergey Zagoruyko and Nikos Komodakis. Wide residualnet works. arXiv preprint arXiv:1605.07146, 2016.

    参考资料

    • Scaled-YOLOv4: Scaling Cross Stage Partial Network
    • Scaled-YOLOv4: Scaling Cross Stage Partial Network 论文翻译