天天看點

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&檢測都有較高性能(附源代碼下載下傳)

作者:計算機視覺研究院

關注并星标

從此不迷路

計算機視覺研究院

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&檢測都有較高性能(附源代碼下載下傳)
MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&檢測都有較高性能(附源代碼下載下傳)

公衆号ID|ComputerVisionGzq

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&檢測都有較高性能(附源代碼下載下傳)

論文位址:https://arxiv.org/pdf/2110.15352.pdf

源代碼:https://mcunet.mit.edu

計算機視覺研究院專欄

作者:Edison_G

MCUNetV2取得了MCU端新的ImageNet分類記錄71.8;更重要的是解鎖了MCU端執行稠密預測任務的可能性

一、背景

基于微控制器單元 (MCU) 等微型硬體的物聯網裝置如今無處不在。在如此微小的硬體上部署深度學習模型将使我們能夠實作人工智能的民主化。然而,由于記憶體預算緊張,微型深度學習與移動深度學習有着根本的不同:普通MCU通常具有小于512kB的SRAM,這對于部署大多數現成的深度學習網絡來說太小了。即使對于Raspberry Pi 4等更強大的硬體,将推理放入L2緩存(1MB)也可以顯着提高能源效率。這些對具有較小峰值記憶體使用量的高效AI推理提出了新的挑戰。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&檢測都有較高性能(附源代碼下載下傳)

現有工作采用修剪、量化和神經架構搜尋來進行高效的深度學習。但是,這些方法側重于減少參數和FLOP的數量,而不是記憶體瓶頸。緊張的記憶體預算限制了特征圖/激活大小,限制了我們使用較小的模型容量或較小的輸入圖像大小。實際上,現有的tinyML工作中使用的輸入分辨率通常很小(<224^2),這對于圖像分類(例如 ImageNet、VWW)來說可能是可以接受的,但對于像目标檢測這樣的密集預測任務來說是不可以接受的:如下圖圖所示,性能與圖像分類相比,輸入分辨率下物體檢測的退化速度要快得多。這種限制阻礙了微型深度學習在許多現實生活任務(例如,行人檢測中的應用)。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

研究者對高效網絡設計中每一層的記憶體使用情況進行了深入分析,發現它們的激活記憶體分布非常不平衡。以MobileNetV2為例,如下圖所示,隻有前5個塊的記憶體峰值較高(>450kB),成為整個網絡的記憶體瓶頸。其餘13個塊的記憶體使用率較低,可以輕松容納256kB的MCU。初始記憶體密集階段的峰值記憶體比網絡其他部分高8倍。這樣的記憶體模式留下了巨大的優化空間:如果我們能找到一種方法來“繞過”記憶體密集階段,我們可以将整體峰值記憶體減少8倍。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

二、前言

由于有限的記憶體,MCU(MicroController Units, MCU)端的TinyDL極具挑戰性。為緩解該問題,研究者提出一種廣義的patch-by-patch推理機制,它僅對特征圖的局部區域進行處理,大幅降低了峰值記憶體。然而,正常的實作方式會帶來重疊塊與計算複雜問題。研究者進一步提出了recptive field redistribution調整感受野與FLOPs以降低整體計算負載。人工方式重分布感受野無疑非常困難!研究者采用NAS對網絡架構與推理機制進行聯合優化得到了本次分享的MCUNetV2。所提推理機制能大幅降低峰值記憶體達4-8倍。所推MCUNetV2取得了MCU端新的ImageNet分類記錄71.8% ;更重要的是,MCUNetV2解鎖了MCU端執行稠密預測任務的可能性,如目标檢測取得了比已有方案高16.9%mAP@VOC的名額。本研究極大程度上解決了TinyDL的記憶體瓶頸問題,為圖像分類之外的其他視覺應用鋪平了道路 。

三、新架構

Patch-based Inference:

現有的推理架構(如TFLite Micro, TinyEngine, MicroTVM)采用layer-by-layer方式運作。對于每個卷積層,推理庫首先在SRAM中開辟輸入與輸出buffer,完成計算後釋放輸入buffer。這種處理機制更易于進行推理優化,但是SRAM必須保留完整的輸入與輸出buffer。研究者提出一種patch-based inference機制打破初始層的記憶體瓶頸問題,見下圖。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

所提patch-based推理則在記憶體密集階段以patch-by-patch方式運作 (見上圖右)。模型每次僅在小比例區域(比完整區域小10倍)進行計算,這可以有效降低峰值記憶體占用。當完成該部分後,網絡的其他具有較小峰值記憶體的子產品則采用正常的layer-by-layer 方式運作。

以上圖stride=1/2的圖示為例,對于逐層計算方式,第一層具有大輸入輸出尺寸,導緻非常高記憶體占用。通過空域拆分計算,以patch-by-patch方式開辟buffer并進行計算,此時我們僅需儲存一個塊的buffer而非完整特征圖。

Computation overhead:

記憶體節省的代價來自計算負載提升。為與逐層推理相同的輸出結果,非重疊輸出塊需要對應了重疊輸入塊(見上圖b陰影區域)。這種重複性的計算會提升網絡整體10-17%計算量,這是低功耗邊緣裝置所不期望的。

Reducing Computation Overhead by Redistributing the Receptive Field:

計算複雜度與patch方案初始階段的感受野相關,考慮到patch階段的輸出,越大的感受野對應越大的輸入分辨率,進而導緻更多的重疊區域與重複計算。對于MobileNetV2來說,如果我們僅考慮下采樣,每個輸入塊的邊長為。當提升感受野時,每個輸入塊需要采用尺寸,導緻更大的重疊區域。

研究者提出了重分布(redistribute)感受野以降低計算複雜度,其基本思想在于:

  • 降低patch階段的感受野;
  • 提升layer階段的感受野。

降低初始階段的感受野有助于降低patch部分的輸入尺寸與重複計算。然而,某些任務會因感受野較小導緻性能下降。是以,我們進一步提升layer部分的感受野以補償性能損失。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

上圖給出了以MobileNetV2為例調整前後的架構對比圖。在patch推理階段,采用更小的核與更少的子產品,而在layer推理階段提升子產品的數量。

對于兩種架構來說,patch推理可以降低SRAM峰值達8倍;原始MobileNetV2設計會導緻patch部分42%的計算量增加,整體增加10%;而調整的架構輸入尺寸從75下降到了63,整體計算量僅增加3%,模型性能保持同等水準。具體比較見下表:

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

Joint Neural Architecture and Inference Scheduling Search:

重新配置設定感受野使我們能夠以最小的計算/延遲開銷享受記憶體減少的好處,但政策因不同的主幹而有所不同。在設計主幹網絡(例如,使用更大的輸入分辨率)時,減少的峰值記憶體還允許更大的自由度。為了探索如此大的設計空間,研究者建議以自動化方式聯合優化神經架構和推理排程。給定某個資料集和硬體限制(SRAM 限制、Flash 限制、延遲限制等),我們的目标是在滿足所有限制條件的同時實作最高準确度。我們有以下要優化的旋鈕:

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

Backbone optimization:研究者參考MCUNet采用了類MnasNet搜尋空間,而類MobileNetV3搜尋空間因Swish激活函數問題導緻難以量化而棄用。作者認為:最佳的搜尋空間配置不僅硬體相關,同樣任務相關。是以,還将r與w納入搜尋空間。

Inference scheduling optimization:給定模型與硬體限制,将尋找最佳推理機制。架構的推理引擎基于MCUnet中的TinyEngine擴充而來,除了TinyEngine中已有的優化外,還需要确定塊數量p與子產品數量n以執行patch推理,確定滿足SRAM限制。

Joint Search:需要協同設計骨幹優化與推理機制。比如,給定相同限制,可以選更小的模型以layer方式推理,或更大的子產品以patch方式推理。是以,我們兩者納入優化并采用進化搜尋尋找滿足限制的最佳組合。

四、實驗

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

上圖1給出了Analytic profiling的結果,它僅與架構有關而與推理架構無關。可以看到:patch推理可以大幅降低峰值記憶體達3.7-8.0x,僅增加8-17%計算量;對于MobileNetV2,通過重分布感受野可以将額外的計算量從10%降到3%;記憶體節省與計算降低與網絡架構相關,故網絡架構與推理引擎的協同設計很有必要 。上圖2給出了on-device profiling的結果,它不僅與架構相關還與硬體相關。可以看到:patch推理可以降低SRAM峰值記憶體達4-6x 。某些模型可能會因初始階段的低硬體利用導緻更長的推理延遲,但合理的架構設計可以将額外推理延遲降低到4%,相比記憶體降低完全可以忽略。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

上表給出了ImageNet上的分類性能,從中可以看到:在256kB SRAM/1MB Flash硬體下,MCUNetV2具有比MCUnet高4.6%top1精度、低18%的峰值SRAM的性能。在512kB SRAM/2MB Flash硬體下,MCUNet取得了新的ImageNet記錄71.8%(限商用MCU),以3.3%超出了此前同等量化政策方案。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

在H7 MCU上,相比MCUNet,MCUNetV2-H7的性能提升達16.7%mAP;在更廉價的M4MCU上,MCUNetV2-M4仍可提升13.2%mAP名額,峰值SRAM降低1.9x。

MUCNetV2-M4與MCUNet具有相似的計算量,但更高的性能。這是因為:patch推理導緻的擴充搜尋空間使得我們可以在更大的輸入分辨率與更小的模型中作出更佳的選擇。

在不同尺度下,MCUNetV2均優于現有方案;MCUNetV2-L取得了同等檢測性能,但峰值記憶體被RNNPool-Face-C小3.4x,比LFFD小9.9x;計算量分别小1.6x與8.4x;MCUNetV2-S同樣具有比RNNPool-Face-A與EagleEye小1.8x的峰值記憶體。下圖還給出了檢測效果的對比,MCUNetV2的魯棒性更強。

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)
MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

Memory Distributions of Efficient Models

© THE END

轉載請聯系本公衆号獲得授權

MUCNetV2:記憶體瓶頸和計算負載問題一舉突破?分類&amp;檢測都有較高性能(附源代碼下載下傳)

計算機視覺研究院學習群等你加入!

計算機視覺研究院主要涉及深度學習領域,主要緻力于人臉檢測、人臉識别,多目标檢測、目标跟蹤、圖像分割等研究方向。研究院接下來會不斷分享最新的論文算法新架構,我們這次改革不同點就是,我們要着重”研究“。之後我們會針對相應領域分享實踐過程,讓大家真正體會擺脫理論的真實場景,培養愛動手程式設計愛動腦思考的習慣!

計算機視覺研究院

公衆号ID|ComputerVisionGzq

🔗

繼續閱讀