YOLO入门教程(番外):卷积神经网络—图像卷积

卷积神经网络的核心概念

卷积神经网络(CNN)是计算机视觉任务的核心架构,尤其在目标检测模型如YOLO中扮演关键角色。其核心操作是图像卷积,通过局部感知和参数共享高效提取图像特征。

图像卷积的数学原理

卷积操作本质是滤波器(或卷积核)在输入图像上滑动并计算点积。假设输入图像为 $I$,卷积核为 $K$,输出特征图 $S$ 的每个像素值计算如下:

$$
S(i,j) = (I * K)(i,j) = \sum_{m}\sum_{n} I(i+m, j+n) \cdot K(m, n)
$$

其中 $*$ 表示卷积操作,$(i,j)$ 为输出位置,$(m,n)$ 为卷积核的索引。

卷积操作的实现步骤

输入与卷积核的匹配

  • 输入图像通常为三维张量(宽度、高度、通道数),如RGB图像的通道数为3。
  • 卷积核的深度需与输入通道数一致。例如3x3x3的卷积核可处理RGB图像。

滑动窗口计算

  • 卷积核以固定步长(stride)在输入上滑动,每次计算局部区域的加权和。
  • 步长为1时,输出尺寸与输入接近;步长为2时,输出尺寸减半。

填充(Padding)的作用

  • 常用SAME填充(补零)保持输出尺寸不变,或VALID填充(不补零)导致尺寸缩小。
  • 填充宽度 $P$ 的计算公式:
    $$
    P = \frac{(K_{size} - 1)}{2}
    $$
    其中 $K_{size}$ 为卷积核大小(如3x3核的 $K_{size}=3$)。
代码实现示例(Python + PyTorch)
import torch  
import torch.nn as nn  

# 定义输入图像(1张3通道的5x5图像)  
input_tensor = torch.randn(1, 3, 5, 5)  

# 定义卷积层:3输入通道,1输出通道,3x3卷积核,步长1,补零1  
conv_layer = nn.Conv2d(in_channels=3, out_channels=1, kernel_size=3, stride=1, padding=1)  

# 执行卷积  
output = conv_layer(input_tensor)  
print(output.shape)  # 输出形状:[1, 1, 5, 5]  
卷积的直观理解
  • 边缘检测:如使用Sobel核($K_x = \begin{bmatrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \end{bmatrix}$)检测水平边缘。
  • 特征提取:深层卷积核可组合低阶特征(如线条)为高阶特征(如物体轮廓)。
卷积在YOLO中的应用
  • Backbone网络:YOLO的主干网络(如DarkNet)通过堆叠卷积层提取多尺度特征。
  • 下采样(Strided Convolution):替代池化层,减少计算量同时保留空间信息。
常见问题与调优

卷积核大小选择

  • 小核(3x3)适合细节特征,大核(5x5)适合大范围上下文,但计算成本更高。

参数量计算

  • 参数量公式:
    $$
    \text{Params} = (K_{w} \times K_{h} \times C_{in} + 1) \times C_{out}
    $$
    其中 $+1$ 为偏置项,$C_{in}$ 和 $C_{out}$ 为输入/输出通道数。

空洞卷积(Dilated Convolution)

  • 通过间隔采样扩大感受野,适用于分割任务(如YOLOv8的某些变体)。

通过掌握图像卷积的原理与实践,能更深入理解YOLO等目标检测模型的工作机制。

更多推荐