可以在手机上运行的CNN,所以称之为移动网络,主要是运用了深度可分离卷积(depthwise-separable convolution)降低了运算量使得网络能在低算力情境下运行。
深度可分离卷积
先看看普通的的卷积运算:
上图展示的是一个
6
×
6
×
3
6\times 6\times 3
6×6×3的输入矩阵经过
5
5
5个
3
×
3
×
3
3\times 3\times 3
3×3×3的过滤器得到
4
×
4
×
5
4\times 4\times 5
4×4×5的输出矩阵需要的计算,次数大概是过滤器大小乘以输出矩阵大小,即
3
×
3
×
3
×
4
×
4
×
5
=
2160
3\times 3\times 3\times 4\times 4\times 5=2160
3×3×3×4×4×5=2160次。对于一个
6
×
6
6\times 6
6×6像素的图片尚且如此,不难想象在正常图片甚至高清大图上应用卷积的计算量。
为了减少计算,深度可分离卷积应运而生。
首先,我们的过滤器不再是
3
×
3
×
3
3\times 3\times 3
3×3×3的整体,而是3个
3
×
3
3\times 3
3×3的过滤器,区别就在于现在每个过滤器只与对应通道的输入矩阵卷积,也就是所谓在深度上分离:
所以只需要运算
3
×
3
×
4
×
4
×
3
=
432
3\times 3\times 4\times 4\times 3=432
3×3×4×4×3=432次,省掉了过滤器个数这个维度。
下一步,则是通过一个
1
×
1
1\times 1
1×1过滤器,这一步用的就是正常卷积,采用5个
1
×
1
1\times 1
1×1过滤器得到
4
×
4
×
5
4\times 4\times 5
4×4×5的输出矩阵:
这一步计算需要
1
×
1
×
3
×
4
×
4
×
5
=
240
1\times 1\times 3\times 4\times 4\times 5=240
1×1×3×4×4×5=240次乘法。
所以深度可分离卷积只会用到
432
+
240
=
672
432+240=672
432+240=672次运算,只有普通卷积的
1
3
\frac{1}{3}
31不到。更一般的,对于滤波器大小为
f
×
f
×
n
c
f\times f\times n_c
f×f×nc,个数为
n
c
′
n_c'
nc′,输出矩阵大小为
n
×
n
×
n
c
′
n\times n\times n_c'
n×n×nc′的卷积运算,正常计算需要
f
×
f
×
n
c
×
n
×
n
×
n
c
′
=
f
2
n
c
n
2
n
c
′
f\times f\times n_c\times n\times n\times n_c'=f^2n_cn^2n_c'
f×f×nc×n×n×nc′=f2ncn2nc′次,而采用深度可分离卷积只需要
f
×
f
×
n
×
n
×
n
c
+
1
×
1
×
n
c
×
n
×
n
×
n
c
′
=
f
2
n
c
n
2
+
n
c
n
2
n
c
′
=
n
c
n
2
(
f
2
+
n
c
′
)
f\times f\times n\times n\times n_c+1\times 1\times n_c\times n\times n\times n_c'=f^2n_cn^2+n_cn^2n_c'=n_cn^2(f^2+n_c')
f×f×n×n×nc+1×1×nc×n×n×nc′=f2ncn2+ncn2nc′=ncn2(f2+nc′)次,仅为普通卷积的
f
2
+
n
c
′
f
2
n
c
′
=
1
f
2
+
1
n
c
′
\frac{f^2+n_c'}{f^2n_c'}=\frac{1}{f^2}+\frac{1}{n_c'}
f2nc′f2+nc′=f21+nc′1倍。而一般而言,
n
c
′
n_c'
nc′要远大于
f
2
f^2
f2,因此运算量差不多只占
1
9
\frac{1}{9}
91或
1
25
\frac{1}{25}
251。
搭建移动网络
第一个版本就是上面讲的深度可分离版本的卷积网络,在13次重复以后连接到池化层、全连接层和softmax层。
下方是改进的第二个版本,加入了残差以及扩展层:
在扩展层中,我们用大量的
1
×
1
1\times 1
1×1过滤器做卷积,使矩阵通道数增加,然后再做深度可分离卷积,一通操作以后矩阵规模变回原来的大小。因为第二次
1
×
1
1\times 1
1×1过滤的时候通道数目减少了,所以这一层又被称为投影层。
通过扩展层,我们向网络中加入了更丰富的运算,使得网络可以实现更复杂的功能,而在瓶颈块结束的时候又用一个投影层还原,使得移动设备不需要储存太多的值,节省内存。
EfficientNet
在结尾,吴恩达还介绍了一下移动网络的变体EfficientNet,它可以根据设备所有的资源自动调整输入图像分辨率、网络深度以及宽度等,从而更充分地利用移动设备资源,也能在资源有限的设备上进行调整使得网络能够运行。