YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)

文章目录

  • 前言
  • 背景
  • 一、网络结构
    • 1.1 Backbone(骨干)
      • Dense Block&DenseNet
    • 1.2 Neck(颈)
      • 多尺度特征金字塔
      • PANet
      • SAM
      • SPP Net
  • 二、YOLOv4的改进方法
    • 2.1 带上SPP Net
    • 2.2 路径聚合网络(PAN)
    • 2.2 空间注意模块 (SAM)


代码地址:pytorch-YOLOv4

前言

我在入门学习计算机视觉的时候,看一些经典的论文原文比较吃力。于是通过看各种参考文献及查阅各路资料,入门的角度写了一些博客,希望能够和大家一起进步。

在上三篇文章中介绍过YOLOv1,YOLOv2及YOLOv3,地址如下:

  • 【建议先读】《YOLO 超详细入门(含开源代码)——网络结构、细节、目标损失函数、优点》
  • 【建议先读】《YOLO超详细入门02 零基础看懂 图文详解(含代码及原文)——网络架构,BN,高分辨率,细粒度特征,多尺度训练,Anchor Box,维度聚类,直接位置预测,输出特点,YOLO9000》
  • 【建议先读】《YOLO超详细入门 03 v3 图文详解(含代码+原文)》

笔者在阅读《Scaled-YOLOv4: Scaling Cross Stage Partial Network》原文后,根据自身理解及查阅资料,以入门角度尽可能想要还原论文细节,水平有限,欢迎交流。

背景

YOLO属于one-stage(单阶段检验),其检测速度远超当时作为主流目标检测算法的R-CNN系列(two-stage),但也牺牲了部分准确率。作者將region proposal创造性地,巧妙地转化为回归分析问题,也就是将挑选region proposal的问题也丢到model內,让model也帮忙预测bounding box。
YOLOv2对YOLOv1的提升很大,作者称其为Better(准确度提升),Faster(速度提升),Stronger(识别种类提升)。YOLOv3的提升则比较小。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第1张图片
作者Joseph Redmon最近宣布,由于军事和伦理问题,他将停止进行计算机视觉研究……
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第2张图片

于是Alexey Bochkovskiy接过大棒,开始了YOLOv4的研究,而当时YOLOv4也被认为是目标检测中具有最佳速度和准确性的模型。

一、网络结构

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第3张图片
输入图像之后,我们可以看到四个明显的部分:

  • Backbone
  • Neck
  • Dense Prediction(密集预测):用于单阶段检测算法,如 YOLO、SSD 等。
  • Sparse Prediction(稀疏预测):用于两阶段检测算法,如 Faster-R-CNN 等。

1.1 Backbone(骨干)

ResNet、DenseNet、VGG等模型被用作特征提取器。它们在图像分类数据集(如 ImageNet)上进行了预训练,然后在检测数据集上进行了微调。事实证明,随着网络变得更深(更多层)产生具有更高语义的不同级别特征的这些网络对于目标检测网络的后期部分很有用。

Dense Block&DenseNet

为了提高准确性,我们可以设计一个更深的网络来扩展感受野并增加模型的复杂性。为了减轻训练难度,可以应用跳跃连接。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第4张图片
一个Dense Block包含多个卷积层,每个层 H i Hi Hi由batch normalization(批归一化)、ReLU 和卷积组成。 H i Hi Hi不是仅使用最后一层的输出,而是将所有先前层的输出以及原始层的输出作为其输入。即 x 0 、 x 1 、 … x ₀ 、x ₁ 、… x0x1 x i − 1 x_{i-1} xi1。下面的每个 H i Hi Hi输出四个特征图。因此,在每一层,特征图的数量增加了四倍,也就是网络的增长率。
在这里插入图片描述
然后可以通过在由卷积和池化组成的过渡层之间组合多个 Dense Block 来形成 DenseNet。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第5张图片

上面是详细的建筑设计。

1.2 Neck(颈)

多尺度特征金字塔

这些是在主干和头部之间的额外层。它们用于提取主干不同阶段的不同特征图。颈部常见的例子如FPN、PANet、Bi-FPN等。在应用中例如,YOLOv3 使用 FPN 从主干中提取不同尺度的特征。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第6张图片

多尺度特征金字塔
在对特定比例进行预测时,FPN 对前一个自上而下的流进行上采样(2 倍),并将其与自下而上的流的相邻层相加(见下图)。结果被传递到 3×3 卷积滤波器以减少上采样伪影并为头部创建下面的特征图 P4。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ebe200f9e9934ec287312d8244cea963.jpeg#pic_center)

对提取不同尺度的特征感兴趣,可以参考《YOLO超详细入门 03 v3 图文详解(含代码+原文)》

PANet

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第7张图片

而YOLOv4中并没有使用多尺度特征金字塔,而是使用PANet(路径聚合网络)的修改版本,目的同样是为了信息融合以获得更高的准确性。

SAM

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第8张图片
另一个技术是空间注意模块 (SAM),注意力机制已广泛用于深度学习,尤其是递归神经网络。它指的是专注于输入的特定部分。如果想了解注意力机制,可以参考《Attention? Attention!》。

SPP Net

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第9张图片
最后,这里还使用了 R-CNN 网络和许多其他算法中使用的空间金字塔池化 (SPP Net) 。如果想了解SPPnet,可以参考《Faster RCNN超详细入门 01-准备篇-背景 RCNN,SPPnet,Fast RCNN,RoI Pooling》。
SPP 在检测不同尺度的对象时采用了稍微不同的策略。它将最后一个池化层(在最后一个卷积层之后)替换为空间金字塔池化层。特征图在空间上被划分为 m × m m × m m×m 个bin,其中m分别等于 1、2 和 4。然后将最大池应用于每个通道的每个 bin。这形成了一个固定长度的表示,可以用 FC 层进一步分析。
许多基于 CNN 的模型包含 FC 层,因此只接受特定尺寸的输入图像。相比之下,SPP 接受不同大小的图像。

二、YOLOv4的改进方法

2.1 带上SPP Net

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第10张图片

在 YOLO 中,修改了 SPP 以保留输出空间维度。最大池应用于大小为 1×1、5×5、9×9、13×13 的滑动内核。空间维度被保留。然后将来自不同内核大小的特征映射连接在一起作为输出。
SPP Net集合到YOLO中过程如下:
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第11张图片

2.2 路径聚合网络(PAN)

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第12张图片

在早期的 DL 中,模型设计相对简单。每一层都从前一层获取输入。早期层提取局部纹理和图案信息,以构建后期层所需的语义信息。然而,随着我们向右移动,微调预测所需的本地化信息可能会丢失。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第13张图片

在以后的 模型中,层之间的互连变得越来越复杂。在 DenseNet 中,它将各个层之间的关系发挥到了极致,把特征进行了多次融合。每一层都与之前的所有层相连。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第14张图片
在 FPN 中,信息是从自下而上和自上而下流中的相邻层组合的。层之间的信息流成为模型设计中的另一个关键决策。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第15张图片
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第16张图片

上图是用于对象检测的路径聚合网络 (PAN)。自下而上的路径 (b) 被增强以使低层信息更容易传播到顶部。在 FPN 中,局部空间信息在红色箭头中向上传播。虽然图中没有清楚地展示,但红色路径经过了大约 100 多个层。PAN 引入了一条捷径(绿色路径),只需大约 10 层即可到达顶部 N₅ 层。这种短路概念使顶层可以使用细粒度的本地化信息。

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第17张图片
然而,在 YOLOv4 中,不是将相邻层添加在一起,而是将特征图连接在一起。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第18张图片
在 FPN 中,对象在不同的​​尺度级别上分别独立地检测。这可能会产生重复的预测,并且不会利用来自其他特征图的信息。PAN 首先使用 element-wise max 操作将所有层的信息融合在一起。

2.2 空间注意模块 (SAM)

YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第19张图片

注意力在深度学习设计中被广泛采用。在 SAM 中,Max pooling和average pooling分别应用于输入特征图以创建两组特征图。结果被输入一个卷积层,然后是一个 sigmoid 函数来创建空间注意力。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第20张图片

该空间注意掩码应用于输入特征以输出细化的特征图。
YOLO 图文入门 04 v4 PAN,SAM(含代码+原文)_第21张图片
在 YOLOv4 中,使用修改后的 SAM 而不应用Max pooling和average pooling,FPN 概念逐渐被实施/替换为修改后的 SPP、PAN 和 PAN。

你可能感兴趣的:(目标检测,计算机视觉)