CNN:卷积网络中设计1×1夹在主要卷积核如3×3前后的作用
话不多说直接上图举例:
像在 ResNet 的 Bottleneck 结构 中,1x1 卷积 被放置在 3x3 卷积 的前后,这种设计有以下几个关键作用和优势:
1. 降低计算复杂度
- 问题:直接使用 3x3 卷积计算量较大,尤其是当输入和输出通道数较多时。
- 解决方案:
- 在 3x3 卷积之前,使用 1x1 卷积将输入通道数减少(通常减少到原来的 1/4)。
- 在 3x3 卷积之后,使用 1x1 卷积将通道数恢复到目标输出通道数。
- 效果:
- 通过减少中间特征图的通道数,显著降低了 3x3 卷积的计算量。
2. 减少参数量
- 问题:3x3 卷积的参数量与输入和输出通道数成正比,当通道数较多时,参数量会非常大。
- 解决方案:
- 使用 1x1 卷积先减少通道数,再使用 3x3 卷积,最后恢复通道数。
- 效果:
- 这种设计可以大幅减少参数量,从而降低模型的存储需求和过拟合风险。
3. 跨通道信息融合
- 问题:3x3 卷积主要关注局部空间特征,对跨通道信息的融合能力有限。
- 解决方案:
- 1x1 卷积可以在不改变空间尺寸的情况下,对通道维度进行线性组合,从而实现跨通道信息融合。
- 效果:
- 增强了特征的表达能力。
4. 非线性增强
- 问题:单纯的 3x3 卷积只能提取线性特征。
- 解决方案:
- 在 1x1 卷积和 3x3 卷积之间加入非线性激活函数(如 ReLU)。
- 效果:
- 引入了更多的非线性,增强了模型的表达能力。
5. Bottleneck 结构的具体设计
Bottleneck 结构通常由以下三部分组成:
-
1x1 卷积(降维):
- 输入通道数: C i n C_{in} Cin
- 输出通道数: C m i d = C i n / 4 C_{mid} = C_{in} / 4 Cmid=Cin/4
- 作用:减少通道数,降低计算量。
-
3x3 卷积(空间特征提取):
- 输入通道数: C m i d C_{mid} Cmid
- 输出通道数: C m i d C_{mid} Cmid
- 作用:提取局部空间特征。
-
1x1 卷积(升维):
- 输入通道数: C m i d C_{mid} Cmid
- 输出通道数: C o u t C_{out} Cout
- 作用:恢复通道数,完成特征变换。
6. 计算量对比
假设:
- 输入特征图尺寸: H × W × C i n H \times W \times C_{in} H×W×Cin
- 输出特征图尺寸: H × W × C o u t H \times W \times C_{out} H×W×Cout
- 3x3 卷积核尺寸: 3 × 3 × C i n × C o u t 3 \times 3 \times C_{in} \times C_{out} 3×3×Cin×Cout
- Bottleneck 结构:
- 第一个 1x1 卷积: 1 × 1 × C i n × C m i d 1 \times 1 \times C_{in} \times C_{mid} 1×1×Cin×Cmid
- 3x3 卷积: 3 × 3 × C m i d × C m i d 3 \times 3 \times C_{mid} \times C_{mid} 3×3×Cmid×Cmid
- 第二个 1x1 卷积: 1 × 1 × C m i d × C o u t 1 \times 1 \times C_{mid} \times C_{out} 1×1×Cmid×Cout
计算量对比:
- 直接使用 3x3 卷积的计算量:
H × W × C i n × C o u t × 3 × 3 H \times W \times C_{in} \times C_{out} \times 3 \times 3 H×W×Cin×Cout×3×3 - Bottleneck 结构的计算量:
H × W × C i n × C m i d × 1 × 1 + H × W × C m i d × C m i d × 3 × 3 + H × W × C m i d × C o u t × 1 × 1 H \times W \times C_{in} \times C_{mid} \times 1 \times 1 + H \times W \times C_{mid} \times C_{mid} \times 3 \times 3 + H \times W \times C_{mid} \times C_{out} \times 1 \times 1 H×W×Cin×Cmid×1×1+H×W×Cmid×Cmid×3×3+H×W×Cmid×Cout×1×1
通常 C m i d = C i n / 4 C_{mid} = C_{in} / 4 Cmid=Cin/4,因此 Bottleneck 结构的计算量远小于直接使用 3x3 卷积。
7. 总结
Bottleneck 结构中 1x1 卷积的作用:
- 降低计算复杂度和参数量。
- 实现跨通道信息融合。
- 增强非线性表达能力。
这种设计使得 ResNet 可以更高效地训练更深的网络,同时保持较强的特征提取能力。