BottleneckBlock的相关计算
1. 概念
BottleneckBlock - 残差块,应用在ResNet 50/101/102中
1.1 网络结构
瓶颈层即多个网络层的通道数像瓶颈一样,输入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),调整到适合你网络的尺寸即可复用。