GhostNet: MoreFeaturesfromCheapOperations
(一)論文地址:
https://arxiv.org/abs/1911.11907
檢測效果:
運行demo.py
(需要代碼和模型權重的請私戳我哦,聯繫方式見文章末)
(二)核心思想:
作者爲了進一步壓縮 CNN 網絡結構,提出了一個 Ghost module,其核心是通過簡單的線性變換,在內在特徵圖的基礎上,生成更多可以完全揭示內在特徵信息的幽靈👻特徵圖(ghost feature map),從而以較小的計算代價生成更多特徵;
作者提出的 Ghost module 可以看作一個即插即用組件,用於升級現有的卷積神經網絡,其核心是在輸出通道數不變的情況下,減小卷積層的通道數並採用一個線性變換來升維,以此減小參數;
同時作者也提出了一個 Ghost Bottleneck 模塊用來堆疊 Ghost module,並以此構建了一個新的網絡 GhostNet,實現了 75.7% top-1 準確率,在比 MobileNetV3 準確率還高的基礎上,進一步壓縮了模型;
(三)特徵冗餘:
在訓練好的深度神經網絡的特徵圖中,豐富甚至冗餘的信息常常保證了對輸入數據的全面理解;
例如 ResNet-50,如果把特徵圖可視化,可以看到有許多相似甚至相同的特徵圖,就像彼此的幽靈一樣;
作者認爲這些相似的特徵圖並非冗餘的,而是對檢測和識別非常重要的,因此作者並沒有去想辦法去除這種冗餘,而是採取了一種更爲節省計算消耗的方式去生成這些幽靈特徵圖,由此搭建的網絡就稱之爲——GhostNet;
(四)傳統卷積的問題:
現在通用的一個減小卷積層參數的方法是 MobileNet 提出的深度分離卷積:
雖然深度分離卷積大大減小了參數量,但是隨後用來升維或者降維並融合特徵的 1×1 卷積仍然佔用了客觀的計算消耗和內存,生成的幽靈特徵圖也證明它有很大的改進空間;
針對這個問題,作者提出了可以減小卷積層使用的卷積核數目:
假設輸入爲 ,其中 爲通道數, 分別爲特徵圖的高度和寬度;
那麼任意卷積層生成 個 feature map 的操作就可以表示爲:
其中 是卷積操作, 是偏置, 是輸出的特徵層, 是卷積核,那麼計算消耗 FLOPs 就是:
然而對於通常情況下 ,計算消耗會非常大;
作者提出,可以通過控制卷積核中 的大小來減小計算量,並通過一個簡單的線性變換起到升維的作用;
(五)Ghost Module for More Features
這裏作者簡介了 Ghost Module,可以將其作爲替換卷積層的模塊;
此時設置一箇中間量 ,其中 ;
這時:
其中偏執 被去掉,其他的超參數(如步長、卷積核大小)等保持不變;
此時再將 中的 個特徵圖分離,對每個特徵圖分別進行一次線性變換,使每個特徵圖生成 個幽靈特徵圖,用公式表示爲:
其中 是 的第 個特徵圖, 是生成第 個幽靈特徵圖 的線性操作;
這樣我們就得到了通道數爲 的特徵層 ;
(六)Ghost bottleneck:
作者提出了兩種 Ghost Module 的堆疊結構,主要是用來替換 ResNet 中的殘差結構;
網絡的整體結構如圖:
SE 表示是否使用 SE 模塊;
(七)實驗結果:
聯繫我們:
權重文件需要的請私戳作者~
(長期接私活~)