卷积加速 Bottleneck Layers
ref:https://blog.csdn.net/kobbbb/article/details/89741210
Bottleneck,瓶颈,顾名思义,输入和输出通道数保持,但是在中间进行卷积时,将通道数缩小从而达到减少参数的目的,可以看一下下面这段Keras代码
from keras.layers import Conv2D
# given that conv1 has shape (None, N, N, 128)
conv2 = Conv2D(96, (1, 1), ...)(conv1) # squeeze
conv3 = Conv2D(96, (3, 3), ...)(conv2) # map
conv4 = Conv2D(128, (1, 1), ...)(conv3) # expand
如果直接通过一个12833的卷积层,那么需要的参数个数是12833128=147456,进行Bottleneck后的参数个数为1281196+963396+9611128=107520,可以看到,参数个数减少了4w多个。当前一些著名网络都有使用这种方法,像ResNet和DenseNet等等。
通过这个方法,我的learnable parameter从40w个减少到了9w个,同时误差从0.021上升到了0.03
遗憾的是,训练时间并没有显著减少, 反而有所增加。我的猜测是参数虽然减少,但是网络收敛变慢,因此误差和准确度都下降了。