卷积 vs. 深度可分离卷积(FLOPs计算量)

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+2PK+1)/S
W o u t = ( W + 2 ∗ P − K + 1 ) / S W_{out} = (W + 2*P - K + 1)/S Wout=(W+2PK+1)/S

生成 H o u t ∗ W o u t ∗ C i n H_{out}*W_{out}*C_{in} HoutWoutCin 个局部大小为 ( 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} HoutWoutCinCout个同样操作,即可得:

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+2PK+1)/S(W+2PK+1)/SCinCout)K2


2.深度分离卷积

深度可分离卷积实际包括 Depth-wise convPoint-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} CinCout个组合。
简单来说
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+2PK+1)/S
W o u t = ( W + 2 ∗ P − K + 1 ) / S W_{out} = (W + 2*P - K + 1)/S Wout=(W+2PK+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+2PK+1)/S(W+2PK+1)/S)(CinK2)

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+2PK+1)/S
W o u t = ( W + 2 ∗ P − K + 1 ) / S W_{out} = (W + 2*P - K + 1)/S Wout=(W+2PK+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+2PK+1)/S(W+2PK+1)/SCin)(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=(CinCoutK2(CinK2+CinCout))((H+2PK+1)/S(W+2PK+1)/S)


引用

https://www.cnblogs.com/southtonorth/p/10675688.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值