深度学习入门:YOLO图像卷积全解析,docker单机部署hadoop 官方镜像3.3.6 过程问题记录。
·
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等目标检测模型的工作机制。
更多推荐
所有评论(0)