相關Flops的介紹


2020CVPR文章已陸續發出,現在開始要跟進 成果(干掉張偉)。

 

 

 今天主要看的這篇GhostNet,但是我們並不是主要說的是GhostNet中的Ghost Module,后期在專門整理一篇,關於ShuffleNet V1/V2以及MobileNet V1/V2等輕量級網絡的資料整理,我們今天主要分析的是里面做的指標分析FLOPs。關於這個FlOPs是啥,如何計算FLops,以及Flops是不是越大就越好。帶着幾個問題,我們一個一個來看。

1. 首先關於FLOPs:

有個很相似的詞兒,叫FLOPS,字母 全大寫,指每秒浮點運算次數,可以理解為計算的速度。是衡量硬件性能的一個指標。(硬件)這個不是我們深度學習里面說的運算量,我們說的Flops是指s小寫,指浮點運算數,理解為計算量。可以用來衡量算法/模型的復雜度。(模型) 在論文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)。

 

Flops最早是於2017年,ICIR收錄了NVIDIA發表的一篇論文,在這篇論文的附錄里,NVIDIA詳細的講解了一下FLOPs的計算。PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE

2. 如何計算FLops

其中就是指計算量的大小,表示FLOPs。對於卷積層而言,FLOPs的計算公式如下:

\begin{equation}
\mathrm{FLOPs}=2 H W\left(C_{i n} K^{2}+1\right) C_{o u t}
\end{equation}

其中的$C_{in}$是指卷積層輸入tensor的通道數,$C_{out}$指的是卷積層輸出tensor的通道數。K指的是卷積核大小。

而后把常數項去掉,簡化小操作:

 

\begin{equation}
\mathrm{FLOPs}=H W\left(C_{i n} K^{2}\right) C_{o u t}
\end{equation}

 而在實際中,我們不可能自己計算FLOPs,所以,本着能找庫就找庫的聰明才能,查了一下,還真有相關計算FLOPs的庫,現查到的有兩個庫,一個是torchstat以及thop。經過測試,基本上兩個可以對齊的,所以說,任意選擇一個就好。具體用法寫兩個小demo吧。

對於torchstat:

from torchstat import stat
import torchvision.models as models

model = model.densenet121()
stat(model, (3, 224, 224))

對於thop:

from torchvision.models import densenet121
from thop import profile
model = densenet121()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))

 

3. Flops是不是越大就越好

其實在文章中,指出FLOPs是一個不直接的衡量指標,不像延遲跟速度,是很直觀的指標。

 

 

 具有相似FLOPs的網絡,執行的速度卻不一樣,有的相差還是很大的,具體的圖可以在一下參考中,找到大佬們簡書中寫的文章。

所以,不能只使用FLOPs來當做指標。還得考慮更多的MAC跟並行度等。

https://zhuanlan.zhihu.com/p/67009992

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM