BottleneckBlock的相关计算

1. 概念

BottleneckBlock - 残差块,应用在ResNet 50/101/102中

1.1 网络结构

bottleneck
瓶颈层即多个网络层的通道数像瓶颈一样,输入channel(通道)从大变小, 再从小变大。上图右侧的才是真正的BottleneckBlock,瓶颈层再加上右侧输入直达输出的shortcut connections。shortcut connections能解决网络训练的时候浅层网络层学习困难的问题。

2. 计算流程

假设输入数据格式为[batch, channel, height, weight]
输入Tensor shape为[64, 256, 13, 13]
流程图

右侧shortcut有两种情况

  • 输入和Conv_2的输出尺寸一致,尺寸与通道一致可直接进行Add运算来实现特征融合。
  • 输入大约是Conv_2的输出的两倍,在shortcut支路对输入进行1x1,步长为2的卷积运算,让输入的尺寸下降到与Conv_2的输出一致,然后再使用Batch Norm。因为使用Add做特征融合需要尺寸和通道数一致。这里尺寸缩减的问题主要在于Conv_2,进行了步长为二的卷积运算,特征图尺寸缩小约为原来的一半。
Conv_0

原图经过Conv_0后,由于进行的是1x1卷积,步长为1,所以输出尺寸不变,通道数下降

Conv_1

Conv_0 结果经过Conv_1,进行3x3卷积,感受野扩大,步长为2,尺寸缩小约为原来一般

Conv_2

Conv_1结果经过Conv_2,进行1x1卷积,输出同样尺寸的特征图,但通道数上升

Conv_shortcut

如果Conv_2尺寸和通道数与input一致,直接将input与Conv_2进行Add特征融合处理。否则调整步长为2,缩小特征图尺寸,与调整滤波器数量,对维度进行调整,保持与Conv_2输出结果Tensor shape一致,最后再进行Batch Norm处理

3. 参数量计算

假设输入格式为C x H x W。
输入尺寸为 192 x 28 x 28, 输出特征图通道为128,直接使用 3 x 3卷积,参数量为 3 x 3 x 192 x 128 = 221184。
当使用BottleneckBlock的时候,先用 1 x 1卷积下降到96个通道,再用3 x 3卷积升维到128个。参数量为1 x 1 x 192 x 96 + 3 x 3 x 96 x 128 = 129024。
能明显看到参数量下降。

4. 总结

该神经网络结构可复用,只需调整计算参数,如滤波器(卷积核)尺寸与数量, 还有滑动窗口的步长(stride),调整到适合你网络的尺寸即可复用。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐