mobileNet出来很久了,这边主要是做个笔记,不然很快就忘记了。mobileNet的精髓是提出了depthwise卷积层。
标准的卷积层的参数个数是
(卷积核大小×卷积核大小×输入通道数×输出通道数,如卷积核是一个3*3,输入输出是256通道,则有3*3*256*256)。其计算量是:
是输入的feature map的大小。
depthwise卷积
首先我们看看标准卷积的计算过程(图画的很渣):
上图的卷积,输入通道为4,输出为2,因此有4*2个卷积核。in表示输入,out表示输出。我们可以看到每个输出都需要有4个卷积核分别在4张输入特征图进行卷积,然后相加得到。
而depthwise卷积过程如下:
输入特征图个数为2,输出特征图也为2,并且只需要两个卷积核。如果按照标准卷积,需要2*2=4个卷积核。
那么depthwise的卷积参数个数为
,计算量为:
由于depthwise卷积的输入输出通道必须一样,因此为了达到标准卷积的输入为M,输出为N的效果。论文在depthwise卷积后面加入了一个pointwise卷积,也就是卷积核为1*1的卷积。depthwise+pointwise=可分离卷积。这样可分离卷积的计算量为:
那么标准卷积与可分离卷积的计算比为:
可分离卷积大概比标准卷积少了8到9倍的计算量。
论文给出的标准卷积与可分离卷积的结构图:
整个mobilenet的结构:
论文后面加入了宽度因子和网络输入分辨率因子。
实验结果
imageNet
物体检测
模型小了很多啊,不管是在SSD还是RCNN,大概24M而已。