論文筆記《Multi-scale Dense Networks for Resource Efficient Image Classification》


剛剛入門model compression領域,這一篇文章比較經典為 ICLR2018 Oral,為Densenet作者所作

paper:https://arxiv.org/abs/1703.09844

code:https://github.com/gaohuang/MSDNet

pytorch版code:https://github.com/kalviny/MSDNet-PyTorch

Introuction

本文的核心主旨在於:在計算資源限制下對不同的圖像進行不同的處理,可以理解成對於簡單樣本采用簡單的方式處理,對於復雜樣本則盡可能給其分配資源,以避免不必要的資源浪費節省計算量,並且在這種推理的思想上要實現網絡對數據的自動適應。所以本文設計了一個新穎的二維多尺度網絡結構,根據不同的資源需求訓練了多個分類器,為了最大程度地重用分類器之間的計算,我們將它們作為早期出口並入單個深度卷積神經網絡,並通過密集連接將它們互連,該構架在整個網絡中同時保持粗略和精細的scale,獲得了良好的效果。

這樣的網絡結構在至少這兩種關於計算資源的設定下是有有效的,這兩種settings也是本文的核心:

  1. anytime prediction 指的是可以使網絡在任何給定的時間內給出預測結果,一個實際應用的例子在於對於手機而言,由於每一個手機的性能不同計算資源不同,為所有的手機訓練不同的網絡肯定是不可能的,你肯定想要的是設計一個單獨的網絡可以在所有設備上最大化使用效果。在這里每一個手機就代表的是每一個單個的樣本,雖然該方法雖然名字上是時間,但它只是以時間為參照給出每個設備所需要的資源限制條件,所給出的限制仍然是budget,關鍵在於每一個樣本產生限制。相當於對於輸入模型的每一張圖像都根據計算資源的限制來給出預測結果。
  2. budgeted batch prediction 指的是對於一個batch中的眾多樣本來說,共用一個固定的資源限制,可以自適應的在這一個batch中讓簡單樣本使用少一些的資源,讓復雜樣本使用多一些的資源。例如對於大型公司所需要處理的大量數據來說,如果能再簡單樣本上節省一點點的時間 對於之后的總體計算花費來說都是划算的。在這樣的一個batch中,如果計算資源總限制為B,這個batch中包含M個樣本數據,簡單樣本所分的資源應該小於B/M,復雜樣本應該大於B/M

在設計CNN網絡架構的過程中,遇到了這樣的兩個問題:

  1. 關於特征的提取,直接放進分類器的都是最后一層的特征,前面所提取的特征並沒有放進分類器,而且每一層提取不同的特征取決於所在的層數,如何把分類器放進去是一個問題
  2. 網絡中不同層的特征具有不同的scale,前面的幾層operate on a fine scale以提取low-level特征,后面的層通過池化或跨步卷積(strided convolution)變成coarse scale,讓全部的內容進入分類器,這就說明不同層所提取出的特征具有較大差異希望在前面的幾層中也可以有后面的coarse scale。

使用了一系列的中間分類器,問題的解決方案:

  1. 通過密集連接dense connectivity解決了分類器的內部表示形式,所有的層與所有的分類器相連接,特征不再由早期出口所決定,而且前期和后期分類器之間的權衡可以作為損失函數很好的進行。
  2. 第二個問題在於早期層缺乏corase scale所提取到的特征,引入了多尺度的網絡結構解決,也就是multi-scale,在每一層我們都產生所有scale的特征,有利於分類也有利於提取低層次特征,只有在經過多層處理后才有用。

關於這兩個問題后面的部分會進一步詳細說明,這也是文章的核心

Network

圖為MSDNet整體結構,具體細節在下文中會進行介紹,每一列代表一層,每一行代表一個scale。

中間的早期分類器會損害神經網絡性能的原因有兩個:

問題:缺乏corase-level特征 傳統神經網絡在前幾層學習fine scale的特征,通過重復卷積池化跨步卷積等在后面的層中學習corase scale的特征,corase scale features對於整個圖片的分類至關重要,早期的層缺乏此類特征所以早期退出的分類器可能會錯誤率較高。Figure 3左圖DeseNet和ResNet顯示了相關的實驗結果,分類器的准確性與其在網絡中的位置高度相關。 特別是在ResNet(藍線)的情況下,比較明顯。

解決:Multi-scale features maps 讓所有的分類器僅使用coarse-level features,在特定層的feature map 通過concatenate一個或兩個卷積來進行計算,包括兩種情況:一是對於將常規卷積應用於前一層的相同scale特征上的結果(Figure2中水平連接)二是對於前一層對fine-sale的特征圖應用跨步卷積的結果(Figure2中對角線連接)。水平連接可保留和處理高分辨率信息,這有助於在以后的圖層中構造高質量的corase features。 垂直連接在整個過程中都會產生corase features,可以進行分類。 圖3中的黑色虛線顯示MSDNet大大提高了早期分類器的准確性。

問題:早期分類器干擾最后的分類器 Figure 3右圖說明了分類器放置位置對於最后分類器的影響,事實說明藍色曲線可以看出對於ResNet中間分類器着實影響了最后的分類器,我們假設ResNet中的這種准確性下降可能是由於中間分類器影響了針對短期而非最終層進行優化的早期功能。 這提高了立即分類器的准確性,但折疊了在后續層中生成高質量特征所需的信息。 當第一個分類器附加到較早的層時,此效果會更加明顯。

解決:密集連接 Dense Connectivity將每一層與所有后續層連接起來,並允許后續層繞過針對短期優化的特征,以保持最終分類器的高精度。 如果較早的層折疊了信息以生成short-term features,則可以通過直接連接到其上一層來恢復丟失的信息。 最終分類器的性能(或多或少)與中間分類器的位置無關。 據我們所知,這是第一篇發現密集連接是深度網絡中早期退出分類器的重要元素的論文,我們將其作為MSDNet中不可或缺的設計選擇。

 Architecture

該圖為網絡架構的3D結構,更明顯的看出普通卷積 跨步卷積 concatentation操作等

第一層 第一層唯一之處在於它包括垂直連接,主要目的是找到所有S個scale上的表示形式,可以將其垂直的布局視為一個微型的S層卷積網絡,例如圖中為S=3,coarse scales的特征圖是通過下采樣的方式所得到。

后續層 后續層所生成的feature map為所有之前scale s和s-1的feaure maps的結合

分類器 MSDNet中的分類器遵循最coarse scale的密集連接模式,l層的分類器利用之前所有的層在scale S上的特征,每個分類器包括兩個卷積層然后是一個平均池化層和一個線性層,在實驗中我們僅將分類器附加到某些中間層,利用fk表示第k個分類器,在anytime的設置中我們通過網絡傳播送輸入直到預算用盡輸出最近的一個預測,在budgeted設置中,一個樣本在網絡中遍歷在某一個分類器置信度超過一個閾值后退出。在訓練前,我們計算處理網絡到第k個分類器所需要的計算成本Ck,我們用q表示一個固定的退出概率,即到達分類器的樣本有足夠的置信度退出分類,我們假設q在所有層都是一個常量,我們就可以計算每個分類器退出的概率記為qk,要保證在每一個分類器退出的概率之和為1,在測試時我們還需要保證所有的樣本的開銷不超過我們的總budget B,這樣我們就解決好了q的約束,並且決定了在每一個分類器退出的閾值

Loss Function 每個分類器都采用了cross entropy loss,並且最小化了一個加權累計loss,如果提前預知了buget的分布P(B),我們可以用權重將我們對預算B的先驗知識加入學習中, 根據經驗,我們發現對所有損失函數使用相同的權重在實踐中效果很好。

Network reduction and lazy evalution  有兩種直接可以減少計算需求的方法。首先,在最后幾層的時候還保留着所有的fine scale是沒有必要的,一個簡單的策略就是通過在深度上划分成S個blocks以減小網絡的大小,在第i個block中只保留最coarse的S-i+1個scale,如Figure9所示,這樣在訓練和測試中均可以降低計算。每次移除一個scale時,我們在兩個block中添加一個transition層,該層在通過strided convolution將fine-scale feature輸入到coraser scale前利用1x1卷積concatenat特征並且將channel切割為原來的一半,這一步有點像DenseNet-BC。第二,由於l層的分類器僅使用最coarse scale上的特征,l層上較為fine的feature map和先前S-2層中一些較精細的特征圖不會影響分類器的預測,因此,我們將計算group在“對角線塊”中,以便我們僅沿着評估下一個分類器所需的路徑傳播樣本。 當我們由於計算預算用盡而需要停止時,這將不必要的計算減到最少。我們將此策略稱為懶惰評估。

Experiments

在三個數據集上進行了實驗 分別是CIFAR-10,CIFAR-100,ImageNet ILSVRC2012

Datasets 兩個cifar數據集包括訓練集50000張圖測試集10000張圖,均為32x32,用5000張訓練圖像作為驗證集,分別包括10和100類,遵循何凱明ResNet將標准的數據增強技術應用於訓練圖像,圖像的每邊zero-padding 4 pixels,然后隨機裁剪以生成32×32圖像。 圖像以0.5的概率水平翻轉,並通過減去通道平均值並除以通道標准偏差進行歸一化。 ImageNet數據集包括1000類,總共有120萬張訓練集和50,000個驗證集。我們從訓練集中拿出50,000張圖像,以估計MSDNet中分類器的置信度閾值。 在訓練時我們采用何愷明ResNet的數據擴充方案,在測試時,我們對尺寸為256×256像素的224×224中心圖像進行分類。

Training Details 在兩個CIFAR數據集上都用最小batch64的隨機梯度下降進行訓練,使用Nesterov動量,我們使用Nesterov動量,其動量權重為0.9而無衰減,權重衰減為10−4  。 對所有模型進行了300個epoch的訓練,初始學習率為0.1,在150和225個時期后將其除以10。 我們將相同的優化方案應用於ImageNet數據集,但將最小批處理大小增加到256,並且所有模型都訓練了90個epoch,學習率在30和60個時期后下降。

anytime prediction

在anytime的預測設置中,該模型都將在所有類別上保持逐步更新的分布,並且可以強制該模型在任意時間輸出其最新的預測。我們發現,在我們范圍內的任何計算預算下,MSDNet的性能都大大優於ResNets MC和DenseNets MC(MC代表多個分類器)。這是由於這樣的事實,即MSDNet僅經過了幾層,就生成了比ResNets或DenseNets早期層中的高分辨率特征圖更適合分類的低分辨率特征圖。盡管在預算很小的情況下,MSDNet的表現與整體ensemble相當,但它幾乎在所有計算預算方面都優於其他基准。在預算極低的情況下,ensemble具有優勢,因為它們的預測是由第一個(小型)網絡執行的,該網絡專門針對低預算進行了優化。但是,隨着預算的增加,ensemble的准確性提高的速度幾乎沒有提高。一旦ensemble需要評估第二個模型,MSDNet的性能便會超越它,因為與MSDNet不同的在於,它需要重復計算相似的low-level features,實驗結果如下圖所示:

budgeted batch classification

 在budgeted batch設置中,預測模型接收一批M個實例和用於對所有M實例進行分類的計算預算B。 在這種情況下,我們使用動態評估:在早期分類器上盡早退出“簡單”示例,同時在整個網絡中傳播“困難”示例。根據在驗證集上的准確性為每個預算選擇最佳模型,如圖所示:

Details

我們在CIFAR數據集上使用具有3個scale的MSDNet,並應用了network reduction。Figure 9給出了簡化網絡的示意圖。 卷積層在第一層中起作用,表示3×3卷積(Conv),批處理歸一化(BN)和ReLU激活的序列。 在跨步卷積的計算中,通過使用跨度為2的冪的卷積進行卷積來執行下采樣。對於后續的特征層,普通卷積和跨步卷積的轉變是根據DenseNets中的設計定義的:Conv(1×1)-BN-ReLU-Conv(3×3)-BN-ReLU。我們將三個scale的輸出通道數分別設置為6、12和24。 每個分類器都有兩個下采樣卷積層和128維3×3濾波器,然后是2×2平均池化層和線性層。

用於ImageNet的MSDNet具有4個scale,分別在每個圖層上生成16、32、64和64個特征圖。 network reduction也用於減少計算成本。 在進入MSDNet的第一層之前,首先通過7×7卷積和3×3最大池化(均具有步幅2)對原始圖像進行轉換。 分類器具有與CIFAR數據集相同的結構,除了每個卷積層的輸出通道數設置為等於其輸入通道數。

Network architecture for anytime prediction 在anytime設置下MSDNet有24層,分類器對於第2*(i+1)的輸出進行處理,對於ImageNet,MSDNet具有4個scale,第i個分類器對於第(k*i+3)層進行處理,其中k=4,6,7,為簡單起見,所有的分類器的損失均具同樣的權值。

Network architecture for budgeted batch setting 兩種CIFAR數據集上的層數在10-36之間,第k個分類器附加到前k個層,用於ImageNet的MSDNet與之前anytime設置描述的MSDNet相同。

Ablation Study

對於MSDNet的三個主要組件,進行了其他實驗,包括:multi-scale feature maps,dense connectivity,intermediate classifiers.  我們從具有六個中間分類器的MSDNet開始,依次刪除三個主要組件。 為了使我們的比較公平,我們通過調整網絡寬度(即每層輸出通道的數量),使整個網絡的計算成本保持相似,約為3.0×108FLOPs。 在刪除MSDNet中的所有三個組件之后,我們獲得了一個類似於VGG的常規卷積網絡。 我們在圖10的左面板中顯示了模型中所有分類器的分類准確性。可以觀察到以下幾點:1.緊密的連接對於MSDNet的性能至關重要,並且刪除它會嚴重損害整體准確性(橙色與黑色) 曲線);  2.消除多尺度卷積只會損害較低預算區域的准確性,這與我們的動機-多尺度設計在早期引入區分特征的動機是一致的;  3.在完全符​​合其評估成本的特定預算下,最終的規范CNN(星級)的性能與MSDNet類似,但不適合變化的預算約束。 與沒有密集連接(橙色曲線)的模型相比,最終的CNN在其特定預算區域的性能要好得多。 這表明密集的連通性與多個分類器結合在一起特別重要。

More Efficient Densenets

在這里,我們討論探索MSDNet體系結構時的一個有趣發現。 我們發現遵循DenseNet結構來設計我們的網絡,即通過在所有規模上保持輸出通道數(或增長率)相同,並不能在准確性和速度之間取得最佳平衡。 主要原因是,與ResNets等網絡體系結構相比,DenseNet結構傾向於在網絡的高分辨率特征圖上應用更多的過濾器。 這有助於減少模型中的參數數量,但與此同時,它會大大增加計算成本。 我們嘗試通過在每個過渡層之后增加一倍的增長率來修改DenseNet,以便將更多過濾器應用於低分辨率特征圖。 事實證明,所得的網絡(我們稱為DenseNet *)在計算效率方面明顯優於原始的DenseNet。
我們在兩個設置中以測試時間預算約束條件對DenseNet *進行了試驗。 圖8的左面板顯示了變化深度的DenseNets *集合的隨時預測性能。 它在很大程度上優於原始DenseNets的深度變化整體,但是仍然比MSDNets差一點。 在預算批處理預算設置中,在所有預算下,DenseNet *的准確性都大大高於其對應的副本,但在MSDNets方面仍然遠遠優於其他同類產品。

Conclusion

我們的設計基於兩個高級設計原理,以生成並維護整個網絡的coarse level features,並以密集的連接性互連各層。 前者允許我們甚至在早期階段就引入中間分類器,后者確保這些分類器不會互相干擾。 最終設計是水平和垂直層的二維陣列,可將深度和feature coarseness分離。在傳統的卷積網絡中,feature只會隨着深度的增加而變得coarser,而MSDNet會從第一層開始生成所有分辨率的功能,並始終保持這些分辨率,實驗結果是架構具有前所未有的效率范圍,可以在一定的計算預算范圍上勝過所有競爭基准。

ps:今年CVPR ECCV均有文章是在MSDNet基礎上進行的,后續會繼續分享,第一次寫博客,大部分時進行原文的翻譯工作,在anytime和budgeted兩種setting的理解值得再次推敲,而且在訓練和測試兩個過程分別是怎么處理的還沒完全弄清,如有問題歡迎批評指正。

 

參考

1、http://www.voidcn.com/article/p-ewetechd-brk.html

2、https://www.cnblogs.com/RyanXing/p/MSDNet.html

3、https://blog.csdn.net/u014686356/article/details/79626471

 


免責聲明!

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



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