前言:水平有限,如有失严谨或错误处,望指出纠正
不要着急,我们先假设:输入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通道卷积)计算量
第一部分 = 每个特征点所需乘法加法次数 * 特征点个数
第二部分 = 每个特征点所需乘法加法次数 * 特征点个数
一般情况卷积核长和宽一样时: