深度学习视觉处理基础:卷积神经网络(CNN)详解
在卷积操作的数学表达中,表达式 (f∗g)(i,j)=∑m∑nf(m,n)g(i−m,j−n)(f∗g)(i,j)=∑m∑nf(m,n)g(i−m,j−n) 描述了两个二维函数 ff 和 gg 的卷积。| Max| 保留显著特征| 丢失细节信息| 通用|| Global | 全局上下文| 丢失空间信息| 分类任务|| Avg| 平滑特征响应| 弱化重要特征| 网络末端|
一、卷积神经网络概述

1.1 传统神经网络的局限
参数爆炸:全连接网络处理32x32图像需百万级参数
空间信息丢失:展平操作破坏图像结构
深度限制:难以构建深层网络
1.2 CNN核心优势
局部连接:保留空间信息
权重共享:大幅减少参数量
层次化特征提取:从边缘到语义的渐进学习
1.3 典型应用场景
| 任务类型 | 典型应用 | 网络示例 |
|---------|---------|---------|
| 分类 | ImageNet | ResNet |
| 检测 | 自动驾驶 | YOLO |
| 分割 | 医疗影像 | U-Net |
二、卷积层核心原理

2.1 卷积操作数学表达
在卷积操作的数学表达中,表达式 (f∗g)(i,j)=∑m∑nf(m,n)g(i−m,j−n)(f∗g)(i,j)=∑m∑nf(m,n)g(i−m,j−n) 描述了两个二维函数 ff 和 gg 的卷积。这里的细节如下:
-
卷积定义:
- 卷积 (f∗g)(i,j)(f∗g)(i,j) 是函数 ff 和 gg 在位置 (i,j)(i,j) 的卷积结果。
-
求和范围:
- ∑m∑n∑m∑n 表示对所有的 mm 和 nn 进行求和,这通常意味着我们在某个特定范围内对 ff 和 gg 的值进行加权平均。
-
函数 ff 和 gg:
- f(m,n)f(m,n) 是被卷积的函数,通常是输入图像或信号。
- g(i−m,j−n)g(i−m,j−n) 是卷积核(或滤波器),在卷积过程中进行反转和滑动。
2.2 多通道卷积计算
# 3通道输入,16个3x3卷积核
conv = nn.Conv2d(3, 16, 3)
2.4 特殊卷积类型
# 深度可分离卷积
model = nn.Sequential(
nn.Conv2d(3, 3, 3, groups=3), # 深度卷积
nn.Conv2d(3, 16, 1) # 逐点卷积
)
三、池化层与下采样
3.1 池化操作对比
| 类型 | 优点 | 缺点 | 适用场景 |
|--------|---------------------|---------------|----------------|
| Max | 保留显著特征 | 丢失细节信息 | 通用 |
| Avg | 平滑特征响应 | 弱化重要特征 | 网络末端 |
| Global | 全局上下文 | 丢失空间信息 | 分类任务 |
3.2 池化层实现示例
pool = nn.Sequential(
nn.MaxPool2d(2, stride=2), # 尺寸减半
nn.Dropout(0.25) # 正则化
)
四、经典网络结构解析
4.1 LeNet-5 结构演进
class ImprovedLeNet(nn.Module):
def __init__(self):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(1, 6, 5),
nn.ReLU(),
nn.AvgPool2d(2),
nn.Conv2d(6, 16, 5),
nn.ReLU(),
nn.AvgPool2d(2)
)
self.classifier = nn.Sequential(
nn.Linear(16*5*5, 120),
nn.Linear(120, 84),
nn.Linear(84, 10)
)
4.2 现代网络设计趋势
1. 残差连接(ResNet)
2. 密集连接(DenseNet)
3. 注意力机制(SENet)
4. 轻量化设计(MobileNet)
五、实战:CIFAR10图像分类
5.1 数据预处理
transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
])
5.2 网络训练关键技巧
# 学习率调度
optimizer = optim.Adam(model.parameters(), lr=0.001)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
# 早停机制
best_acc = 0
for epoch in range(100):
train()
acc = validate()
if acc > best_acc:
torch.save(model.state_dict(), 'best.pth')
best_acc = acc
else:
early_stop += 1
if early_stop > 5: break
六、扩展:高级卷积技术
6.1 转置卷积
6.2 空洞卷积
dilated_conv = nn.Conv2d(64, 128, 3, dilation=2)
6.3 注意力卷积
class CBAM(nn.Module):
def __init__(self, channels):
super().__init__()
self.channel_att = ChannelGate(channels)
self.spatial_att = SpatialGate()
def forward(self, x):
x = self.channel_att(x) * x
x = self.spatial_att(x) * x
return x更多推荐



所有评论(0)