该捋清!卷积、可分离卷积的参数和FLOPs计算!

前言:水平有限,如有失严谨或错误处,望指出纠正

不要着急,我们先假设:输入feature maps的通道数、输出的通道数、卷积核尺寸(长和宽一样时)分别为:

输出的feature maps的大小:

先看结论,有以下:

  • 基本卷积的参数量(为形式上简洁,不考虑bias):
  • 基本卷积的计算量(为形式上简洁,不考虑bias):
  • 可分离卷积的参数量(为形式上简洁,考虑bias):
  • 可分离卷积的计算量(为形式上简洁,考虑bias):

看出什么关系、规律了吗?

一、参数量计算

1、基本卷积参数计算:

不考虑偏置bias,参数量 = 每个卷积核的参数 * 核的数量(输出的通道数):

一般情况卷积核长和宽一样时:

注:如果考虑偏置项,为:

2、可分离卷积参数计算:

(上图源于网络,出处未知,侵删,2333……)

第一部分:对输入的每个通道使用单通道卷积核进行卷积;

输入的通道数(卷积核的个数) * 每个卷积核(通道1)的参数

第二部分:使用1x1卷积将输入通道数转变成输出通道数:

输出的通道数(卷积核的个数) * 每个卷积核(通道与输入通道相同)的参数:

两部分相加:

一般情况卷积核长和宽一样时:

二、FLOPs

floating point operations,浮点运算数,计算量,衡量模型复杂度。

(注意区分另一个概念FLOPS: floating point operations per second,指每秒浮点运算次数)

1、普通卷积计算量:

计算方法 = {计算每个输出特征值(feature map上的一个数)对应的乘法操作数 + 计算每个输出特征值(feature map上的一个数)对应的加法操作数}* 所有特征值的个数

不考虑偏置项bias,加法操作数有个-1,考虑由于+1与它抵消:

一般情况卷积核长和宽一样时:

2、可分离卷积的计算量:

计算方法 = 第一部分(输出通道不变,使用C_in个单通道卷积)计算量 + 第二部分(使用1*1通道卷积)计算量

第一部分 = 每个特征点所需乘法加法次数 * 特征点个数

第二部分 = 每个特征点所需乘法加法次数 * 特征点个数

一般情况卷积核长和宽一样时: