神经网络参数量(Para)和计算量(FLOPs)的计算方法

参数量和计算量的对比

参数量即算法的空间复杂度,是衡量一个网络的空间大小指标。上升到硬件层次,,参数量对应的是计算机内存资源的消耗。
计算量即算法的时间复杂度,是衡量一个算法速度的指标。上升到硬件层次,计算量对应的是计算时间。

参数量计算方法

标准卷积层的参数量计算

假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N。

bias为True时:

则参数数量为:Para = k×k×M×N + N(bias的数量与输出channel的数量是一样的)

bias为False时:

则参数数量为:Para = k×k×M×N

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = k×k×M×N + 3×N

全连接层的参数量计算

假设 输入神经元数为M,输出神经元数为N,则

bias为True时:

则参数数量为:Para = M*N + N(bias的数量与输出神经元数的数量是一样的)

bias为False时:

则参数数量为:Para = M×N

分组卷积层的参数量计算

分组卷积即将输出的 feature map 按照通道数进行分组,那么与之进行计算的每个卷积核也要将其按照通道数进行分组,分组后的 feature map 和 kernel 每组进行独立的卷积计算。假设分成 g 组,那么就会得到 g 个卷积后的 feature out。每个 feature out 按照输入通道维度依次顺序进行 concat 就得到了最终的 feature out 。
假设卷积核的大小为 kk, 输入channel为M, 输出channel为N 。
输入每组feature map尺寸:W
HM/g ,共有g组;
单个卷积核每组的尺寸: k
k*M/g , 一个卷积核被分成了g组;

bias为True时:

分组卷积的参数量:para = kk (M/g )* N + N

bias为False时:

则参数数量为:Para = k×k×(M/g )×N

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = k×k×(M/g )×N + 3×N

DW 卷积层的参数量计算

DW 卷积和 PW 卷积都可以理解成是特殊的分组卷积。
采用DW卷积核PW卷积来代替标准卷积可以大大减少参数量和计算量。
假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N。由于DW卷积不对通道数进行改变(即N=M)。那么:

bias为True时:

则参数数量为:Para = k×k×M×M + M (bias的数量与输出channel的数量是一样的)

bias为False时:

则参数数量为:Para = k×k×M×M

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = k×k×M×M + 3×M

PW 卷积层的参数量计算

卷积核的大小为1*1, 输入channel为M, 输出channel为N。

bias为True时:

则参数数量为:Para = 1×1×M×N +N = M×N +N

bias为False时:

则参数数量为:Para = 1×1×M×M = M×M

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = 1×1×M×M + 3×M = M×M + 3×M

计算量计算方法

首先应区分 FLOPs 和 FLOPS 。
FLOPS 是floating point of per second的缩写,意指每秒浮点运算次数。可以理解为计算速度,用来衡量硬件的性能。
FLOPs 是floating point of operations的缩写,是浮点运算次数,理解为计算量,可以用来衡量算法/模型复杂度。

标准卷积层的FLOPs计算

假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N,输出feature的宽为W,高为H。

bias为True时:

则计算量为:Flops = [2×(k×k×M) ] ×N×H×W
其中 k×k×M 为卷积中的乘法操作,k×k×M-1为卷积中的加法操作, + 1 为有 bias 。

bias为False时:

则参数数量为:Flops = (2×k×k×M-1) ×N×H×W

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = Flops = [(2×k×k×M-1) + 3 ] ×N×H×W

全连接层的计算量计算

假设 输入神经元数为M,输出神经元数为N,则

bias为True时:

则计算量为:FLOPs = [M+(M-1)+1]×N = 2 × M × N

bias为False时:

则参数数量为:Para = [M+(M-1)]×N = (2M-1)×N

DW层的FLOPs计算

假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N,输出feature的宽为W,高为H。

bias为True时:

则计算量为:Flops = [(k×k×M)+(k×k×M-1) + 1] ×M×H×W
其中 k×k×M 为卷积中的乘法操作,k×k×M-1为卷积中的加法操作, + 1 为有 bias 。

bias为False时:

则参数数量为:Flops = [(k×k×M)+(k×k×M-1) ] ×M×H×W

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = Flops = [(k×k×M)+(k×k×M-1) + 3 ] ×M×H×W

PW层的FLOPs计算

卷积核的大小为 1*1, 输入channel为M, 输出channel为N,输出feature的宽为W,高为H。

bias为True时:

则计算量为:Flops = [(1×1×M)+(1×1×M-1) + 1] ×N×H×W
其中 k×k×M 为卷积中的乘法操作,k×k×M-1为卷积中的加法操作, + 1 为有 bias 。

bias为False时:

则参数数量为:Flops = [(1×1×M)+(1×1×M-1) ] ×N×H×W

当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:Para = Flops = [(1×1×M)+(1×1×M-1) + 3 ] ×N×H×W

你可能感兴趣的:(卷积,人工智能,深度学习,ncnn)