卷积神经网络(CNN)中等篇:核心进阶与实战技巧
一、经典CNN架构演进
1.1 里程碑网络对比
| 网络名称 | 创新点 | 核心贡献 |
|---|---|---|
| AlexNet | ReLU激活函数、Dropout | 开启深度学习图像分类新时代 |
| VGGNet | 3x3小卷积堆叠 | 证明网络深度的重要性 |
| ResNet | 残差连接(Skip Connection) | 解决深层网络梯度消失问题 |
二、卷积操作扩展
2.1 特殊卷积类型
-
空洞卷积(Dilated Conv):
Feature size=W+2p−d(k−1)−1s+1 Feature\ size = \frac{W + 2p - d(k-1) -1}{s} + 1 Feature size=sW+2p−d(k−1)−1+1
扩大感受野而不增加参数 -
可分离卷积:

显著减少计算量,适合移动端部署
三、注意力机制实践
3.1 SENet结构
class SEBlock(nn.Module):
def __init__(self, channel, ratio=16):
super().__init__()
self.gap = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channel, channel//ratio),
nn.ReLU(),
nn.Linear(channel//ratio, channel),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.gap(x).view(b, c)
y = self.fc(y).view(b, c, 1, 1)
return x * y
四、数据增强与迁移学习
4.1 高级增强策略
transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(0.4, 0.4, 0.4),
transforms.RandomRotation(15),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
4.2 迁移学习代码示例
model = models.resnet50(pretrained=True)
for param in model.parameters():
param.requires_grad = False # 冻结底层参数
model.fc = nn.Sequential( # 修改顶层
nn.Linear(2048, 512),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(512, 10)
)
五、目标检测基础
5.1 两阶段 vs 一阶段
| 类型 | 代表算法 | 特点 |
|---|---|---|
| 两阶段 | Faster R-CNN | 高精度,适合复杂场景 |
| 一阶段 | YOLO系列 | 速度快,适合实时检测 |
六、常见问题FAQ
Q:如何选择卷积核大小?
A:3x3是最常用尺寸,大核适合早期层捕获全局特征
Q:遇到过拟合怎么处理?
A:尝试添加Dropout层、数据增强、正则化或减少网络深度
Q:1x1卷积有什么作用?
A:可用于通道维度降维、增加非线性、跨通道信息整合
Q:如何实现模型轻量化?
A:使用深度可分离卷积、通道剪枝、知识蒸馏等技术
相关标签: #深度学习 #卷积神经网络 #计算机视觉 #PyTorch #目标检测

被折叠的 条评论
为什么被折叠?



