FLOPs(FLoat Point OPerations)浮点计算量
1.二维卷积
输入特征图: ( H , W , C i n ) (H,W,C_{in}) (H,W,Cin)
卷积核: ( K , C o u t ) (K,C_{out}) (K,Cout),步长为 S S S,Padding为 P P P
输出特征图: ( H o u t , W o u t , C o u t ) (H_{out},W_{out},C_{out}) (Hout,Wout,Cout)
其中
H o u t = ( H + 2 ∗ P − K + 1 ) / S H_{out} = (H + 2*P - K + 1)/S Hout=(H+2∗P−K+1)/S
W o u t = ( W + 2 ∗ P − K + 1 ) / S W_{out} = (W + 2*P - K + 1)/S Wout=(W+2∗P−K+1)/S
生成
H
o
u
t
∗
W
o
u
t
∗
C
i
n
H_{out}*W_{out}*C_{in}
Hout∗Wout∗Cin 个局部大小为
(
K
,
K
)
(K,K)
(K,K)的特征图,与
C
o
u
t
C_{out}
Cout个
(
K
,
K
)
(K,K)
(K,K)卷积核进行矩阵点乘
一对矩阵点乘的计算量为
K
2
K^2
K2,存在
H
o
u
t
∗
W
o
u
t
∗
C
i
n
∗
C
o
u
t
H_{out} * W_{out}*C_{in}*C_{out}
Hout∗Wout∗Cin∗Cout个同样操作,即可得:
F L O P s = ( ( H + 2 ∗ P − K + 1 ) / S ∗ ( W + 2 ∗ P − K + 1 ) / S ∗ C i n ∗ C o u t ) ∗ K 2 FLOPs = ((H + 2*P - K + 1)/S * (W + 2*P - K + 1)/S *C_{in}*C_{out}) * K^2 FLOPs=((H+2∗P−K+1)/S∗(W+2∗P−K+1)/S∗Cin∗Cout)∗K2
2.深度分离卷积
深度可分离卷积实际包括 Depth-wise conv 和 Point-wise conv 两部分
2.1 Depth-wise conv
Depth-wise conv输入的每个通道对应一个独立的卷积核,与其他通道特征无关联;传统卷积所有输入通道与
C
o
u
t
C_{out}
Cout个卷积核为全连接,因此存在
C
i
n
∗
C
o
u
t
C_{in}*C_{out}
Cin∗Cout个组合。
简单来说
Conv 为
n
:
m
n:m
n:m 关系
Depth-wise conv 为
1
:
1
1:1
1:1 关系
输入特征图: ( H , W , C i n ) (H,W,C_{in}) (H,W,Cin)
卷积核: ( K , C i n ) (K,C_{in}) (K,Cin),步长为 S S S,Padding为 P P P
输出特征图: ( H o u t , W o u t , C i n ) (H_{out},W_{out},C_{in}) (Hout,Wout,Cin)
其中
H o u t = ( H + 2 ∗ P − K + 1 ) / S H_{out} = (H + 2*P - K + 1)/S Hout=(H+2∗P−K+1)/S
W o u t = ( W + 2 ∗ P − K + 1 ) / S W_{out} = (W + 2*P - K + 1)/S Wout=(W+2∗P−K+1)/S
计算可得:
F L O P s = ( ( H + 2 ∗ P − K + 1 ) / S ∗ ( W + 2 ∗ P − K + 1 ) / S ) ∗ ( C i n ∗ K 2 ) FLOPs = ((H + 2*P - K + 1)/S * (W + 2*P - K + 1)/S) * (C_{in} * K^2) FLOPs=((H+2∗P−K+1)/S∗(W+2∗P−K+1)/S)∗(Cin∗K2)
2.2 Point-wise conv
Point-wise conv 核为1x1的卷积操作,可看作是一个线性变换,用于改变特征输出维度(主要用于升维)
输入特征图: ( H o u t , W o u t , C i n ) (H_{out},W_{out},C_{in}) (Hout,Wout,Cin)
参数: ( 1 , 1 , C o u t ) (1,1,C_{out}) (1,1,Cout)
输出特征图: ( H o u t , W o u t , C o u t ) (H_{out},W_{out},C_{out}) (Hout,Wout,Cout)
其中
H o u t = ( H + 2 ∗ P − K + 1 ) / S H_{out} = (H + 2*P - K + 1)/S Hout=(H+2∗P−K+1)/S
W o u t = ( W + 2 ∗ P − K + 1 ) / S W_{out} = (W + 2*P - K + 1)/S Wout=(W+2∗P−K+1)/S
计算可得:
F L O P s = ( ( H + 2 ∗ P − K + 1 ) / S ∗ ( W + 2 ∗ P − K + 1 ) / S ∗ C i n ) ∗ ( C o u t ) FLOPs = ((H + 2*P - K + 1)/S * (W + 2*P - K + 1)/S * C_{in}) * (C_{out}) FLOPs=((H+2∗P−K+1)/S∗(W+2∗P−K+1)/S∗Cin)∗(Cout)
计算量减少
Δ F L O P s = ( C i n ∗ C o u t ∗ K 2 − ( C i n ∗ K 2 + C i n ∗ C o u t ) ) ∗ ( ( H + 2 ∗ P − K + 1 ) / S ∗ ( W + 2 ∗ P − K + 1 ) / S ) \Delta FLOPs = (C_{in}*C_{out} *K^2 - (C_{in} * K^2 + C_{in} * C_{out})) * ((H + 2*P - K + 1)/S * (W + 2*P - K + 1)/S) ΔFLOPs=(Cin∗Cout∗K2−(Cin∗K2+Cin∗Cout))∗((H+2∗P−K+1)/S∗(W+2∗P−K+1)/S)
引用
https://www.cnblogs.com/southtonorth/p/10675688.html