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


代码地址:pytorch-YOLOv4

前言

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

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

笔者在阅读《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的提升则比较小。
在这里插入图片描述
作者Joseph Redmon最近宣布,由于军事和伦理问题,他将停止进行计算机视觉研究……
在这里插入图片描述

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

一、网络结构

在这里插入图片描述
输入图像之后,我们可以看到四个明显的部分:

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

1.1 Backbone(骨干)

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

Dense Block&DenseNet

为了提高准确性,我们可以设计一个更深的网络来扩展感受野并增加模型的复杂性。为了减轻训练难度,可以应用跳跃连接。
在这里插入图片描述
一个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。
在这里插入图片描述

上面是详细的建筑设计。

1.2 Neck(颈)

多尺度特征金字塔

这些是在主干和头部之间的额外层。它们用于提取主干不同阶段的不同特征图。颈部常见的例子如FPN、PANet、Bi-FPN等。在应用中例如,YOLOv3 使用 FPN 从主干中提取不同尺度的特征。
在这里插入图片描述

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

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

PANet

在这里插入图片描述

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

SAM

在这里插入图片描述
另一个技术是空间注意模块 (SAM),注意力机制已广泛用于深度学习,尤其是递归神经网络。它指的是专注于输入的特定部分。如果想了解注意力机制,可以参考《Attention? Attention!》。

SPP Net

在这里插入图片描述
最后,这里还使用了 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 中,修改了 SPP 以保留输出空间维度。最大池应用于大小为 1×1、5×5、9×9、13×13 的滑动内核。空间维度被保留。然后将来自不同内核大小的特征映射连接在一起作为输出。
SPP Net集合到YOLO中过程如下:
在这里插入图片描述

2.2 路径聚合网络(PAN)

在这里插入图片描述

在早期的 DL 中,模型设计相对简单。每一层都从前一层获取输入。早期层提取局部纹理和图案信息,以构建后期层所需的语义信息。然而,随着我们向右移动,微调预测所需的本地化信息可能会丢失。
在这里插入图片描述

在以后的 模型中,层之间的互连变得越来越复杂。在 DenseNet 中,它将各个层之间的关系发挥到了极致,把特征进行了多次融合。每一层都与之前的所有层相连。
在这里插入图片描述
在 FPN 中,信息是从自下而上和自上而下流中的相邻层组合的。层之间的信息流成为模型设计中的另一个关键决策。
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
然而,在 YOLOv4 中,不是将相邻层添加在一起,而是将特征图连接在一起。
在这里插入图片描述
在 FPN 中,对象在不同的​​尺度级别上分别独立地检测。这可能会产生重复的预测,并且不会利用来自其他特征图的信息。PAN 首先使用 element-wise max 操作将所有层的信息融合在一起。

2.2 空间注意模块 (SAM)

在这里插入图片描述

注意力在深度学习设计中被广泛采用。在 SAM 中,Max pooling和average pooling分别应用于输入特征图以创建两组特征图。结果被输入一个卷积层,然后是一个 sigmoid 函数来创建空间注意力。
在这里插入图片描述

该空间注意掩码应用于输入特征以输出细化的特征图。
在这里插入图片描述
在 YOLOv4 中,使用修改后的 SAM 而不应用Max pooling和average pooling,FPN 概念逐渐被实施/替换为修改后的 SPP、PAN 和 PAN。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:原理与源码解析》 【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来! 代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《Windows版YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《Windows版YOLOv4目标检测实战:训练自己的数据集》《Windows版YOLOv4-Tiny目标检测实战:训练自己的数据集》《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》《Windows版YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  
需要学习Windows系统YOLOv4的同学请前往《Windows版YOLOv4目标检测实战:原理与源码解析》,课程链接 https://edu.csdn.net/course/detail/29865【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来!  代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《YOLOv4目标检测实战:训练自己的数据集》《YOLOv4-tiny目标检测实战:训练自己的数据集》《YOLOv4目标检测实战:人脸口罩佩戴检测》《YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湘粤Ian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值