MobileNet v2基础结构中增加的升维PW卷积,可以将通道数扩大到较高的维度。
在卷积的计算过程中,参数量计算公式为CinKhKw*Cout,可以看出在卷积核固定的情况下,通道数越多,参数量也就越大。
MobileNet v1使用的可分离卷积,将Cin和Cout的乘法分离为两个较小因子乘法的和,因此减少了参数量,但其基于VGG16的网络结构,在深层512(包括重复5次的卷积层)以及1024通道的运算仍然具有很大的参数量。
MobileNet v2带来的改进是纺锤形Block,将一个卷积操作继续分解为三个乘法的和,这样一来使得每个Block之间可以以较小的通道数[24 32 64-96 160-320]进行传递,二来在Block中升维[144 192 384-576 960-1920]可以学习到更多特征。将CONV1x1层的参数数量和计算量直接减小若干倍(论文中6倍),轻微增加DWCONV3x3的通道数以保证的网络容量。
二者详细的参数量计算比较如下:
MobileNet v1:
![](https://img.haomeiwen.com/i18217940/e05ded34a36f7c71.png)
每一层的参数(只计算卷积核和全连接神经元):
层 | 输入尺寸 | 参数量 | 备注 |
---|---|---|---|
3x3x3x32 | 224,224,3 | 864 | ---- |
dw 3x3x32 | 112,112,32 | 288 | ---- |
pw 1x1x32x64 | 112,112,32 | 2048 | ---- |
dw 3x3x64 | 112,112,64 | 576 | ---- |
pw 1x1x64x128 | 56,56,64 | 8192 | ---- |
dw 3x3x128 | 56,56,128 | 1152 | ---- |
pw 1x1x128x128 | 56,56,128 | 16384 | ---- |
dw 3x3x128 | 56,56,128 | 1152 | ---- |
pw 1x1x128x256 | 28,28,128 | 32768 | ---- |
dw 3x3x256 | 28,128,256 | 2304 | ---- |
pw 1x1x256x256 | 28,28,256 | 65536 | ---- |
dw 3x3x256 | 28,28,256 | 2304 | ---- |
pw 1x1x256x512 | 14,14,256 | 131072 | ---- |
dw 3x3x512 | 14,14,512 | 4608 | x5 |
pw 1x1x512x512 | 14,14,512 | 262144 | x5 |
dw 3x3x512 | 14,14,512 | 4608 | ---- |
pw 1x1x512x1024 | 7,7,512 | 524288 | ---- |
dw 3x3x1024 | 7,7,1024 | 9216 | ---- |
pw 1x1x1024x1024 | 7,7,1024 | 1048576 | ---- |
fc 1024x1000 | 1,1,1024 | 1024000 | ---- |
All | \ | 4209088 | 4.2M |
MobileNet v2:
![](https://img.haomeiwen.com/i18217940/39549a1ad9be489c.png)
每一层的参数(只计算卷积核和全连接神经元):
层 | 输入尺寸 | 参数量 | 备注 |
---|---|---|---|
3x3x3x32 | 224,224,3 | 864 | ---- |
dw 3x3x32 | 112,112,32 | 288 | ---- |
pw 1x1x32x16 | 112,112,32 | 512 | ---- |
pw 1x1x16x(16x6) | 112,112,16 | 1536 | x2 |
dw 3x3x(16x6) | 112,112,(16x6) | 864 | x2 |
pw 1x1x(16x6)x24 | 56,56,(16x6) | 2304 | x2 |
pw 1x1x24x(24x6) | 56,56,24 | 3456 | x3 |
dw 3x3x(24x6) | 28,28,(24x6) | 1296 | x3 |
pw 1x1x(24x6)x32 | 28,28,(24x6) | 4608 | x3 |
pw 1x1x32x(32x6) | 28,28,32 | 6144 | x4 |
dw 3x3x(32x6) | 28,28,(32x6) | 1728 | x4 |
pw 1x1x(32x6)x64 | 28,28,(32x6) | 12288 | x4 |
pw 1x1x64x(64x6) | 28,28,64 | 24576 | x3 |
dw 3x3x(64x6) | 14,14,(64x6) | 3456 | x3 |
pw 1x1x(64x6)x96 | 14,14,(64x6) | 36864 | x3 |
pw 1x1x96x(96x6) | 14,14,96 | 55296 | x3 |
dw 3x3x(96x6) | 7,7,(96x6) | 5184 | x3 |
pw 1x1x(96x6)x160 | 7,7,(96x6) | 92160 | x3 |
pw 1x1x160x(160x6) | 7,7,160 | 153600 | x1 |
dw 3x3x(160x6) | 7,7,(160x6) | 8640 | x1 |
pw 1x1x(160x6)x320 | 7,7,(160x6) | 307200 | x1 |
1x1x320x1280 | 1,1,320 | 409600 | ---- |
1x1x1280x1000 | 1,1,1280 | 1280000 | ---- |
All | \ | 2958440 | 2.96M |
由于只计算了卷积层参数,和论文3.4M的参数量有所出入(怀疑论文是把最后一个Block算了两遍?还是计入了BN等层参数?)
把v1和v2重复量最多的结构和尺寸相同的结构拿出来比较:
层 | 输入尺寸 | 参数量 | 备注 |
---|---|---|---|
v1 dw 3x3x512 | 14,14,512 | 4608 | x5 |
v1 pw 1x1x512x512 | 14,14,512 | 262144 | x5 |
v2 pw 1x1x32x(32x6) | 28,28,32 | 6144 | x4 |
v2 dw 3x3x(32x6) | 28,28,(32x6) | 1728 | x4 |
v2 pw 1x1x(32x6)x64 | 28,28,(32x6) | 12288 | x4 |
v2 dw 3x3x(64x6) | 14,14,(64x6) | 3456 | x3 |
v2 pw 1x1x(64x6)x96 | 14,14,(64x6) | 36864 | x3 |
v2 pw 1x1x96x(96x6) | 14,14,96 | 55296 | x3 |
可以看到v2其实是把每个block固定成纺锤形的同时也变瘦了,通道数没有扩展到v1的大尺度,而且由于分离1x1卷积的存在,参数量都比v1要小。
网友评论