本文作者专注于AI进阶算法,正在推出AI疯狂进阶之基础理论进阶篇,如有兴趣可持续关注我。
核心导读:
1.Depthwise Separable Convolution为什么高效?
2.Depthwise Separable Convolution比普通卷积差?
3.Depthwise Separable Convolution is all you need?
随着深度学习的发展,卷积神经网络变得越来越普遍。之前很长一段时间,大家都把注意力放在通过更深和更复杂的网络来得到更高的精度,比如很多刷榜的算法都是运用了非常复杂的技巧(实际中可能毛用都没,这里鄙视下那些纯粹为了刷榜而刷榜的,浪费时间和精力为了个虚名而已),但是这种网络往往在模型大小和运行速度上没多大优势,在实际的工程应用中可能因为应用成本太大而很难大规模商用,例如一些嵌入式平台上的应用比如机器人和自动驾驶,手机端的一些AI应用比如人脸识别或者文字识别,它们的硬件资源有限,就十分需要一种轻量级、低延迟的网络模型,而本文所讲得深度可分离卷积(Depthwise Separable Convolution)即是在这样的背景下面应运而生。
1.Depthwise Separable Convolution为什么高效?
Depthwise Separable Convolution将传统的卷积分解为一个深度卷积(depthwise convolution)+ 一个 1×1的卷积(pointwise convolution)。如下图所示,(a)是传统卷积,(b)、(c)分别对应深度可分离卷积的深度卷积和 1×1的卷积:
假设输入特征图大小为 D_F×D_F×M,输出特征图大小为 D_F×D_F×N,卷积核大小为 D_K×D_K,则传统卷积的计算量为:D_K×D_K×M×N×D_F×D_F
参数量为:D_K×D_K×M×N
深度可分离卷积的计算量为深度卷积和 1×1 卷积的计算量之和:D_K×D_K×M×D_F×D_F+M×N×D_F×D_F
参数量为:D_K×D_K×M+ M×N
当卷积核大小为 3×3的时候,深度可分离卷积的计算量缩减为传统卷积的 1/8~1/9 ,参数量也减少较多,但精度下降很低,甚至不会下降。Depthwise Separable Convolution目前已经广泛应用于各种轻量化卷积神经网络中,如Mobilenet系列,Shufflenet系列,Nasnet系列,Efficientnet系列,MixNet等,几乎已经成为一种标配或者潮流。
2.Depthwise Separable Convolution比普通卷积差?
Efficient系列的文章告诉了我们答案。《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》是谷歌2019年最新的研究,该文在mNasnet的基础单元基础上用AUTO ML搜索出一系列轻量化网络B0-B7,具体精度如下图,而mNasnet基础单元主要是由Depthwise Separable Convolution和1*1 Convolution组成。从数据可以看出,最大的Efficient-B7仅仅只用了66M的参数就达到了大模型Gpipe 557M的精度,而我们常用的Resnet-50网络,Efficient-B0仅仅只用5.3M的参数就可以达到同样的精度。当然,数据如此惊悚的另一大原因就是用了TPU(炫富,不信去看看谷歌TPU的服务价格!)+AUTOML(有很多人认为这算是一种过拟合,但我想说的是,我们现在很多实际应用项目就是需要在特定的场景下面过拟合,根本就不太需要很高的泛化能力)。这数据背后其实可以反应出一个很明显的问题,Depthwise Separable Convolution比普通卷积的精度会低吗?答案很明显,不会,并且本文作者认为随着技术进一步的发展,普通卷积会慢慢消失,这种轻量化卷积将会成为主流。
3.Depthwise Separable Convolution is all you need?
本文作者目前基本已经不怎么用普通卷积,而目前所有的项目中都是用的Depthwise Separable Convolution,通过AUTO ML经常能找到比普通卷积堆积的巨大网络精度还高的小型网络,当然,为什么会出现这种情况,目前理论上还没办法证明,本文作者也在持续探索这一块的内容,有进展会第一时间发出来。