系列文章
YOLO系列基础
YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客
YOLO系列正传
YOLO系列正传系列(一)类别损失与MSE损失函数、交叉熵损失函数-CSDN博客
背景
随着YOLOv11版本的发布,YOLO算法在视觉检测领域独领风骚,本系列旨在从小白出发,给大家讲解清楚视觉检测算法的前世今生,并讲清楚YOLOv11版本算法的所有模块功能!
在YOLO系列基础中,我们对所有的基础知识进行了讲解和说明。
在上一篇内容中,我们详解了YOLOv3类别损失函数的相关内容。今天我们正式讲解YOLOv3的相关知识。
从图像金字塔出发
图像金字塔是常用的视觉处理方法。其思路就是简单的图像的多尺度放大or缩小而已。图像金字塔的概念最早由Adelson于1984年提出。它是一种以多分辨率来解释图像的结构,通过梯次向下采样获得一系列分辨率逐步降低的图像集合。这种结构允许我们在不同尺度上处理和分析图像,为许多图像分析任务提供了便利。
图像金字塔主要分为高斯金字塔和拉普拉斯金字塔。
- 高斯金字塔 (Gaussian Pyramid):逐步模糊图像并下采样,提取低频信息。
- 拉普拉斯金字塔 (Laplacian Pyramid):通过高斯金字塔的差分计算高频信息。
1. 高斯金字塔
高斯金字塔是对图像进行高斯滤波和降采样得到的一系列图像集合。每一层图像都是通过对前一层图像进行高斯滤波和降采样得到的,层数越高,图像越小,分辨率越低。
高斯金字塔的构建过程:
- 对原始图像进行高斯滤波,得到一个平滑后的图像。
- 对平滑后的图像进行降采样,得到下一层图像。
- 重复上述过程,直到达到某个终止条件。
一个简单的高斯金字塔可以表示为:
其中 是第 i 层图像,GaussianBlur 是高斯滤波器,Downsample 是下采样操作。
(1) 高斯核定义
高斯滤波器是一种平滑滤波器,其二维核函数为:
其中:
- 、 是像素点相对于滤波器中心的横纵坐标;
- 是标准差,控制高斯核的模糊程度。
例如,使用 3×3 的高斯核(σ = 1)时,其核矩阵可以写为:
(2) 卷积操作
假设输入图像为 ,滤波后的图像 的计算公式为二维卷积:
其中:
- 为高斯核的一半尺寸(例如 3×3 核时,k=1);
- 是邻域中的像素坐标;
- 是对应的高斯权重。
(3) 下采样公式
将滤波后的图像下采样到分辨率的 1/2,操作为每隔一个像素取样:
(4) 示例过程
- 对原始图像 使用高斯核 卷积,平滑图像。
- 选取每隔一个像素点的值,形成分辨率为原图 1/2 的金字塔下一层。
图例如下:
图片来自:https://pic4.zhimg.com/v2-8c6640fe15ab1ecd253a4c06d3b40ddf_b.jpg
注意:请不要被图例中逐渐变大迷惑了,并没有逐渐变大,高斯卷积核是不变的嗷。这里的原图作者的意思是和最下层的图片相比较越上层的图片是由最下层的图片用更大的卷积核得来的。
高斯金字塔的真正的生成过程如本文所述。
2. 拉普拉斯金字塔
拉普拉斯金字塔用于存储高斯金字塔中每一层图像与其上一层图像通过上采样和滤波后得到的图像之间的差异。这种差异反映了图像在不同尺度上的变化信息。拉普拉斯金字塔的构建过程如下:
- 对高斯金字塔中的每一层图像进行上采样和滤波。
- 计算上采样后的图像与原始图像之间的差异。
- 将差异图像作为拉普拉斯金字塔的对应层。
(1) 上采样公式
将低分辨率图像 通过上采样恢复为原分辨率。上采样的数学表达为:
(2) 高斯平滑
为避免上采样带来的锯齿效应,对上采样后的图像再次进行高斯滤波:
(3) 差分计算
将原始高分辨率图像减去上采样后平滑的低分辨率图像,得到高频信息:
图例(拉普拉斯金字塔的构建过程):
拉普拉斯金字塔就是图中黑色部分
图片来源:https://pic2.zhimg.com/v2-3bda496534fdd5de381a35166514c621_r.jpg
FPN特征金字塔
在现代深度学习框架中,直接使用传统的图像金字塔会带来巨大的计算开销。因此,FPN 提出了特征金字塔的概念,通过整合 CNN 提取的多层特征图,构造高效的多尺度特征。
FPN 的核心思想是构建一个 多尺度的特征表示,结合不同分辨率下的特征图,实现跨尺度目标检测与分割。
FPN 的核心结构包括:
- 自底向上路径 (Bottom-Up Pathway):主干网络提取的多层特征。
- 自顶向下路径 (Top-Down Pathway):逐步上采样并融合高层语义特征。
- 横向连接 (Lateral Connections):将低层特征和高层语义特征结合。
图片来自:https://pica.zhimg.com/v2-cfca8eaeff7b8e52202f9f39c68dd90e_1440w.jpg
(1) 自底向上的特征提取
主干网络(如 ResNet)逐层下采样生成特征图 {C2,C3,C4,C5},其分辨率分别为原始图像的 。
(2) 自顶向下的特征融合
从最高层特征 C5 开始,通过上采样逐步向低层传播,公式如下:
其中:
- :将上一层 上采样到当前分辨率;
- :通过 1×1 卷积减少通道数,便于融合。
(3) 最终输出特征
为消除融合过程中的噪声,使用 3×3 卷积对特征图进行平滑:
干货环节
一言以蔽之,在视觉检测领域,有时候我们需要检测的物体大小往往不相同。在当时,先进的视觉检测算法,采用多锚框设计思路。通过先验锚框的设定来对不同尺度物体的检测进行优化。但是锚框虽然在一定程度上改善了此问题,但是锚框的原理和作用是用于更快的拟合模型,而不是对最终的识别效果进行改善。
也就是说最根本的问题没有解决:即不同大小的待测物体需要使用不同维度尺度的特征。简单说,一个大物体的检测,一些细节就根本不需要,我们可以把原图片进行卷积、池化操作到13*13的特征图片都能识别其中内容,而一些细小物体的检测,我们要是缩小到13*13像素大小,那就是根本毛都不剩一点,相关特征信息早就在网络中丢失了。
所以我们需要设立多头检测思路:
- 小目标用低层特征
- 大目标用高层特征
Darknet-53网络
论文详解
Darknet-53 是 YOLOv3 的主干网络,主要用来提取特征。它的结构灵感来源于 ResNet,通过残差连接加深网络深度,同时保持较低的计算开销。一下是YOLOv3论文中的模型结构图:
Darknet-53 的基本组件包括以下几部分:
卷积层 (Convolution)
- 卷积核大小为 或 。
- 每个卷积层后接 Batch Normalization 和 Leaky ReLU 激活函数。
- 激活函数公式:
其中 。
残差模块 (Residual Block)
- 包含两个卷积层:
- 卷积用于减少通道数。
- 卷积用于空间特征提取。
- 残差连接公式:
Darknet-53 特点
足够深:足足有53 层卷积。
足够高效:由于大量使用 卷积和残差连接,其计算复杂度较低。
darknet-53分类网络
在 YOLOv3 论文中,Darknet-53 本质上是一个用于特征提取的分类网络。当用于分类任务时,我使用如下分类头:
- 特征图提取:darknet-53主干网络输出一个全局特征图。
- 全局平均池化:将特征图进行全局池化得到一个向量。
- 全连接层:通过全连接层得到分类结果。
分类网络输出的公式为:
其中, 是特征向量, 和 是分类层的权重和偏置。
darknet-53分类模型图入如下:
darknet-53检测网络
检测网络是 YOLOv3 的核心部分,主要由 检测头 实现多尺度目标预测。其关键特点是直接在不同尺度的特征图上进行预测,确保能检测从小到大的目标。
先给出darknet-53的检测网络示意图:
YOLOv3 在主干网络的基础上,使用三层特征图分别进行检测:
- :捕获大目标;
- :捕获中等目标;
- :捕获小目标。
通过从深层特征图逐步上采样并融合浅层特征,实现多尺度特征表达。
三个检测头实际图例如下:
蓝色为先验锚框、黄色为真值。红色为中心点。显然对于图示的狗最合适的检测头是13*13size的检测头
检测头的具体设计
(1) Anchor 机制
每个特征图上的每个单元格对应 3 个 Anchor,用于预测不同尺度的目标框。Anchor 的宽高已在训练前固定。
假设输入图像尺寸为 416×416 ,每个单元格预测以下信息:
- 边界框偏移量:
- 检测置信度:
- 类别概率:
边界框的位置计算公式为:
其中:
- 为单元格左上角的坐标;
- 为 Anchor 的宽高;
- 和 将偏移量归一化到 [0,1]。
(2) 多尺度预测:
每个单元格预测 3 个框,每个框输出 (4+1+C)个值:
- 4 个坐标偏移量
- 1 个置信度
- C 个类别概率
总结
综上,我们完成了YOLOv3的原理初探,从图像金字塔到FPN特征金字塔,再到YOLOv3的相关原理与网络结构,以及公式推导。我们对YOLOv3的原理有了一个较为清晰的认知。
本文虽然在YOLO系列中起承上启下的作用,本身的创新性并没有那么高,但是依旧需要具备深入的视觉基础知识。实际上,博主光是准备此篇博客就花费了整整三天的时间。恳请广大读者不要吝啬手中的点赞哦!