[19.11] GhostNet
特徵圖中的幽靈
GhostNet: More Features from Cheap Operations
在 MobileNet 提出後的一段時間,仍然有許多作者致力於改善輕量級網路的性能。
本篇論文中特別針對「特徵圖冗餘」的問題進行了研究。
定義問題
卷積網路中的特徵圖通常包含大量冗餘信息,這些冗餘信息佔用了一定量的計算資源,並且對於網路的性能有著不利的影響。
上圖是一個簡單的例子,特徵圖中的一些區域是重複的,這些重複的區域對於網路的性能可能沒有太大的幫助。
解決問題
一般來說,常用的方式有兩種,其一是模型壓縮,其二是讓模型更緊湊。
模型架構
在 GhostNet 中,作者提出了一種新的模型架構,如上圖所示。
有別於一般的卷積網路,GhostNet 的模組運作流程分成兩步驟:
- 首先使用卷積操作,將輸入特徵圖壓通道縮,得到一個「基底特徵圖」 A。
- 接著對基底特徵圖 A 基於每個通道進行線性運算,得到「幽靈特徵圖」 B。
最後把基底特徵圖 A 和幽靈特徵圖 B 進行 Concatenate 操作,將兩者融合,得到最終的特徵圖。
這裡的線性運算比卷積運算簡單許多,因此 GhostNet 的計算量大幅減少。
論文中說的每個通道的「Cheap」線性運算,其實就是分組卷積(Grouped Convolution),這種方法可以減少計算量,提高效率。
模組配置
-
Ghost Bottlenecks
借助幽靈模組的優勢,作者引入了專為小型 CNN 設計的幽靈瓶頸(G-bneck)。這種設計類似於 ResNet 中的基本殘差塊,結合了多個卷積層和捷徑。
幽靈瓶頸主要由兩個堆疊的幽靈模組組成。第一個幽靈模組充當擴展層,增加通道數,擴展比定義為輸出通道數與輸入通道數之比。第二個幽靈模組則減少通道數以匹配捷徑路徑,並將捷徑連接到這兩個幽靈模組的輸入和輸出之間。
批量正規化(BN)和 ReLU 非線性應用於每一層。另外,根據 MobileNetV2 的建議,除了在第二個幽靈模組之後不使用 ReLU。
-
GhostNet
基於幽靈瓶頸,作者提出了幽靈網路(GhostNet)。
這一架構基本上遵循 MobileNetV3 的設計,並將其瓶頸塊替換為幽靈瓶頸。幽靈網路主要由一系列幽靈瓶頸組成,第一層是具有 16 個濾波器的標準卷積層,隨後是一系列通道逐漸增加的幽靈瓶頸。這些幽靈瓶頸根據輸入特徵圖的大小被分為不同階段。
除了每個階段的最後一個瓶頸,其步幅為 2,其餘所有瓶頸的步幅均為 1。最終,通過全局平均池化和卷積層將特徵圖轉換為 1280 維的特徵向量進行最終分類。
在一些幽靈瓶頸中,殘差層還應用了擠壓和激勵(SE)模組。與 MobileNetV3 相比,幽靈網路沒有使用硬激活函數(hard-swish),因為其延遲較大。
-
寬度乘數:
儘管幽靈網路的基本架構已能提供低延遲和高精度,但在某些情況下可能需要更小更快的模型或在特定任務中需要更高的精度。
為了滿足不同需求,可以在每一層的通道數上乘以一個因子 ,稱為寬度乘數。這樣可以統一改變整個網絡的寬度,並通過大約 的平方來控制模型大小和計算成本。
通常較小的 導致較低的延遲和性能,較大的 則會提高性能。這種設計靈活性使得幽靈網路能夠適應不同的應用場景和需求。
最終的模型配置如下表: