论文全称:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
下载地址:
https://arxiv.org/pdf/1704.04861.pdf
论文核心思想:
本文对我们常见的卷积操作进行了改进,使得计算量得到了降低。
设:
输入图片F的大小是Df * Df * M,Df表示宽、高,M表示通道数。
stride为1,padding取使得输出图片的宽、高均等于输入图片的宽、高的值。
输出图片G的大小是Df * Df * N,Df表示宽、高,N表示通道数。
常规卷积操作的示意图:
常规卷积
设常规卷积中,卷积核G的大小是Dk * Dk * M * N,Dk表示宽、高,M表示通道数,N表示卷积核个数。
则常规卷积的操作需要执行的计算量为:
乘法次数:Dk * Dk * M * N * Df * Df,加法次数:Dk * Dk * M * N * Df * Df - 1
由于乘法更加耗时,所以重点考察乘法次数,则 Cost A= Dk * Dk * M * N * Df * Df
其中,Dk * Dk * M表示每个卷积核每滑动到一个位置需要执行的乘法的次数;Df * Df表示每个卷积核需要卷积的次数。前者等于每个卷积核的大小,后者等于输出图片的宽*高。
MobileNets论文提出的深度可分离卷积(Depthwise separable convolutions)由两部分组成:
第1部分:在深度上进行卷积(Depthwise convolution),即:在每一个通道的二维矩阵上进行卷积。
在这个部分中的卷积核是2维的,即卷积核的深度为1,输入图片的深度是多少,卷积核就有多少个。
depthwise convolution 示意图:
在深度上卷积
第2部分:在点上进行卷积(Pointwise convolution ),即:在二维矩阵每一个点上对所有的通道进行卷积。
在这个部分中的卷积核虽然是3维,但是宽和高均为1,输入图片的面积(宽*高的值)是多少,就有多少个卷积核。
pointwise convolution 示意图:
在点上卷积
最后,用一张图来描述完整的深度可分离卷积:
完整示意图
设深度可分离卷积中,第1步的卷积核K1大小是Dk* Dk * M,Dk表示宽、高,M表示通道数。
卷积核K1的每个通道分别与图片的每个通道进行卷积,得到输出图片的每个通道。
第1步的乘法次数为:Dk * Dk * M * Df * Df,其中Dk*Dk为卷积核每个通道的大小,Df * Df为每个卷积核需要遍历的位置数。
第2步的卷积核K2大小是1 * 1 * M * N,1表示宽、高,M表示通道数,N表示卷积核个数。
卷积核K2与上层输出图片中每个点对应的M个通道进行卷积。
第2步的乘法次数为:Df * Df * M * N,其中Df * Df为图片大小。
累计乘法次数为Dk * Dk * M * Df * Df + Df * Df * M * N
因此,Cost B = Dk * Dk * M * Df * Df + Df * Df * M * N
Cost A / Cost B = 1/N + 1/(Dk * Dk)
所以,论文提出的卷积方法的计算量小于常规卷积的计算量。
由上式可见,性能的提升主要与卷积核的个数和卷积核的宽、高有关,这3个参数越大,性能提升越明显。
如有问题,欢迎交流。
文中图片来自网络:
https://eli.thegreenplace.net/2018/depthwise-separable-convolutions-for-machine-learning/
侵删。
网友评论