YOLO原理概述

YOLO(You Only Look Once)是一种用于对象检测的深度学习算法。其基本思想是将对象检测问题转换为回归问题,从而能够在单次前向传播中同时预测多个对象的类别和位置。YOLO通过卷积神经网络(CNN)处理图像,实现高效的实时对象检测。

1. 数学原理

1.1 网格划分
将输入图像划分为 ( S ✖️ S ) 的网格。每个网格单元负责检测图像中其中心落在该单元中的对象。

1.2 预测边界框
每个网格单元预测固定数量的边界框(通常为B个)。每个边界框由以下几个参数表示:
• ( (x, y) ):边界框中心相对于网格单元的位置。
• ( w, h ):边界框的宽度和高度,相对于整张图像的归一化值。
• ( C ):边界框中包含对象的置信度,表示为边界框实际包含对象的概率和预测的边界框与实际边界框的重叠度(IoU)的乘积。
每个边界框预测值可以表示为一个5维向量:( (x, y, w, h, C) )。

1.3 预测类概率
每个网格单元还预测C个类别的条件概率:( P(Class_i | Object) )。这些概率表示在当前网格单元中存在对象的情况下,各个类别的概率。

1.4 综合预测
最终的预测结果结合了类别概率和边界框置信度,计算每个类别的最终置信度分数:
P(Class_i) ✖️ C
这给出了在每个边界框中存在特定类别对象的置信度分数。

2. 计算机算法

YOLO的计算机算法实现包括以下几个主要部分:

2.1 定义输入
输入图像被调整为固定大小(如 ( 448 ✖️ 448 )),并归一化到 [0, 1] 范围。

2.2 归一化输入
将输入图像像素值归一化,使得每个像素值在 [0, 1] 之间。
具体数学步骤:
a) 首先计算矩阵中的平均值(μ); b) 计算所有元素与平均值的绝对差;c) 通过将上一步结果中的所有值平方,累加,除以值的数量,然后计算平方根,来计算标准差;d)通过减去平均值并除以标准差,将输入进行层归一化。

2.3 应用卷积
使用多个卷积层提取图像特征。每个卷积层应用卷积核,计算特征图。

2.4 应用最大池化
在卷积层之间应用最大池化层(Max Pooling),以减少特征图的尺寸并保留重要特征。
在特征图的每个通道上滑动定义的窗口,并在每个位置计算窗口内的最大值。这将生成一个新的下采样特征图,其形状取决于窗口大小和步长。具体步骤如下:
%%
2.4.1 定义窗口和步长
假设我们使用一个 2 ✖️ 2 的窗口,步长为 2。
2.4.2 滑动窗口
在每个通道上,从左上角开始,按照步长滑动窗口。每次滑动窗口时,计算窗口内的最大值。
2.4.3 计算最大值
在每个窗口位置,找到该窗口内的最大值。这些最大值组成了下采样后的特征图。 %%

2.5 非线性激活
在每个卷积层之后应用非线性激活函数(如ReLU)以引入非线性,使模型能够表示更复杂的函数。

2.6 展平
将最终的特征图展平成一个一维向量,为全连接层输入做好准备。
%%
2.6.1 输入特征图
假设输入特征图是一个三维张量,形状为 ( (H, W, D) ),其中 ( H ) 是高度,( W ) 是宽度,( D ) 是深度(通道数)。
2.6.2 计算展平后向量的长度
展平后的向量长度等于输入特征图所有元素的总数,可以通过以下公式计算:
\text{Flattened Length} = H \times W \times D
2.6.3 按顺序排列所有元素
将特征图中的所有元素按行优先(Row-major order)或列优先(Column-major order)的顺序排列成一维向量。通常使用行优先顺序,这意味着先遍历特征图的每一行,再遍历每一列,最后遍历每个通道。

示例:

1
2
3
4
5
6
7
8
[
[
[1, 2, 3], [4, 5, 6]
],
[
[7, 8, 9], [10, 11, 12]
]
]

按行优先顺序排列后,展平的结果为:
[1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12]

%%

2.7 投影到输出形状
通过全连接层将展平的特征向量投影到输出形状。输出为一个 ( S ✖️ S ✖️ (B ✖️ 5 + C) ) 的张量,其中B是每个网格单元预测的边界框数量,5表示每个边界框的5个参数( x, y, w, h, C ),C是类别数。

2.8 组成最终推理
通过将边界框参数和类别概率结合起来,组成最终的检测结果。应用非极大值抑制(Non-Maximum Suppression, NMS)来消除冗余边界框,仅保留置信度最高的边界框。

YOLO工作流程总结
1. 输入图像:将图像调整为固定大小并归一化。
2. 特征提取:通过多个卷积层和最大池化层提取图像特征。
3. 非线性激活:应用非线性激活函数。
4. 展平和全连接:将特征图展平并通过全连接层进行预测。
5. 输出预测:生成边界框和类别概率的预测值。
6. 后处理:应用非极大值抑制,得到最终检测结果。
通过这些步骤,YOLO实现了快速且高效的对象检测,在多个应用领域中得到了广泛应用。