當前位置:
首頁 > 新聞 > 為什麼MobileNet及其變體如此之快?

為什麼MobileNet及其變體如此之快?

在本文中,作者對高效 CNN 模型(如 MobileNet 及其變體)中常用的組成模塊進行了概述,並且解釋了它們如此高效的原因。另外,作者還對如何在空間和通道中做卷積進行了直觀闡述。

高效模型中使用的組成模塊

在解釋特定的高效 CNN 模型之前,我們先檢查一下高效 CNN 模型中組成模塊的計算成本,然後看一下卷積是如何在空間和通道中執行的。

為什麼MobileNet及其變體如此之快?

HxW 表示輸出特徵圖的空間大小,N 代表輸入通道數,KxK 代表卷積核的大小,M 代表輸出通道數,那麼,標準卷積的計算成本變成了 HWNK2M。

這裡重要的一點就是,標準卷積的計算成本與以下因素成比例:(1)輸出特徵圖的空間大小 HxW,(2)卷積核的大小 K2,(3)輸入通道和輸出通道的數量 NxM。

當在空間和通道上執行卷積時,上述計算成本是必需的。CNN 可以通過分解卷積來加速,如下所示。

卷積

首先,作者直觀地解釋了如何在空間和通道上執行標準卷積,其計算成本是 HWNK2M。

作者將輸入和輸出用線連接起來,以可視化它們之間的依賴關係。線條的數量分別粗略地表示在空間和通道上執行卷積的計算成本。

為什麼MobileNet及其變體如此之快?

例如,最常用的 3x3 的卷積,可以通過上圖進行可視化。我們可以看到,在空間中,輸入和輸出是局部連接的,而在通道中則是全連接。

為什麼MobileNet及其變體如此之快?

下一個例子,conv1x1 或用於改變通道大小的逐點卷積,如上圖所示。這種卷積的計算成本是 HWNM,因為其卷積核大小為 1x1,所以其計算成本是 3x3 卷積的 1/9。這種卷積被用來「融合」各個通道的信息。

分組卷積

分組卷積是卷積的一種變體,其中輸入特徵圖的通道被分組,然後卷積在每組通道上獨立進行。

G 代表分組數量,分組卷積的計算成本是 HWNK2M/G,與標準卷積相比,分組卷積的計算成本變成了 1/G。

為什麼MobileNet及其變體如此之快?

G=2 的分組 conv3x3 的例子。我們可以看到,與標準卷積相比,分組卷積通道中的連接數更少,這意味著更小的計算成本。

為什麼MobileNet及其變體如此之快?

G=3 的分組 conv3x3 的例子。連接變得更加稀疏了。

為什麼MobileNet及其變體如此之快?

G=2 的分組 conv1x1 的例子。因此,conv1x1 也可以分組。這種卷積被用在 ShuffleNet 中。

為什麼MobileNet及其變體如此之快?

G=3 的分組 conv1x1 的例子。

Depthwise 卷積

在 Depthwise 卷積 [2,3,4] 中,卷積是在每個輸入通道上獨立執行的。這也可以定義為分組卷積的特殊情況:輸入和輸出的通道數相同,G 等於通道數。

為什麼MobileNet及其變體如此之快?

如上圖所示,通過省略通道中的卷積,depthwise 卷積大大減少了計算成本。

通道混洗(Channel shuffle)

通道混洗是改變 ShuffleNet[5] 中所用通道順序的操作(層)。這種操作是通過張量整形和轉置來實現的。

更具體來說,比如 GN" (=N) 代表輸入通道數,輸入通道的維度首先被整形為 (G, N"),然後將 (G, N") 轉置為 (N", G),最後將它拉平到與輸入相同的形狀。這裡,G 代表的是分組卷積中分組的數目,分組卷積通常與 ShuffleNet 中的通道混洗一起使用。

雖然不能用乘-加運算次數(MACs)來定義通道混洗的計算成本,但是這些計算應該是需要一些開銷的。

為什麼MobileNet及其變體如此之快?

G=2 的通道混洗的例子。沒有進行卷積,只改變了通道順序。

為什麼MobileNet及其變體如此之快?

G=3 的通道混洗的例子。

高效模型

下面,針對高效模型,作者給出了一些直觀描述:為什麼它們是高效的,以及空間和通道中的卷積是如何完成的。

ResNet (Bottleneck 版本)

先說一下 ResNet [6] 中使用的具有瓶頸結構的殘差單元。

為什麼MobileNet及其變體如此之快?

如上所示,一個具有瓶頸結構的殘差單元由 conv1x1、conv3x3 和 conv1x1 組成。第一個 conv1x1 減少輸入通道的維度,這降低了後續 conv3x3 相對高昂的計算成本。最後的 con1x1 恢復輸出通道的維度。

ResNeXt

ResNeXt[7] 是一種高效的 CNN 模型,可被視為 ResNet 的特例,其中分組 conv3x3 代替了 conv3x3。通過使用高效的分組卷積,與 ResNet 相比,conv1x1 中的通道減少率變得相對適中,這導致了在相同的計算成本下更好的準確率。

為什麼MobileNet及其變體如此之快?

MobileNet (可分離卷積)

MobileNets[8] 是可分離卷積模塊的堆疊,可分離卷積模塊包含 depthwise 卷積和 conv1x1(逐點卷積,pointwise conv)。

為什麼MobileNet及其變體如此之快?

可分離卷積在空間和通道中獨立地執行卷積。這種卷積分解顯著地降低了計算成本——從 HWNK2M 到 HWNK2 (depthwise 卷積) + HWNM (逐點卷積),,總共是 HWN(K2 + M)。通常,M>>K2(例如,K=3,而且 M ≥ 32),所以,計算成本大概減少到原來的 1/8—1/9 之間。

這裡的重點是,計算成本的 bottleneck 現在是 conv1x1!

ShuffleNet

ShuffleNet 的出發點在於:conv1x1 是可分離卷積的瓶頸。儘管 conv1x1 已經很有效了,而且貌似已經沒有可提升的空間了,但是分組 conv1x1 可以用來提升它!

為什麼MobileNet及其變體如此之快?

上圖描述了 ShuffleNet 的模塊。這裡的重要組成模塊是通道混洗層,它「混洗」了分組卷積中的通道順序。如果沒有通道混洗,分組卷積的輸出就無法在分組中利用,這會導致準確率的降低。

MobileNet-v2

MobileNet-v2[9] 使用的是與 ResNet 中具有瓶頸結構的殘差單元相似的模塊結構:改進版的殘差單元,其中 conv3x3 被 depthwise 卷積代替了。

為什麼MobileNet及其變體如此之快?

如上圖所示,與標準的瓶頸結構相反,第一個 conv1x1 增加了通道維度,然後執行了 depthwise 卷積,最後一個 conv1x1 減少了通道維度。

為什麼MobileNet及其變體如此之快?

如上圖所示,通過對組成模塊重新排序,並且與 MobileNet-v1 (可分離) 相比,我們可以看見這個結構是如何運作的(這個重新排序並不會改變總體的模型結構,因為 MobileNet-v2 是這個模塊的堆疊)。

也就是說,上述模塊可被視為可分離卷積的改進版,其中可分離卷積中單個的 conv1x1 被分解成兩個 conv1x1。讓 T 代表通道維度的擴展因子,兩個 conv1x1 的計算成本是 2HWN2/,而可分離卷積中 conv1x1 的計算成本是 HWN2,在 [5] 中,使用了 T=6,將 conv1x1 的計算成本降低了 3 倍(通常是 T/2)。

FD-MobileNet

最後,作者將介紹一下快速下採樣 MobileNet(FD-MobileNet)[10]。與 FD-MobileNet 相比,這個模型中的下採樣在較淺層執行。這個簡單的技巧可以減少總體的計算成本。原因在於傳統的下採樣策略和可分離卷積的計算成本。

從 VGGNet 開始,很多模型都採用了同樣的下採樣策略:執行下採樣,然後將後續層的通道數翻倍。對於標準卷積而言,下採樣之後的計算成本不會改變,因為它是由 HWNK2M 定義的。但是,對於可分離卷積而言,它的計算成本在下採樣之後變得更小了:從 HWN(K2 + M) 減少到了 H/2 W/2 2N(K2 + 2M) = HWN(K2/2 + M)。當 M 不是很大(即更早的層)的時候,這是相對佔優勢。

最後,作者用下圖結束本文。

為什麼MobileNet及其變體如此之快?

原文鏈接:https://medium.com/@yu4u/why-mobilenet-and-its-variants-e-g-shufflenet-are-fast-1c7048b9618d

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

聯合漢語分詞和依存句法分析的統一模型:當前效果最佳
專欄 | 讓AI簡單且強大:深度學習引擎OneFlow技術實踐

TAG:機器之心 |