参数量
参数量是参与计算参数的个数,占用内存空间,假设输入通道和输出通道都是1,核大小 ( K , K ) (K,K) (K,K),输入map大小为:
( H i n , W i n ) (H_{in},W_{in}) (Hin,Win),输出map大小为 ( H o u t , W o u t ) (H_{out},W_{out}) (Hout,Wout),考虑偏置,不补0的卷积。
其参数量为:K*K+1
若考虑输入通道 C i n C_{in} Cin和输出通道 C o u t C_{out} Cout,则参数量为: ( C i n ∗ ( K ∗ K ) + 1 ) ∗ C o u t (C_{in}*(K*K)+1)*C_{out} (Cin∗(K∗K)+1)∗Cout
MAC(Multiply Accumulate),需要考虑输出map的大小,1个MAC算两次操作
假设输入通道和输出通道都是1,核大小为 K ∗ K K*K K∗K,输入map大小为
( H i n , W i n ) (H_{in},W_{in}) (Hin,Win),输出map大小为 ( H o u t , W o u t ) (H_{out},W_{out}) (Hout,Wout),考虑偏置,不补0的卷积。
其计算量为: K ∗ K ∗ H o u t ∗ W o u t K*K*H_{out}*W_{out} K∗K∗Hout∗Wout
若考虑输入通道 C i n C_{in} Cin和输出通道 C o u t C_{out} Cout,
计算量为: C i n ∗ K ∗ K ∗ H o u t ∗ W o u t ∗ C o u t C_{in}*K*K*H_{out}*W_{out}*C_{out} Cin∗K∗K∗Hout∗Wout∗Cout
浮点运算量,指计算量,跟乘加次数有点不一样,若考虑偏置
则 F L O P s = ( C i n ∗ 2 ∗ K ∗ K ) ∗ H o u t ∗ W o u t ∗ C o u t FLOPs =(C_{in}*2*K*K)*H_{out}*W_{out}*C_{out} FLOPs=(Cin∗2∗K∗K)∗Hout∗Wout∗Cout
不考虑偏置的情况下
则 F L O P s = ( C i n ∗ 2 ∗ K ∗ K − 1 ) ∗ H o u t ∗ W o u t ∗ C o u t FLOPs =(C_{in}*2*K*K-1)*H_{out}*W_{out}*C_{out} FLOPs=(Cin∗2∗K∗K−1)∗Hout∗Wout∗Cout
注意:这里乘和加分开,加的操作因为n个数相加所以减1了,考虑偏置则补掉了加1
可分离的卷积具体操作是先对输入map每单个channel进行卷积的操作,然后再进行1维卷积实现输出通道的改变。
假设输入通道和输出通道都是1,核大小为 ( K , K ) (K,K) (K,K),输入map大小为
( H i n , W i n ) (H_{in},W_{in}) (Hin,Win),输出map大小为 ( H o u t , W o u t ) (H_{out},W_{out}) (Hout,Wout),考虑偏置,不补0的可分离卷积。
考虑输入通道 C i n C_{in} Cin和输出通道 C o u t C_{out} Cout
C i n ∗ K ∗ K + C o u t ∗ ( C i n ∗ 1 ∗ 1 + 1 ) C_{in}*K*K+C_{out}*(C_{in}*1*1+1) Cin∗K∗K+Cout∗(Cin∗1∗1+1), 后面加1是偏置
C i n ∗ K ∗ K ∗ H o u t ∗ W o u t + C i n ∗ C o u t ∗ H o u t ∗ W o u t C_{in}*K*K*H_{out}*W_{out}+C_{in}*C_{out}*H_{out}*W_{out} Cin∗K∗K∗Hout∗Wout+Cin∗Cout∗Hout∗Wout
( C i n ∗ 2 ∗ K ∗ K − 1 ) ∗ H o u t ∗ W o u t + ( C i n ∗ 2 ∗ 1 ∗ 1 ) ∗ H o u t ∗ W o u t ∗ C o u t (C_{in}*2*K*K-1)*H_{out}*W_{out}+(C_{in}*2*1*1)*H_{out}*W_{out}*C_{out} (Cin∗2∗K∗K−1)∗Hout∗Wout+(Cin∗2∗1∗1)∗Hout∗Wout∗Cout
链接:https://www.jianshu.com/p/c2a0ba5bb3d1