【深度學習-圖像識別】基於GhostNet進行ImageNet上1000類別的圖像識別

(一)論文地址:

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 卷積仍然佔用了客觀的計算消耗和內存,生成的幽靈特徵圖也證明它有很大的改進空間;

針對這個問題,作者提出了可以減小卷積層使用的卷積核數目:

假設輸入爲 XRc×h×wX\in R^{c×h×w},其中 cc 爲通道數,h,wh,w 分別爲特徵圖的高度和寬度;

那麼任意卷積層生成 nn 個 feature map 的操作就可以表示爲:

Y=Xf+bY=X*f+b

其中 * 是卷積操作,bb 是偏置,YRh×w×nY\in R^{h^{'}×w^{'}×n} 是輸出的特徵層,fRc×k×k×nf\in R^{c×k×k×n} 是卷積核,那麼計算消耗 FLOPs 就是:

n×hw×c×k×kn × h^{'}· w^{'}·× c × k × k

在這裏插入圖片描述
然而對於通常情況下 n,c=256,512n,c=256,512,計算消耗會非常大;

作者提出,可以通過控制卷積核中 nn 的大小來減小計算量,並通過一個簡單的線性變換起到升維的作用;

(五)Ghost Module for More Features

這裏作者簡介了 Ghost Module,可以將其作爲替換卷積層的模塊;
在這裏插入圖片描述
此時設置一箇中間量 YRh×w×mY^{'}\in R^{h^{'}×w^{'}×m},其中 m<nm<n

這時:Y=XfY^{'}=X*f^{'}

其中偏執 bb 被去掉,其他的超參數(如步長、卷積核大小)等保持不變;

此時再將 YY^{'}中的 mm 個特徵圖分離,對每個特徵圖分別進行一次線性變換,使每個特徵圖生成 ss 個幽靈特徵圖,用公式表示爲:

yi,j=Φi,j(yi),i=1,,m,j=1,,sy_{i,j}=\Phi_{i,j}(y^{'}_i),\forall i=1,…,m, j=1,…,s

其中 yiy^{'}_iYY^{'} 的第 ii 個特徵圖,Φi,j\Phi_{i,j} 是生成第 jj 個幽靈特徵圖 yi,jy_{i,j} 的線性操作;

這樣我們就得到了通道數爲 n=msn=m*s 的特徵層 YY

(六)Ghost bottleneck:

在這裏插入圖片描述
作者提出了兩種 Ghost Module 的堆疊結構,主要是用來替換 ResNet 中的殘差結構;

網絡的整體結構如圖:
在這裏插入圖片描述

SE 表示是否使用 SE 模塊;

(七)實驗結果:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

聯繫我們:

權重文件需要的請私戳作者~

(長期接私活~)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章