卷积神经网络中的7大核心卷积块解析
卷积块是CNN的基本构建单元,通常由卷积层、归一化层和激活函数(如Conv-BN-ReLU)组成。常见结构包括:标准卷积块(VGG)、多分支Inception模块(GoogLeNet)、残差块(ResNet)、密集连接块(DenseNet)以及轻量化的深度可分离卷积(MobileNet)。不同结构通过多尺度特征、残差连接或通道注意力等机制优化特征提取效率。设计时需权衡精度、速度和参数量,根据任务需
一、什么是“卷积块”(Convolutional Block)?
在卷积神经网络(CNN)中,卷积块(Convolutional Block) 是指一组被封装在一起的层,通常以一个或多个卷积层为核心,配合激活函数、归一化层等,构成网络的基本构建单元。
目的:提取局部特征,并通过堆叠多个卷积块逐步提取更高级的语义信息。
二、卷积块的核心组成
一个典型的卷积块通常包含以下组件(顺序可能不同):
| 组件 | 作用 |
|---|---|
|
1. 卷积层(Conv) |
提取空间特征(如边缘、纹理) |
|
2. 归一化层(Normalization) |
稳定训练,加速收敛(如 BatchNorm) |
|
3. 激活函数(Activation) |
引入非线性,增强表达能力(如 ReLU) |
这三者组合构成了最常见的 “Conv-BN-ReLU” 基本单元。
三、常见卷积块结构(按经典模型分类)
1. 标准卷积块(Standard Conv Block)
来自早期 CNN(如 AlexNet、VGG)
Input → Conv2d → BatchNorm2d → ReLU → Output
结构说明:
Conv2d: 卷积操作(如 3×3 kernel, stride=1, padding=1)BatchNorm2d: 对每个通道做归一化ReLU: 激活函数
PyTorch 代码示例:
import torch.nn as nn
class StandardConvBlock(nn.Module):
def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1):
super().__init__()
self.block = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding),
nn.BatchNorm2d(out_channels),
nn.ReLU(inplace=True)
)
def forward(self, x):
return self.block(x)
应用:VGG、Network in Network(NiN)
2. Inception 模块(GoogleNet / Inception)
多分支并行结构,融合不同感受野
Input
├── 1×1 Conv → ReLU
├── 3×3 Conv → ReLU
├── 5×5 Conv → ReLU
└── MaxPool → 1×1 Conv → ReLU
↓
Concatenate → Output
特点:
- 使用 1×1 卷积降维(减少计算量)
- 并行多尺度卷积,捕获不同大小的特征
- 最后沿通道拼接(concat)
关键技巧:
- 1×1 卷积用于“瓶颈层”(bottleneck),降低输入通道数
应用:GoogLeNet、Inception-v3
3. 残差块(Residual Block)—— ResNet
解决深层网络梯度消失问题
类型1:BasicBlock(用于 ResNet-18/34)
Input → Conv3x3 → BN → ReLU → Conv3x3 → BN →
↓ +
└───────────── Shortcut ─────────────┘
↓
ReLU → Output
- Shortcut 是恒等映射或 1×1 卷积升维
- 公式:
output = F(x) + x
类型2:Bottleneck Block(用于 ResNet-50+)
Input → 1×1 Conv (降维) → BN → ReLU
→ 3×3 Conv → BN → ReLU
→ 1×1 Conv (升维) → BN
↓
+ Shortcut
↓
ReLU → Output
- 例如:64 → 16 → 16 → 64(中间压缩)
- 减少参数和计算量
应用:ResNet 系列
4. 密集块(Dense Block)—— DenseNet
每一层都接收前面所有层的输出
Input → [Conv-BN-ReLU] → concat → [Conv-BN-ReLU] → concat → ... → Output
↑_________________________↑ ↑_________________________↑
- 每个卷积层输入 = 原始输入 + 所有前面层的输出(沿通道拼接)
- 公式:
x_l = H_l([x_0, x_1, ..., x_{l-1}])
优点:
- 特征复用性强
- 缓解梯度消失
- 参数更少
应用:DenseNet
5. 深度可分离卷积块(Depthwise Separable Conv)
轻量化设计(MobileNet、Xception)
结构:
Input → Depthwise Conv (3×3, per channel)
→ BN → ReLU
→ Pointwise Conv (1×1, channel mixing)
→ BN → ReLU → Output
原理:
- 分解标准卷积为两步:
- Depthwise Conv:每个通道独立卷积(不跨通道)
- Pointwise Conv:1×1 卷积实现通道融合
优势:
- 大幅减少参数量和计算量
- 适合移动端部署
应用:MobileNetV1/V2/V3、EfficientNet
6. 倒残差块(Inverted Residual Block)—— MobileNetV2
先升维再卷积,再降维
Input → 1×1 Conv (升维, e.g. 6x) → BN → ReLU
→ Depthwise 3×3 Conv → BN → Linear
→ 1×1 Conv (降维, linear) → BN
↓
+ Shortcut
↓
Output
- 使用 ReLU6(上限为6)激活,适合量化
- 中间扩展通道(bottleneck 被“倒置”)
应用:MobileNetV2/V3、EfficientNet
7. Squeeze-and-Excitation Block(SE Block)—— SENet
注意力机制,学习通道权重
Input → Conv Block →
↓
Global Average Pooling
↓
FC → ReLU → FC → Sigmoid (0~1)
↓
Scale Feature Maps (channel-wise multiplication)
↓
Output
- 自动学习每个通道的重要性
- 可插入任何卷积块之后
应用:SE-ResNet、SE-ResNeXt
四、通用卷积块设计模式(模板)
class ConvBlock(nn.Module):
def __init__(self, in_c, out_c, kernel=3, stride=1, padding=1,
activation='relu', norm='bn', use_residual=False):
super().__init__()
layers = [
nn.Conv2d(in_c, out_c, kernel, stride, padding),
]
if norm == 'bn':
layers.append(nn.BatchNorm2d(out_c))
if activation == 'relu':
layers.append(nn.ReLU(inplace=True))
elif activation == 'leaky':
layers.append(nn.LeakyReLU(0.1, inplace=True))
# 可扩展:Dropout、Pool 等
self.block = nn.Sequential(*layers)
# 可选残差连接
self.residual = nn.Identity()
if use_residual and in_c == out_c:
self.residual = nn.Identity()
elif use_residual:
self.residual = nn.Conv2d(in_c, out_c, 1)
def forward(self, x):
return self.block(x) + self.residual(x)
五、总结:常见卷积块对比表
| 块类型 | 核心思想 | 是否有残差 | 参数效率 | 典型用用 |
|---|---|---|---|---|
|
Standard Conv |
基础三件套 |
❌ |
一般 |
VGG |
|
Inception |
多尺度并行 |
❌ |
较高(用1×1降维) |
GoogLeNet |
|
Residual Block |
恒等映射 |
✅ |
高 |
ResNet |
|
Dense Block |
所有层连接 |
✅(密集) |
极高(复用) |
DenseNet |
|
Depthwise Separable |
分解卷积 |
可加 |
极高 |
MobileNet |
|
Inverted Residual |
倒置瓶颈 + 深度可分离 |
✅ |
极高 |
MobileNetV2+ |
|
SE Block |
通道注意力 |
可加 |
低开销 |
SENet |
总结一句话:
卷积块 = 卷积 + 归一化 + 激活 +(可选)残差/注意力/分解结构
不同结构在精度、速度、参数量之间做权衡,选择时应根据任务需求(如移动端 vs 服务器端)决定。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)