一、什么是“卷积块”(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
原理:
  • 分解标准卷积为两步:
    1. Depthwise Conv:每个通道独立卷积(不跨通道)
    2. 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 服务器端)决定。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐