神经网络部分概念:FLOPs运算量计算、depthwise separate convolution 深度可分离卷积

FLOPs
floating-point operations 浮点运算次数,小写的s表示复数,表示计算量。FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度,注意到这两者时不一样的。
神经网络的前向传播过程可以理解为out=in×w+b,再乘以一个**函数σ。假设输入为224×224×3(H* W * C)的图像,经过一次卷积核大小为11* 11* 3的卷积后,得到55* 55* 96的图像,H\W\C分别为高、宽、通道数。注意到CNN的每一层中的权重是共享的,这也是CNN的优势之一,也就是在对某一层进行卷积运算时,在feature map上的每一个像素的权重(w和b)都是一样的,因此在计算FLOPs时只要计算出feature map一个像素的运算量,再乘以总像素,即
FLOPs=parameters × feature map
神经网络部分概念:FLOPs运算量计算、depthwise separate convolution 深度可分离卷积
对于feature map上一个像素点的parameters计算,parameters即w和b,一次卷积包含了对w的乘法运算和对b的加法运算,卷积依靠卷积核的不断移动并和卷积核进行运算,运算的次数取决于右边输出的通道数量。对于w的运算量等于卷积核大小乘以输出通道数,图中表示的是一层通道数,若有n个通道数,即右边有n层,所以要乘以通道数,即11* 11* 3* 96,对于b就等于输出通道数,即98,现在我们可以得到:
parameters=(11* 11* 3* 96+96)
feature map是输出特征图的大小,即55* 55,现在可以得到最终的FLOPs:
FLOPs=parameters × feature map=(11* 11* 3* 96+96)* (55* 55),
若该层为全连接层,对于FLOPs,只需要计算parameters即可,因为全连接层的输出为1
depthwise separate convolution 深度可分离卷积
mobilenet提出的depthwise separate convolution,和普通卷积的对比图如下,M表示输入通道数量,N表示输出通道数量。
神经网络部分概念:FLOPs运算量计算、depthwise separate convolution 深度可分离卷积
depthwise separate convolution将普通卷积转换成一次depthwise卷积和一次pointwise卷积。下面举一个具体例子加以说明。
输入图像的通道数为3,大小为64* 64=a,若采用普通卷积,使用4个filters,每个filter包含3个3* 3的kernel,生成4张feature map,每个map的大小与输入相同,为64* 64。现在我们可以计算其FLOPs:
FLOPs=(3* 3* 3* 4+4)* a=112a
神经网络部分概念:FLOPs运算量计算、depthwise separate convolution 深度可分离卷积
若采用depthwise separate convolution,其卷积过程有2步,如下图,首先采用depthwise卷积,使用3个filter,每个filter的大小是3* 3,该步骤的FLOPs:
FLOPs1=(3* 3*3+3)*a=30a

神经网络部分概念:FLOPs运算量计算、depthwise separate convolution 深度可分离卷积
第二步使用pointwise卷积,使用4个filter,每个filter的大小为1 *3,该步骤的FLOPs:
FLOPs2=( 1 *3 *4+4 )a=16a
因此最终的FLOPs=30a+16a=46a
我们对比一下和普通卷积的运算量为112a,可见其作用。尽管提高了运算速度,但仍然保证了得到一样的特征图,这就是depthwise separate convolution的优势。
神经网络部分概念:FLOPs运算量计算、depthwise separate convolution 深度可分离卷积

参考:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision
Applications
https://yinguobing.com/separable-convolution/