作者 | Kai Han, Yunhe Wang等
編譯 | Conv
出品 | AI科技大本營(rgznai100)
受限於內存空間和計算資源,將卷積神經網絡部署到嵌入式設備中會比較困難。CNNs中特徵圖的冗餘性是保證其成功的關鍵,但是在神經網絡的結構設計中卻鮮有研究。
本文提出了一個全新的Ghost模塊,旨在通過極其小的代價操作生成更多更豐富的特徵圖。基於一組固有的特徵圖,作者應用一系列線性變換,以很小的代價生成許多能充分揭示固有特徵信息的虛特徵圖(Ghost feature maps)。
新提出的Ghost模塊可以作為一個即插即用的組件來升級現有的卷積神經網絡,通過將Ghost模塊堆疊得到Ghost bottlenecks,然後就可以輕易的構建出輕量級的Ghost網絡——GhostNet。實驗證明了Ghost替代傳統卷積層的有效性,在ImageNet分類數據集上,與MobileNet v3相比,GhostNet在相似計算複雜度的情況下,top-1 上的正確率達到75.7% 。
引言
深度卷積神經網絡在諸如目標識別,目標檢測,實例分割等任務上都取得了很大的進步。為了獲得更好地準確率表現,傳統的卷積神經網絡需要大量的參數和浮點運算,在ResNet-50中,大約有25.6M的參數,如果需要處理一張224x224的圖片,需要的浮點數計算有4.1B。這種需求需要巨大的存儲空間和算力要求。對於嵌入式設備和移動計算來說基本不可能。
因此,需要探索同時兼顧輕量級和效率的網絡結構來滿足移動計算的需要。在過去的幾年,有很多探索輕量級網絡的方法被提出,代表性的有網絡剪枝,知識蒸餾等,除此之外,高效的神經網絡結構設計在建立高效的、參數和計算較少的深度網絡方面具有很高的潛力,並且最近已經取得了相當大的成功。這種方法也可以為自動搜索方法提供新的搜索單元,代表性的有MobileNet系列,將傳統卷積方法拆分為深度卷積和點卷積。
ShuffleNet主要思路是使用Group convolution和Channel shuffle改進ResNet,可以看作是ResNet的壓縮版本,進一步提升了輕量模型的性能。在一個訓練良好的深度神經網絡特徵圖中,通常會包含豐富甚至冗餘的信息,以保證對輸入數據有全面的理解。如下圖所示,在ResNet-50中,將經過第一個殘差塊處理後的特徵圖拿出來,其中三個相似的特徵圖使用相同顏色的框圈出。其中一個特徵圖可以通過對另一個特徵圖進行簡單的變換(用扳手錶示)來近似得到。這些相似的特徵映射對,就類似彼此的虛像,作者用Ghost表示,十分形象。
由此可見,特徵圖中的冗餘度是深度神經網絡成功的重要保證。作者並沒有刻意避免冗餘的特性圖,而是傾向於採用它們,但是以了一種低成本的方式。
在本文中,作者引入了新的Ghost模塊,旨在通過更少的參數生成更多更豐富的特徵。具體來說,Ghost模塊將傳統的卷積層劃分為兩部分。第一部分就是常規的卷積但是它們的數量會受到嚴格的限制。將第一部分得到的特徵圖作為固有卷積,應用一系列的線性變換生成更多特徵圖。在不改變輸出特徵圖尺寸的情況下,與普通卷積神經網絡相比,Ghost模塊的參數總需求和計算複雜度都有所降低。GhostNet就是在Ghost模塊的基礎上建立的。
作者首先在基準神經架構中替換原有的卷積層來證明Ghost模塊的有效性,然後在多個數據集上驗證GhostNets的性能。實驗結果表明,所提出的Ghost模塊在保持相似的識別性能的同時,能夠有效降低計算成本,並且GhostNets能夠超越目前最先進的深度模型模型MobileNetV3,適用於移動計算。
相關工作
目前對於輕量神經網絡的設計主要有兩大方法:模型壓縮和緊湊模型設計。
模型壓縮
對於給定的神經網絡,模型壓縮的目的是減少計算和存儲成本。連接剪枝將那些不重要的神經元連接剪掉,通道剪枝將無用通道去除,實現計算加速。模型量化用離散值表示神經網絡中的權重,實現壓縮和加速。知識蒸餾將網絡分為教師網絡和學生網絡,旨在通過強大的教師網絡得到兼具正確率和輕量的學生網絡。
緊湊模型設計
為了將神經網絡嵌入到移動設備上,近年來提出了很多緊湊型網絡。SqueezeNet利用bottleneck結構在比AlexNet減少50倍參數的基礎上,達到了相似精度。MobileNets是一系列基於深度可分卷積的輕量級深度神經網絡,經過三個版本的進化迭代,實現了很高的精度。ShuffleNet引入了shuffle機制,改進了通道組之間的信息流交換。雖然這些模型獲得了很好的性能,但是特徵圖之間的相關性和冗餘性一直沒有得到很好的利用。
方法
Ghost 模塊
深度卷積神經網絡通常包含大量的卷積計算,導致需要大量的計算成本,對移動計算,嵌入式設備來說很不現實。而事實上,主流CNNs的中間特徵圖中有廣泛存在的冗餘。作者提出通過減少諸如CNNs中的卷積核數量等來減少所需的資源需求。給定輸入數據X,表示為:
其中,c是通道數,h,w分別表示輸入數據的高和寬。任意卷積層生成n個feature map的操作可以表示為:
其中,*表示卷積操作,b是偏置項,此時得到的特徵圖Y維度信息為[h’ x w’ x n],需要的卷積核f維度信息為[ c x k x k x n ]。
接下來計算一下這個卷積過程需要的浮點數(FLOPs):
這個數據量高達數十萬,因為卷積核的數目n和通道數目c通常都非常大(例如256或512)
回顧常規卷積計算過程我們可以知道,要優化的參數(在f和b中)的數量由輸入和輸出特徵映射的維數顯式地確定,又因為卷積層的輸出特徵圖往往包含大量的冗餘,有些可能是相似的。作者認為沒有必要用大量的FLOPs和參數一個個地生成這些冗餘的特徵圖。設輸出的特性圖是通過對固有特性圖進行簡單轉換後得到的“幽靈”(Ghost)特徵圖。這些固有的特徵圖由常規卷積產生且尺寸較小。假定,現在的固有特徵圖Y’維度信息為[h’ x w’ x m ],可以通過一個普通卷積操作生成:
其中,f'維度為[c x k x k x m]。與上文中普通卷積的卷積核f相比,m小於等於n。其他的超參數諸如卷積核尺寸,填充方式,步長等都與普通卷積保持一致以此確保輸出的特徵圖空間大小與普通卷積相同。在保證了空間尺度相同的情況下,現在需要得到n維的feature maps,現在固有的feature maps只有m維。為此,作者對這些固有feature maps進行一系列簡單線性變換。具體公式為:
其中, 表示固有feature maps中的第i個特徵圖, 表示對第i個feature map進行的第j個線性變換,也就是說,某一層feature map可能對應多個線性變換,得到多個變換結果。在變換的最後,還需要增加一個同等映射,也就是將固有的feature maps原封不動的疊加到變換後的feature maps上去,以此保留固有特徵中的信息。通過上式,我們可以得到經過Ghost模塊後的n維特徵圖Y=[y11,y12,...,yms],n=mxs,示意圖如下:
線性操作 操作每個通道的計算成本遠小於普通的卷積,在實際操作中,在一個Ghost模塊中可能會有幾種不同的線性運算,這些將在實驗部分進行分析。
與現有方法的不同:
與那些利用1x1點卷積的方法相比,Ghost模塊對固有卷積的操作可以不限制卷積核大小。
現有的方法]採用逐點卷積跨通道處理特徵,然後採用深度卷積處理空間信息。與之相反,Ghost模塊首先通過普通卷積操作生成小數量的固有特徵圖,此時的空間大小信息已經固定,只需要再通過簡單的線性變化進行空間通道的擴充和豐富。
在過去的結構中,處理每個特徵圖的操作僅限於深度卷積或移位操作,而Ghost模塊中的線性操作可以具有較大的多樣性。
在Ghost模塊中,同等映射與線性變換並行,以保持原有的特徵映射。
GhostNets的構建
Ghost Bottlenecks
ResNet中的bottleneck結構大家非常瞭解,作者針對Ghost模塊,專門為小卷積構建了bottlenecks。如下圖所示,與ResNet中的結構很相似,在Ghost中,bottlenecks主要由兩個堆積的Ghost模塊構成,第一個Ghost模塊的作用是擴展特徵圖的通道數,我們把輸出通道數與輸入通道數之比稱為擴展比。第二個Ghost模塊的作用是減少通道數來匹配捷徑路徑(shortcut path)。然後將這兩個Ghost模塊的輸入和輸出連接起來,除了按照MobileNetV2的建議在第二個Ghost模塊之後不使用ReLU外,每一層之後都使用batch歸一化(BN)和ReLU進行非線性激活。下圖是針對步長為1和2時的結構。當步長為2時,shortcut通過下采樣實現,且在兩個Ghost模塊間插入步長為2的深度卷積。
有了Ghost bottlenecks,接下來開始構建GhostNets。作者參考了MobileNetV3的基本架構,利用Ghost bottlenecks代替了MobileNetV3中的bottlenecks。在GhostNets中,第一層是有16個卷積核的普通卷積,然後是一系列通道數逐漸增加的Ghost bottlenecks。這些Ghost bottlenecks根據其輸入特徵圖的大小被分組到不同的階段。所有的bottlenecks步長均為1,除了最後一個為2。最後利用全局平均池化和卷積層將特徵圖轉化為一個1280維的特徵向量進行最終分類。SENet中的擠壓激勵模塊(SE)也適用於某些bottlenecks層。與MobileNetsV3不同,GhostNets並沒用應用hard-swish激活函數,因為它的延時性很高。
寬度係數
儘管給定架構已經可以提供低延遲和保證精度,但在某些場景中,我們可能需要更小、更快的模型或更高的特定任務的精度。定製所需的網絡需求,可以在每一層簡單地乘以一個係數α來加寬網絡。這個因子α稱為寬度乘數,因為它可以改變整個網絡的寬度。寬度乘數可以控制模型大小和計算成本大約α平方。
實驗
數據集:CIFAR10,ImageNet,MS COCO
Ghost模塊有效性實驗
我們已經知道在卷積過程中生成的特徵圖中有一些相似的特徵映射對,它們可以通過一些線性操作來有效地生成。作者首先進行實驗來觀察原始特徵圖和生成的Ghost特徵圖之間的重構誤差。
以上圖中的的三對特徵映射為例,將左邊的特徵作為輸入,另一個作為輸出,利用一個小的深度卷積濾波器來學習映射,代表它們之間的線性操作。利用均方差MSE作為評價標準,結果如下圖所示,可以看到,MSE值非常小,表在深度神經網絡中,特徵圖之間存在很強的相關性,這些冗餘特徵圖可以由多個固有特徵圖生成。
除了上述實驗中用到的卷積,我們還可以探索其他一些低成本的線性操作來構造Ghost模塊,如仿射變換和小波變換。然而,卷積是一種高效的運算,已經得到了當前硬件的良好支持,它可以涵蓋許多廣泛使用的線性運算,如平滑、模糊、運動等。在Ghost有兩個超參數,分別是線性轉換中的卷積核大小d和步長s,結果如下所示,可以看到,提出的d=3的Ghost模塊比較小或較大的Ghost模塊性能更好。這是因為尺寸為1×1的卷積核不能在feature maps上引入空間信息,而尺寸較大的卷積核如d = 5或d = 7會導致過擬合和計算量增加。
因此,我們在接下來的實驗中採用d = 3進行實驗。s與得到的網絡的計算代價直接相關,s越大,壓縮比越大。當我們增加s的時候,FLOPs明顯減小,準確率逐漸降低,這與預期一致。特別是當s = 2表示將VGG-16壓縮2倍時,本文方法的性能甚至比原模型稍好一些,說明了所提出的Ghost模塊的優越性。
CIFAR-10實驗結果
作者將Ghost模塊嵌入VGG-16和ResNet-56中,得到新的網絡結構,稱為Ghost-VGG-16和Ghost-ResNet-56,利用CIFAR-10數據集評估Ghost模塊。結構如下圖所示,我們將GhostNet與VGG-16和ResNet-56架構中具有代表性的最新模型進行了比較,對於VGG-16,本文模型得到的精度略高於原始的模型且速度快2倍以上,說明VGG模型存在較大的冗餘
特徵圖可視化
如下圖所示,通過ghost模塊得到的特徵圖,雖然生成的feature maps來自於固有的feature maps,但是它們確實有顯著的差異,這意味著生成的feature足夠靈活,可以滿足特定任務的需要。左上角的圖像為輸入,左邊紅色框中的feature maps來自於固有卷積,右邊綠色框中的feature maps來自於經過Ghost模塊後的特徵輸出。
ImageNet實驗結果
將Ghost模塊嵌入到標準的ResNet- 50中,並在ImageNet數據集上進行實驗。結果如下表所示,在兩倍多加速的情況下,本文的方法可以獲得明顯更好的性能。當s增加到4時,模型精度下降了0.3%,計算速度提高了4倍左右。相比之下,採用相似權重或FLOPs的比較方法的性能要差得多。
GhostNet實驗結果
下表是最先進的小網絡在ImageNet上的實驗結果,可以看到,GhostNet超越了SOTA,兼顧了速度和準確率。
結論
為了降低當前深度神經網絡的計算成本,適應移動計算的需求。本文提出了一種新的Ghost模塊,用於構建高效的神經網絡結構。基本的Ghost模塊將原始的卷積分為兩部分,首先利用較少的卷積核生成幾個固有特徵圖,在此基礎上,進一步應用一定數量的線性變換操作,有效地生成豐富的特徵圖。
在基準模型和數據集上的實驗表明,該方法是一種即插即用的模型壓縮方法,可以將原始模型轉換為緊湊模型,同時保持可比較的性能。此外,使用新的Ghost模塊構建的GhostNet在效率和準確性方面都優於最先進的輕量級神經網絡架構。
論文鏈接:
https://arxiv.org/abs/1911.11907
GitHub 鏈接 (pytorch version):
https://github.com/iamhankai/ghostnet.pytorch
【end】
2月29日全天直播——中國「遠程辦公」大考·線上峰會
10+位來自華為、阿里、微軟、CODING等名企的專家大牛為大家做全天直播!
在線答疑、吐槽評論、現場抽獎等與大咖多維互動,不出家門,用程序員的方式來共同“抗”疫!
乾貨!從0到1教你打造一個令人上癮的聊天機器人?
黑科技抗疫,Python開發者大集結!
拿什麼拯救我的遠程辦公?
解析雲原生與雲計算本質區別,別再傻傻分不清楚了!
真實版“刪庫跑路”?程序員蓄意破壞線上生產環境!
遊戲之道
閱讀更多 AI科技大本營 的文章