論文筆記 HarDNet: A Low Memory Traffic Network

楊詠翔
4 min readMar 24, 2020

--

Overview

本文是輕量模型Harmonic DenseNet: A low memory traffic network (ICCV 2019 paper),作者有在Detection與Segmentation這兩種task上做驗證,在github上還都附有詳盡的訓練代碼,十分佛心。https://github.com/PingoLH/Pytorch-HarDNet

Reducing model

通常越少參數,整體的MAC(浮點數乘算)也就越少,而且DRAM動態加載參數的耗時也會下降,所以有些論文的指標會以Accuracy–Parameters ratio這個比值去做為參考。例如Resnet DenseNet就具有很高的Acc-Param ratio。

DRAM的存取不只與模型參數的讀寫有關,其中在Segmentation的任務中,由於輸入常常是高解析度的圖片,經過Fully Convolution的架構時,產生的Feature Map往往超過參數的存取,因此作者提出假設: 減少DRAM在Feature Map上的讀寫可以加快 推理的速度

Shrinking feature maps

最直接簡單的方式就是減縮FeatureMap的大小,可惜無損壓縮的研究十分稀少,大多是量化壓縮的相關研究,這通常伴隨著精準度下降的副作用。作者目標提出降低DRAM讀寫,而且不損及精準度的模型架構。

Metric

測試的指標直接使用Nvidia profiler 以及 ARM Scale Sim分別於伺服器及開發板上測試。另外作者自行提出 Convolutional Input/Output(CIO)這個指標,這可以近似成實際的DRAM的IO情況。不過,對於Concate的情況這個指標會重複計算,需要小心。

透過改變每層CNN CIO的比值,可以找出不增加推理時間的特定比值,然而這個數字通常與平台有關。

在這張圖中,我們可以看出作者的策略在於避免低MoC高CIO這種沒效率的情況發生。

Harmonic DenseNet

從架構圖中,與一般DenseNet不同的是,作者讓layer k 與 layer k-2ⁿ連接,一旦2ⁿ處理完成,2ⁿ -1 前的Feature Map都可以從DRAM中釋放。

bottleneck

DenseNet 使用bottleneck 來縮減參數量,因為作者已經平衡了Channel ratio所以這部分變的可有可無,不過為進一步縮減模型大小,作者還是有使用這個模塊,公式為root(cin/cout) * cout 。

另外,在transition layer後方的架構,也有做一些微的修改。

CamVidDataset

ObjectDetection

看這個Detection 數據確實不太好呀XD
建議要搞偵測的話還是乖乖使用Efficient Net吧

--

--