論文:《EfficientFormer: Vision Transformers at MobileNet Speed 》
Vision Transformers (ViT) 在計算機視覺任務中取得了快速進展,開啟了 Vision + Transformer 的先河,之後大量的論文和研究都基於 ViT 之上的。不過呢,Transformer 由於 Attention 的結構設計需要大量的引數,執行的效能也比經過特殊優化的 CNN 要慢一點。
像是之前介紹的 DeiT 利用 ViT + 蒸餾讓訓練得更快更方便,但是沒有解決 ViT 在端側實時執行的問題。於是後來有了各種 MateFormer、PoolFormer 等各種 XXXFormer 的變種。應該在不久之前呢,Facebook 就提出了 mobilevit,借鑑了端側 YYDS 永遠的神 mobileNet 的優勢結構和 Block(CNN) + ViT 結合,讓 ViT 開啟了端側可執行的先河。不管是 XXXFormer 還是 mobileNet,主要是試圖通過網路架構搜尋(AutoML)或與 MobileNet 塊的混合設計來降低 ViT 的計算複雜度,但推理速度嘛,還是沒辦法跟 mobileNet 媲美。
這就引出了一個重要的問題:Transformer 能否在獲得高效能的同時跑的跟 MobileNet 一樣快?
作者重新審視基於 ViT 的模型中使用的網路架構和具體的運算元,找到端側低效的原因。然後引入了維度一致的 Transformer Block 作為設計正規化。最後,通過網路模型搜尋獲得不同系列的模型 —— EfficientFormer。
圖中作者作者對不同模型在端側執行進行了一些分析,主要是分為 ViT 對影象進行分塊的 Patch Embedding、Transformer 中的 Attention 和 MLP,另外還有 LeViT 提出的 Reshape 和一些啟用等。基於下面這個表,提出了幾個猜想,然後設計出了 EfficientFormer 結構。
Patch embedding 通常使用具有較大kernel-size和stride的非重疊折積層來實現。大部分AI編譯器都不能很好地支援大核心折積,並且無法通過 Winograd 等現有演演算法進行加速。
很多翻譯這裡寫得很玄乎,ZOMI醬的理解是特徵維度一致比多頭注意力機制對延遲的影響更重要啦,也就是 MLP 實際上並沒有那麼耗時,但是如果 tensor 的shape一會大一會小,就會影響計算時延。所以 EfficientFormer 提出了具有 4D 特徵實現和 3D 多頭注意力的維度一致網路,並且消除了低效且頻繁 Reshape 操作(主要指 LeViT 中的 Reshape 操作)。
在 CNN 結構中最經典的就是使用3x3折積 Conv + Batch Normalization(BN)的組合方式(獲取區域性特徵),而在 Transformer 中最典型的方式是使用 linear projection(MLP)+ layer normalization(LN)(獲取全域性特徵)的組合。不過作者對比測試中發現呀,CONV + BN 比 MLP + LN 效率更高。
最後這個就比較簡單,啟用函數包括 GeLU、ReLU 和 HardSwish 的效能在 TensorRT 或者 CoreML 中都不一樣,所以啟用的優化主要是看用什麼端側編譯器。
第4個點不太重要,主要是關注1,2,3點。於是引出了 EfficientFormer 的總結架構啦。 EfficientFormer 由 patch embedding (PatchEmbed) 和 meta transformer blocks 組成,表示為 MB:
X_0 是輸入影象,Batch Size 為 B,featur map 大小為 [H,W],Y 是輸出,m 是Block的數量。MB 由未指定的 TokenMixer 和 MLP Block 組成,可以表示如下:
X_i 是第 i 個 MB 的featur map。進一步將 Stage 定義為處理具有相同空間大小的特徵的幾個 MetaBlock 的堆疊,圖 N_1x 表示 S1 具有 N_1 個 MetaBlock。
可以看到 EfficientFormer 一共有4個階段。每個階段都有一個 Embeding(兩個3x3的Conv組成一個Embeding) 來投影 Token 長度(可以理解為CNN中的feature map)。可以看到啦,EfficientFormer 是一個完全基於Transformer設計的模型,沒有整合 MobileNet 相關內容啦。
最後通過 AUTOML 來搜尋 MB_3D 和 MB_4D block 相關引數。
根據 猜想分析2:特徵維度一致對於 token mixer 的選擇很重要 EfficientFormer 提出了一種維度一致的設計,將網路分成一個 MB_4D,以 CNN 結構為主 (MB4D) 實現;以及一個 MB_3D ,MLP 線性投影和 Attention 注意力在 3D tensor 上執行。網路從 patch embedding 開始,然後就到了 4D 分割區,3D 分割區在最後階段應用。最後 4D 和 3D 分割區的實際長度是稍後通過架構搜尋指定的。
這裡面的 4D 主要是指 CNN 結構中 tensor 的維度 [B, C, W, H],而 3D 主要是指 Tran 結構中 tensor 的維度 [B, W, H]。
網路從使用由具有2個 kernel-size為 3×3, Stride=2 的折積組成的 Conv stem 處理後的影象作為 patch embedding:
其中 C_j 是第 j 個階段的通道數(寬度)。然後網路從 MB_4D 開始,使用簡單的 Pool ing 來提取 low level特徵:
其中 Conv_B,G 是指折積後是否分加上BN和GeLU。
在處理完所有 MB4D 塊後,執行一次Reshape以變換 freature map 並進入 3D 分割區。MB3D 遵循傳統的 ViT,不過作者把 ReLU 換成了 GeLU 哦。
基於 dimension-consistent,EfficientFormer 構建了一個 Supernet,用於搜尋 EfficientFormer 架構的高效模型。下面定義一個 MetaPath (MP):
I 呢表示 identity path,j 表示第 j 個階段,i 表示第 i 個塊。搜尋網路Supernet 中通過用 MP 代替 EfficientFormer 的 MB。
在 Supernet 的第1階段和第2階段中,每個 Block 可以選擇 MB4D 或 I,而在第3階段和第4階段中,Block可以是 MB3D、MB4D 或 I。
EfficientFormer 只在最後兩個階段啟用 MB3D,原因有2個:1)多頭注意力的計算相對於Token長度呈二次增長,因此在模型早期整合會大大增加計算成本。2)將全域性多頭注意力應用於最後階段符合直覺,即網路的早期階段捕獲低階特徵,而後期層則學習長期依賴關係。
搜尋空間包括 C_j(每個 Stage 的寬度)、N_j(每個 Stage 中的塊數,即深度)和最後 N 個 MB3D 的塊。
傳統的硬體感知網路搜尋方法,通常依賴於每個候選模型在搜尋空間中的硬體部署來獲得延遲,這是非常耗時的。EfficientFormer提出了基於梯度的搜尋演演算法,以獲得只需要訓練一次Supernet的候選網路。
(後續可以針對 NASA 搜尋進行詳細補充這個內容。)
總的來說呢,EfficientFormer-L1 在 ImageNet-1K 分類任務上實現了 79.2% 的 top-1 準確率,推理時間僅為 1.6 ms,與 MobileNetV2 相比,延遲降低了 6%,top-1 準確率提高了 7.4%。延遲不是 ViT 在端側部署的障礙。
另外,EfficientFormer-L7 實現了 83.3% 的準確率,延遲僅為 7.0 ms,大大優於 ViT×MobileNet 混合設計(MobileViT-XS,74.8%,7.2ms)。
最後通過使用 EfficientFormer 作為影象檢測和分割基準的 Backbone,效能也是非常讚的。ViTs 確實可以實現超快的推理速度和強大的效能。
MobileViT 結構上基本基於 MobileNet V2 而改進增加了 MobileViT block,但是同樣能夠實現一個不錯的精度表現,文章實驗部分大量的對比了 MobileViT 跟 CNN 和 ViT 模型的引數量和模型大小,不過值得一提的是在端側除了模型大小以外,更加重視模型的效能,只能說這篇文章經典之處是開創了 CNN 融合 ViT 在端側的研究。
[1] Li, Yanyu, et al. "EfficientFormer: Vision Transformers at MobileNet Speed." arXiv preprint arXiv:2206.01191 (2022).
[2] EfficientFormer | 蘋果手機實時推理的Transformer模型,登頂輕量化Backbone之巔
[3] CVer計算機視覺:EfficientFormer:MobileNet 速度下的視覺Transformer