分组卷积(Grouped Convolution)原理与应用详解
卷积太耗算力了,能不能减少计算量?
于是分组卷积(Grouped Convolution)被提出,它并不是为了更强大的表达能力,而是为了在更小的计算量下保持足够的特征提取能力,典型代表正是 AlexNet 和 ResNeXt。
✅ 2. 分组卷积的核心思想
一句话总结:
| 卷积方式 | 输入通道与卷积核关系 |
|---|---|
| 普通卷积 | 每个卷积核对所有输入通道卷积 |
| 分组卷积 | 将输入通道 分成 G 组,各组单独卷积 |
也就是说,它不是在全通道范围做卷积,而是把输入通道拆成几份,每份单独操作,再把结果拼在一起。
✅ 3. 形象类比(10秒记住)
假设你要给 100 本书做分类
普通卷积:一个人拿着 100 本书,一个人完成整个工作
分组卷积(G=4):4个人,每人只负责 25 本,然后最后汇总
好处:速度更快、过程互不干扰
坏处:每组能看到的“信息范围变小”,感受不到其他组特征
✅ 4. 数学原理(非常简单的版本)
设输入通道为 Cin,输出通道为 Cout,组数为 G
| 卷积方式 | 参数量 |
|---|---|
| 普通卷积 | Cout * Cin * K * K |
| 分组卷积 | Cout * (Cin/G) * K * K |
也就是说:
分组卷积的计算量 = 普通卷积的 1/G
当 G=Cin 时,就是我们熟悉的 Depthwise Conv(深度可分离卷积里的第一步)
✅ 5. PyTorch 实现示例
import torch
import torch.nn as nnx = torch.randn(1, 16, 64, 64) # Batch=1, 通道=16, 特征图=64×64conv_group = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1,groups=4 # 设置分组
)y = conv_group(x)
print(y.shape) # torch.Size([1, 32, 64, 64])
只要 groups>1,就是分组卷积。
✅ 6. 分组卷积真正用在哪?
| 代表网络 | 卷积特点 | 引入目的 |
|---|---|---|
| AlexNet | 最早使用 | 降低显存和计算量 |
| ResNeXt | 大量使用 | 指数级提升特征表达同时保持计算低 |
| MobileNet | G = Cin(Depthwise) | 极限压缩卷积计算量 |
一句总结它的价值:
在不明显降低特征能力的情况下,用更少计算量换更高效率
✅ 7. 与标准卷积对比总结
| 对比项 | 普通卷积 | 分组卷积 |
|---|---|---|
| 信息交互 | 全局 | 局部组内 |
| 计算量 | 大 | 低 1/G |
| 特征表达 | 更充分 | 受限但高效 |
| 实际用途 | 精度优先 | 性能优先 |
✅ 8. 小结
分组卷积适用于:
-
网络需要更高运行速度
-
轻量化网络
-
想让网络有更丰富特征子空间(ResNeXt Card)
但不适用于:
-
模型容量极致重要的情况
-
需要通道间高度融合信息的任务
一句收尾:
分组卷积是性能与算力的折中设计,是轻量化网络的关键积木。
