超越MobileNetV3的輕量級網(wǎng)絡(luò )
之前CVPR公布了收錄的文章,“計算機視覺(jué)研究院”從其中找一些好的算法框架與大家分享,今天分享的就是超越Mobilenet_V3的輕量級網(wǎng)絡(luò )——GhostNet。
雖然說(shuō)mobileNet或者是shuffleNet提出了使用depthwise或者是shuffle等操作,但是引入的1x1卷積依然會(huì )產(chǎn)生一定的計算量。
為什么1x1依然會(huì )產(chǎn)生較大的計算量?
看卷積計算量的計算公式n?h?w?c?k?kn*h*w*c*k*kn?h?w?c?k?k,可以發(fā)現,由于c和n都是比較大的,所以會(huì )導致這個(gè)計算量也是比較大的,但是作者在分析輸出的特征圖的時(shí)候發(fā)現,其實(shí)有些特征圖是比較相似的。
Introduction
目前,神經(jīng)網(wǎng)絡(luò )的研究趨向于移動(dòng)設備上的應用,一些研究著(zhù)重于模型的壓縮方法,比如剪枝,量化,知識蒸餾等,另外一些則著(zhù)重于高效的網(wǎng)絡(luò )設計,比如MobileNet,ShuffleNet等。作者在分析輸出的特征圖的時(shí)候發(fā)現,其實(shí)有些特征圖是比較相似的,如下圖所示,作者認為可以通過(guò)簡(jiǎn)單的變換得到。
訓練好的網(wǎng)絡(luò )一般都有豐富甚至冗余的特征圖信息來(lái)保證對輸入的理解,如上圖ResNet-50的特征圖,相似的特征圖類(lèi)似于對方的ghost。冗余的特征是網(wǎng)絡(luò )的關(guān)鍵特性,論文認為與其避免冗余特征,不如以一種cost-efficient的方式接受,獲得很不錯的性能提升,論文主要有兩個(gè)貢獻:
· 提出能用更少參數提取更多特征的Ghost模塊,首先使用輸出很少的原始卷積操作(非卷積層操作)進(jìn)行輸出,再對輸出使用一系列簡(jiǎn)單的線(xiàn)性操作來(lái)生成更多的特征。這樣,不用改變其輸出的特征圖,Ghost模塊的整體的參數量和計算量就已經(jīng)降低了;
· 基于Ghost模塊提出GhostNet,將原始的卷積層替換為Ghost模塊。
基于此,作者得到啟發(fā),是不是每張圖都需要用這么大的計算量去得到?是否可以通過(guò)cheap transformation得到這些相似的特征圖?
然后就出現了GhostNet。Ghost就是說(shuō)相似的特征圖,猶如另一個(gè)的幽靈,可以通過(guò)簡(jiǎn)單的線(xiàn)性變換得到。
Ghost Module for More Features
對于輸入數據X∈?c×h×w,卷積層操作如上公式,Y∈?h′×w′×n為輸出的n維特征圖,f∈?c×k×k×nf為該層的卷積核,可得該層的計算量為n?h′?w′?c?k?k,這個(gè)結果一般較大,是由于n和c一般都很大。上面公式的參數量與輸入和輸出的特征圖數息息相關(guān),而從圖1可以看出中間特征圖存在大量冗余,且存在相似的特征(Ghost),所以完全沒(méi)必要占用大量計算量來(lái)計算這些Ghost。
假設原輸出的特征為某些內在特征進(jìn)行簡(jiǎn)單的變換得到Ghost,通常這些內在特征數量都很少,并且能通過(guò)原始卷積操作如下公式獲得,Y′∈?h′×w′×m為原始卷積輸出,f′∈?c×k×k×m為使用的卷積核,m≤n,bias直接簡(jiǎn)化了:
為了獲得原來(lái)的n維特征,對Y′的內在特征分別使用一系列簡(jiǎn)單線(xiàn)性操作來(lái)產(chǎn)生s維ghost特征,Φi,j為生成y′i的j-th ghost特征圖的線(xiàn)性變換函數,最后的Φi,s為保存內在特征的identity mapping,整體計算如上圖2b。
簡(jiǎn)單的來(lái)說(shuō)就是:
首先,假設我們輸入特征圖的尺寸是h*w*c,輸出特征圖的尺寸是h’*w’*n,卷積核大小為k*k。
在cheap operation變換中,我們假設特征圖的channel是m,變換的數量是s,最終得到的新的特征圖的數量是n,那么我們可以得到等式:
n=m?sn = m * s
n=m?s
由于Ghost的變換過(guò)程中最后存在一個(gè)恒等變換(Identity),所以實(shí)際有效的變換數量是s-1,所以上式可以得到如下公式:
m?(s?1)=n/s?(s?1)m * (s-1) = n/s * (s-1)
m?(s?1)=n/s?(s?1)
所以我們便可以計算得到如下結果:
當然這里還有一個(gè)條件:m << n
通過(guò)這么分析,可以體會(huì )到,其實(shí)GhostNet的方法也很簡(jiǎn)單,無(wú)外乎就是將原本的乘法變成了兩個(gè)乘法相加,然后在代碼實(shí)現中,其實(shí)第二個(gè)變換是用depthwise conv實(shí)現的。作者在文中也提到,前面的卷積使用pointwise效率比較高,所以網(wǎng)絡(luò )嫣然類(lèi)似一個(gè)mobilenet的反過(guò)來(lái)的版本,只不過(guò)GhostNet采用了拼接的方式,進(jìn)一步減少了計算量。
Ghost module的pytorch代碼如下:
class GhostModule(nn.Module): def __init__(self, inp, oup, kernel_size=1, ratio=2, dw_size=3, stride=1, relu=True): super(GhostModule, self).__init__() self.oup = oup init_channels = math.ceil(oup / ratio) new_channels = init_channels*(ratio-1) self.primary_conv = nn.Sequential( nn.Conv2d(inp, init_channels, kernel_size, stride, kernel_size//2, bias=False), nn.BatchNorm2d(init_channels), nn.ReLU(inplace=True) if relu else nn.Sequential(), ) self.cheap_operation = nn.Sequential( nn.Conv2d(init_channels, new_channels, dw_size, 1, dw_size//2, groups=init_channels, bias=False), nn.BatchNorm2d(new_channels), nn.ReLU(inplace=True) if relu else nn.Sequential(), ) def forward(self, x): x1 = self.primary_conv(x) x2 = self.cheap_operation(x1) out = torch.cat([x1,x2], dim=1) return out[:,:self.oup,:,:]
與現有網(wǎng)絡(luò )的不同
與目前主流的卷積操作對比,Ghost模塊有以下不同點(diǎn):
對比Mobilenet、Squeezenet和Shufflenet中大量使用1×1pointwise卷積,Ghost模塊的原始卷積可以自定義卷積核數量;
目前大多數方法都是先做pointwise卷積降維,再用depthwise卷積進(jìn)行特征提取,而Ghost則是先做原始卷積,再用簡(jiǎn)單的線(xiàn)性變換來(lái)獲取更多特征;
目前的方法中處理每個(gè)特征圖大都使用depthwise卷積或shift操作,而Ghost模塊使用線(xiàn)性變換,可以有很大的多樣性;
Ghost模塊同時(shí)使用identity mapping來(lái)保持原有特征。
框架結構
下圖是Ghost bottleneck結構圖,很類(lèi)似resnet結構,不同的是channel是先升維再降維。
Ghost Bottleneck(G-bneck)與residual block類(lèi)似,主要由兩個(gè)Ghost模塊堆疊二次,第一個(gè)模塊用于增加特征維度,增大的比例稱(chēng)為expansion ration,而第二個(gè)模塊則用于減少特征維度,使其與shortcut一致。
G-bneck包含stride=1和stride=2版本,對于stride=2,shortcut路徑使用下采樣層,并在Ghost模塊中間插入stride=2的depthwise卷積。為了加速,Ghost模塊的原始卷積均采用pointwise卷積。
下面是GhostNet的網(wǎng)絡(luò )結構圖,可以看到channel控制的比較小,并且引入了SE結構。
實(shí)驗
作者首先采用控制變量法,測試不同的s以及d的效果。經(jīng)過(guò)測試發(fā)現在s=2,d=3的情況下模型表現較好。
下表為在resnet50實(shí)驗的不同網(wǎng)絡(luò )的壓縮比例以及精度對比:
可以看到使用Ghost模塊不僅比其它壓縮方法更能降低模型的體量,也最能保持模型準確率:
The feature maps in the 2nd layer of Ghost-VGG-16. The left-top image is the input, the feature maps in the left red box are from the primary convolution, and the feature maps in the right green box are after the depthwise transformation.
ImageNet效果對比:
目標檢測的效果:
小結
為了減少神經(jīng)網(wǎng)絡(luò )的計算消耗,論文提出Ghost模塊來(lái)構建高效的網(wǎng)絡(luò )結果。該模塊將原始的卷積層分成兩部分,先使用更少的卷積核來(lái)生成少量?jì)仍谔卣鲌D,然后通過(guò)簡(jiǎn)單的線(xiàn)性變化操作來(lái)進(jìn)一步高效地生成ghost特征圖。從實(shí)驗來(lái)看,對比其它模型,GhostNet的壓縮效果最好,且準確率保持也很不錯,論文思想十分值得參考與學(xué)習。
論文地址:https://arxiv.org/pdf/1911.11907.pdf
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
電子管相關(guān)文章:電子管原理