论文笔记:ShuffleNet v2
生活随笔
收集整理的這篇文章主要介紹了
论文笔记:ShuffleNet v2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
ShuffleNet v2
1、四個問題
要解決什么問題?
- 輕量化模型。
用了什么方法解決?
-
文中提出了幾條設計輕量化模型的實踐準則(guidelines)。
- Guideline 1:輸入通道數與輸出通道數保持相等可以最小化內存訪問成本(memory access cost,簡稱MAC)。
- Guideline 2:組卷積中使用過多的分組數會增加內存訪問成本(MAC)。
- Guideline 3:網絡結構太復雜(分支和基本單元過多)會降低網絡的并行程度。
- Guideline 4:Element-wise的操作消耗不可忽視(包括ReLU,Tensor相加,bias相加等等)。
這篇文章主要是在ShuffleNet v1的基礎之上進行改進的,并依照提出的guidelines重新改進了Shuffle Unit,并構建了ShuffleNet v2。
效果如何?
- 文中進行了大量的對比實驗,將上述的準則直接對現有的一些模型進行修改,驗證準則的準確性。
- 將ShuffleNet v2與其他模型進行比較,驗證了其有效性。
還存在什么問題?
- 這篇論文是今年才發表在ECCV18上的文章,各方面考慮得都很全,思路也很新穎,目前網上的復現還不是很多,后面我也去復現試試。
2、論文概述
2.1、引言
- 目前一些有效地輕量化網絡都是基于depth-wise convolution和group convolution的。
- 大多數文章中針對網絡計算復雜性的度量標準是浮點運算量(FLOPs),但是文中通過實驗發現,FLOPs并不能與網絡的計算速度成正比。
- 從圖中可以看出,相同的FLOPs下,不同網絡的實際運行速度有不小差距。
- 非直接度量標準(FLOPs)和直接度量標準(實際運行速度)的結果有所偏差,原因如下:
- 有一些很重要的影響因素,并沒有被FLOPs考慮進去。
- 一個就是內存訪問成本(MAC)。比如執行組卷積時,算力更強的平臺如GPU就可以忽略不計,而算力相對較弱的平臺如ARM就不能忽略不計了。
- 另一個原因就是并行化程度。在相同的 FLOPs 下,網絡并行化程度更高的網絡速度更快。
- 具有相同FLOPs的操作在不同平臺上,運行時間效率不同。
2.2、網絡設計準則
Guideline1 : Equal channel width minimizes memory access cost (MAC)
-
輸入通道數與輸出通道數保持相等可以最小化內存訪問成本(memory access cost,簡稱MAC)。
-
假設輸入通道數為c1c_1c1?,輸出通道數為c2c_2c2?,特征圖為h×wh \times wh×w。
- 每個1×11 \times 11×1 卷積層的FLOPs是:B=h?w?c1?c2B = h \cdot w \cdot c1 \cdot c2B=h?w?c1?c2。
- 則MAC(內存訪問操作次數)為:MAC=h?w?(c1+c2)+c1?c2MAC = h \cdot w \cdot (c_1 + c_2) + c_1 \cdot c_2MAC=h?w?(c1?+c2?)+c1??c2?。
- 由于c1+c2≥2c1?c2=2Bh?wc_1 + c_2 \geq 2 \sqrt{c_1 \cdot c_2} = 2 \sqrt{\frac{B}{h \cdot w}}c1?+c2?≥2c1??c2??=2h?wB??。
- 帶入MAC的式子中,可得:MAC=h?w?(c1+c2)+c1?c2≥2?h?w?Bh?w+c1?c2MAC = h \cdot w \cdot (c_1 + c_2) + c_1 \cdot c_2 \geq 2 \cdot h \cdot w \cdot \sqrt{\frac{B}{h \cdot w}} + c_1 \cdot c_2MAC=h?w?(c1?+c2?)+c1??c2?≥2?h?w?h?wB??+c1??c2?。
- 最終得到MAC≥2?B?h?w+Bh?wMAC \geq 2 \cdot \sqrt{B \cdot h \cdot w} + \frac{B}{h \cdot w}MAC≥2?B?h?w?+h?wB?。
- 由此可知,MAC具有下界,當輸入與輸出通道數相等,即c1=c2c_1 = c_2c1?=c2?時,MAC最小。
-
關于guideline1的實驗結果如下圖:
- 通過變換通道數,保證了幾個實驗的FLOPs大致一樣。從實驗結果可以看出,當c1=c2c_1 = c_2c1?=c2?時,速度最快。
Guideline2 : Excessive group convolution increases MAC.
- 組卷積中使用過多的分組數會增加內存訪問成本(MAC)。
- 對于組卷積來說,FLOPs為:B=h?w?c1?c2gB = \frac{h \cdot w \cdot c_1 \cdot c_2}{g}B=gh?w?c1??c2??。ggg為分組數。
- 組卷積的MAC計算公式如下:
- 假設h,w,c1,Bh, w, c_1, Bh,w,c1?,B不變,如果分組數ggg增加,那么MAC也會增加。
- 關于guideline2的實驗結果如下圖:
- 論文中給出的建議:
- 分組數應該根據實際課題以及應用的平臺謹慎選擇。單純的通過增加分組卷積來增加通道數從而增加精確度是一個不明智的選擇。
Guideline3 : Network fragmentation reduces degree of parallelism.
- 網絡結構太復雜(分支和基本單元過多)會降低網絡的并行程度。
- 以下是實驗中使用的結構:
- 實驗結果如下:
Guideline4 : Element-wise operations are non-negligible.
- Element-wise的操作消耗不可忽視。
- 通過去除shortcut和ReLU等,在GPU和ARM上都可以獲得將近20%左右的提速。
2.3、ShuffleNet v2
- ShuffleNet v1中可以優化的點:
- depthwise convolution和bottleneck結構增加了MAC。
- 組卷積中也使用了太多的組數。
- 跨層連接中的element-wise add等也可以去掉。
- 圖(a)和圖(b)是ShuffleNet v1中的Shuffle Unit,圖?和圖(d)是改進后的Shuffle Unit。
- 增加了Channel Split操作,實際上就是把輸入通道分為2部分。
- 依照guideline2,減少分組卷積的分組數。只將一半的通道送入卷積層,剩下一半保留。
- 依照guideline1,輸入與輸出通道數相同。每個分支中的卷積層的輸入輸出通道數都一致。
- 依照guideline3,減少基本單元數。因此有一個分支不做任何操作,直接做恒等映射。
- 依照guideline4,刪去一些element-wise操作。最后使用了concat替代了element-wise add,并去除了最后的ReLU。
- 最后加入了channel shuffle來增加通道之間的信息交流。
- 在網絡的最后,還要在平均池化層之前加入1×11 \times 11×1卷積層來進一步融合特征。
- 網絡結構:
2.4、實驗
- 幾個大型模型結果比較:
- 在COCO數據集下目標檢測結果比較:
- 多個模型綜合比較:
3、參考資料
總結
以上是生活随笔為你收集整理的论文笔记:ShuffleNet v2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记:ShuffleNet v1
- 下一篇: 论文笔记:PointNet