VarGNet: Variable Group Convolutional Neural Network for Efficient Embedded Computing - 1 -論文學習


 

VarGNet: Variable Group Convolutional Neural Network for Efficient Embedded Computing

Abstract

在本文中,我們提出了一種新的用於高效嵌入式計算的網絡設計機制。受到有限的計算模式的啟發,我們建議固定分組卷積中的通道數,而不是現有的固定總組數的做法。我們的基於解決方案的網絡,稱為可變分組卷積網絡(VarGNet),可以在硬件方面更容易地優化,因為層之間的計算方案更加統一。在分類、檢測、像素解析和人臉識別等各種視覺任務上的大量實驗證明了VarGNet的實用價值。

 

1 Introduction

授權嵌入式系統運行眾所周知的深度學習架構,如卷積神經網絡(convolutional neural networks, CNNs),是近年來的一個熱門話題。對於智能物聯網應用而言,具有挑戰性的部分是要求整個系統具有能量約束和體積小的特點。為了迎接挑戰,提高整個計算過程的效率的工作大致可以分為兩個方向:

  • 第一個方向是設計具有小型MAdds的輕量級網絡[20,38,52,30],從而對低功耗平台友好;
  • 二是優化硬件端配置,如基於FPGA的加速器[13,50],或者通過改進編譯器和生成更多智能指令來提高整個計算過程的效率[2,6,48]。

上述工作都表明了它們在各種應用中的巨大實用價值。然而,由於兩個不同的優化方向之間的差距,實際性能可能達不到設計者的期望。具體來說,對於使用小型madd精心調優的網絡,總體延遲可能很高,而對於精心設計的編譯器或加速器,實際網絡可能很難處理。

在本論文中,我們打算通過系統地分析一個對嵌入式硬件和相應的編譯器友好的輕量級網絡的必要特性來彌補現有的差距。更准確地說,由於嵌入式系統中芯片的計算模式受到嚴格的限制,因此我們提出一個嵌入式系統友好的網絡應該適合目標計算模式和理想的數據布局。通過擬合理想的數據布局,可以降低片內存儲器與片外存儲器之間的通信成本,從而充分利用計算吞吐量。


通過觀察發現,如果網絡中操作的計算強度更平衡,則網絡計算圖更容易優化。我們提出了基於depthwise可分卷積的可變分組卷積[25,8,47]。在可變分組卷積中,每個組的輸入通道數是固定的,可以作為超參數進行調整,這與分組卷積中組數是固定的是不同的。這樣做的好處有兩方面:從編譯器的角度來看,固定通道的數量更適合於優化,因為它具有更一致的計算模式和數據布局;與[20,38]中設置組數為通道數的depthwise卷積相比,可變分組卷積具有更大的網絡容量[38],從而允許更小的通道數,這有助於減輕片外通信的時間消耗。

我們網絡的另一個關鍵組件是更好地利用基於反向residual塊[38]的片上存儲器。然而在MobileNetV2[38]中,通道的數量是通過pointwise卷積來調整的,其與使用3×3 內核的depthwise卷積有着不同的計算模式,因此由於計算模式有限,很難進行優化。因此,我們提出先通過可變分組卷積將具有C通道的輸入特征擴展到2C,然后通過pointwise卷積將其返回到C。通過這種方式,兩種類型的層之間的計算成本更加平衡,因此對硬件和編譯器更加友好。綜上所述,我們的貢獻可以總結如下:

  • 我們從網絡架構和嵌入式系統的硬件/編譯器的角度系統地分析了如何優化CNNs的計算。我們發現在這兩個優化方向之間存在一個缺口,即在嵌入式系統中,由於計算模式的限制,一些精心設計的架構很難被優化。
  • 考慮到更統一的計算模式和數據布局對嵌入式系統更友好,我們提出了可變分組卷積和相應的改進的全網絡,簡稱變群網絡和VarGNet。
  • 對常見的視覺任務,如分類、檢測、分割、人臉識別等,以及相應的大規模數據集進行了實驗,驗證了我們提出的VarGNet算法的實用價值。

 

2 Designing Efficient Networks on Embedded Systems

對於在嵌入式系統中使用的芯片,如FPGA或ASIC,較低的單價和較快的上市時間是整個系統設計的關鍵因素。這些關鍵點導致了一個相對簡單的芯片配置。換句話說,與通用處理單元相比,計算方案受到了嚴格的限制。然而,SOTA網絡中的操作非常復雜,有些層可以通過硬件設計來加速,而有些則不行。因此,為了在嵌入式系統上設計高效的網絡,這里的第一直覺是,網絡中的各個層在某種意義上應該是相似的。
另一個重要的直覺是基於CNNs中使用的卷積的兩個屬性。第一個屬性是計算模式。在卷積中,幾個過濾器(內核)在整個特征圖上滑動,表示內核被重復使用,而來自特征圖的值只使用一次。第二個屬性是卷積核和特征映射的數據大小。通常情況下,卷積核的大小遠遠小於特征映射的大小,例如在2D卷積中,kernel的大小是k2C, 特征映射的大小是2HWC。根據上述兩個特性,一個巧妙的解決方案是先加載內核的所有數據,然后依次進行提取和提取特征數據[48]的卷積。這種實用的解決方案是我們用於嵌入式系統上高效網絡設計的如下兩個指導方針的第二個直覺:

  • 塊之間的中間特征映射的大小越小越好。
  • 塊中各層的計算強度應保持平衡。

 

Small intermediate feature maps between blocks. 在SOTA網絡中,通常的做法是先設計一個普通塊和一個下采樣塊,然后將幾個塊疊加在一起,得到一個深度網絡。此外,在這些塊,residual連接[18]被廣泛采用。因此,在最近的編譯器端優化[48]中,塊中的層通常被分組並一起計算。在這種方式下,片外存儲器和片內存儲器僅在啟動或結束網絡中一個塊的計算時進行通信。因此,塊之間更小的中間特征映射肯定有助於減少數據傳輸時間。

Balanced computational intensity inside a block. 如上面所述,在實踐中,在執行卷積之前要加載多個層中的權值。如果加載的層在計算強度方面有很大的差異,則需要額外的片上內存來存儲特征映射的中間片。在MobileNetV1[20]中,使用了一個depthwise卷積和一個pointwise卷積。與以前的定義不同,在我們的實現中,權重已經加載。因此,計算強度是根據MAdds划分特征圖的大小來計算的。那么,如果特征映射的大小為28×28×256,則depthwise卷積和pointwise卷積的計算強度分別為9和256。因此,當運行這兩個層時,我們必須增加芯片上的緩沖區來滿足pointwise,或者不將這兩個層的計算分組在一起。

 

3 Variable Group Network

在前面提到的兩個准則的基礎上,我們在本節中提出了一個新的網絡。為了平衡計算強度,我們將網絡中一個組中的通道數設置為常數,從而使得每個卷積層中的組數都是可變的。如果我們看一下卷積的MAdds,就會發現固定通道數的動機並不難理解:

因此,如果特征映射的大小為常數,則通過固定G = Channels/Groups,塊內的計算強度更加均衡。此外,可以設置組中的通道數量來滿足處理元素的配置,每次處理一定數量的通道。

 

####### 額外添加的解釋 - 開始 (可見VarGFaceNet)##########

在MobileNet等網絡中使用的depthwise-pointwise結合網絡中,depthwise卷積中的G = Channels/Groups = 1,因為將卷積中的groups數設置為與channels數相同的數量

這個提出的可變分組卷積怎么使用呢? 就是用它來替代depthwise-pointwise結合網絡中的depthwise卷積部分,這樣替代的好處是什么呢:

MobileNet和MobileNetV2提出了depthwise可分卷積,它是在分組卷積的基礎上提出的,既節省了計算成本,又保持了卷積的判別能力。然而,depthwise可分離卷積在卷積1×1中花費了95%的計算時間,導致兩個連續的層(Conv 1×1和Conv DW 3×3)之間存在較大的MAdds間隙(即兩者的MAdds的差距較大)。這個缺口對那些加載所有網絡權值來執行卷積[24]的嵌入式系統是不友好的:嵌入式系統需要額外的緩沖區來執行卷積1×1。
為了保持塊內計算強度的平衡,VarGNet[26]將組內的信道數設為常數S,即上面的G。可變分組卷積的計算代價為:

該層的輸入為hi × wi × ci,輸出為hi × wi × ci+1。k是核的大小。當MobileNet中使用可變分組卷積代替depthwise卷積時,pointwise卷積的計算成本為: 

 這樣可變分組卷積和pointwise卷積的計算開銷比例為 k2S / ci+2 ,而depthwise卷積和pointwise卷積的比例為k2 / ci+2。實際上,ci+2 >> k2, S > 1,所以 k2S / ci+2 > k2 / ci+2。因此,在pointwise卷積的基礎上使用可變分組卷積而不是depthwise卷積,在塊內的計算會更加均衡。

S > 1表示與depthwise卷積(核大小相同時)相比,可變分組卷積具有更高的MAdds和更大的網絡容量,能夠提取更多的信息。

####### 額外添加的解釋 - 結束 ##########

 

與depthwise卷積相比,可變分組卷積增加了MAdds和增強了表達能力[38]。因此,現在我們能夠減少網絡中間特征映射的通道數量,同時保持與以前網絡相同的泛化能力。具體而言,我們設計了如圖1所示的新型網絡塊:

對於整個網絡早期使用的normal塊,由於此時權值的大小比較小,所以四層的權值都可以緩存到片上存儲器中。當進入晚期,通道數增加和權重的大小增加,normal塊也能夠通過只加載一個可變分組卷積和pointwise卷積來優化。同樣,下采樣塊的操作也對編譯器方面和硬件方面的優化表現友好。一個normal塊的整個計算過程如圖2所示:

然后,基於MobileNetV1[20]的架構,我們將他們的basic塊替換為我們的,整個詳細的網絡架構如表1所示:

另外,另一個基於ShuffleNet v2的架構如表2所示:

 

 

4 Experiments

4.1 ImageNet Classification

我們的模型在ImageNet上的結果如表3和表4所示:

 

 

訓練超參數設置為:batchsize為1024,crop ratio為0.875,學習率為0.4,使用余弦學習率調度,權重衰減為4e-5,訓練周期為240。我們可以觀察到VarGNet v1比MobileNet v1性能更好,如表3所示。從表4中的(c)可以看出,當模型規模較小時,VarGNet v2的性能要差於ShuffleNet v2,這是由於VarGNet v2中使用的通道較少造成的。然后,當模型規模較大時,我們的網絡表現得更好。

 

4.2 Object Detection

在表5中,我們展示了我們提出的VarGNet的性能及與其比較的方法:

我們評估了我們提出的網絡在COCO數據集[27]上的目標檢測性能,並將其與其他最先進的輕量級架構進行了比較。我們選擇基於FPN的Faster R-CNN[26]作為框架,所有實驗都在相同的設置下進行,輸入分辨率為800×1333,epochs為18。特別地是,我們發現如果使用更多的epoch來訓練ShuffleNet v2可以獲得更好的准確性,因此我們為ShuffleNet v2訓練了一個擁有27個epoch的模型。在測試時,RPN階段評估每幅圖像的1000個proposals。除8000張最小圖像外,我們使train+val集進行訓練,最后在minival集上進行測試。

 

4.3 Pixel Level Parsing

4.3.1 Cityscapes

在Cityscapes數據集[9]上,我們設計了一個多任務結構(圖3a)來進行兩個重要的像素級解析任務:單圖像深度預測和分割:

 

Training setup. 我們使用標准的Adam優化器,將權重衰減設置為1e-5,batchsize設置為16。初始化學習率為1e-4,多項式衰減為0.9。總訓練時間設置為100。為了增加數據,使用了隨機水平翻轉,並從0.6-1.2中隨機選擇比例來調整圖像的大小。對於多任務訓練,我們將損失函數定義為:

 當任務是全景分割是,設置λinstance=0.2, λsemantic=1.0。之后添加深度任務,設置λdepth=0.08

 

Results. 比較方法的參數和MAdds如表6所示:

分割結果和深度預測的可視化示例分別見表7和圖4:

 

 

上述表格證明了VarGNet v1和v2的優異。與大型網絡相比,VarGNet v1和v2是有效的,且可以表現得一樣好。

 

4.4 KITTI

Trainning setup. 對於KITTI數據集[14]上的單幅圖像的深度預測和立體任務,我們給出了基於VarGNet的模型的性能。實驗采用了一個U-Net風格的體系結構(3b):

所有的深度模型都是在KITTI RAW數據集上訓練的,我們測試了來自Eigen等人[12]分割的29個場景中的697張圖像,並對其余32個場景中的23488張圖像進行了訓練。所有實驗結果均在0m ~ 80m、0m ~ 50m深度范圍內進行評價。評價指標與以往工作相同。所有的立體模型都是在KITTI RAW數據集上訓練的,我們測試了Eigen等人分割的測試集[12],以及KITTI15的訓練集。stereo的評價指標為EPE和D1。在訓練期間,使用標准的SGD優化器,momentum設置為0.9。resnet18和resnet50的標准權重衰減設置為0.0001,其他設置為0.00004。迭代次數設置為300個epoch。初始學習率為0.001,學習率在[120,180,240]的epoch處衰減0.1。我們使用4個GPU來訓練模型,batchsize設置為24。

Results. 在表8和表9中,我們展示了我們在各種評價指標下的深度結果和立體結果。同時,我們報告了將我們實現的MobileNet和ResNet作為比較方法的結果:

 

 

此外,視覺效果如圖5和圖6所示:

 

 

 

4.5 Face Recognition

所有的網絡都在MS-Celeb-1M-v1c數據集[1]上進行訓練,該數據集從MS-Celeb-1M-[16]中清理而成。有來自86,876個id的3,923,399個對齊的人臉圖像。驗證數據集使用LFW[21]、CFP-FP[39]和AgeDB-30[32]。最后,在MegaFace Challenge 1[33]上對所有網絡模型進行評估。表10列出了驗證數據集的最佳人臉識別准確率,以及MegaFace數據集[11]的改進版本在1e-6錯誤接受率下的人臉驗證真實接受率:

我們使用MobileNet v1和MobileNet v2作為基線模型。為了適應輸入圖像大小為112x112,對於每個基線和vargnet網絡,將第一卷積層的stride設置為1。為了獲得更好的性能,我們進一步將池化層替換為“BN-Dropout-FC-BN”結構,即InsightFace[11],然后跟着的是ArcFace loss[11]。標准的SGD優化器與momentum為0.9一起使用,batchsize設置為512,配置8個gpu。學習率從0.1開始,在100K、140K和160K迭代時除以10。我們設權重衰減為5e-4。嵌入特征維數為256,dropout率為0.4。歸一化比例為64,ArcFace margin設置為0.5。所有的訓練都基於InsightFace toolbox[11]。

 


免責聲明!

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



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