1. 程式人生 > >縱覽輕量化卷積神經網路SqueezeNet,MobileNet,ShuffleNet

縱覽輕量化卷積神經網路SqueezeNet,MobileNet,ShuffleNet

1. SqueezeNet

具體如下圖所示:

 

Fire module 輸入的 feature map 為 H*W*M 的,輸出的 feature map 為 H*M*(e1+e3),可以看到 feature map 的解析度是不變的,變的僅是維數,也就是通道數,這一點和 VGG 的思想一致。

SqueezeNet提出了3點網路結構設計策略:

策略 1.將3x3卷積核替換為1x1卷積核

這一策略很好理解,因為1個1x1卷積核的引數是3x3卷積核引數的1/9,這一改動理論上可以將模型尺寸壓縮9倍。

策略 2.減小輸入到3x3卷積核的輸入通道數

我們知道,對於一個採用3x3卷積核的卷積層,該層所有卷積引數的數量(不考慮偏置)為:

式中,N是卷積核的數量,也即輸出通道數,C是輸入通道數。

因此,為了保證減小網路引數,不僅僅需要減少3x3卷積核的數量,還需減少輸入到3x3卷積核的輸入通道數量,即式中C的數量。

策略 3.儘可能的將降取樣放在網路後面的層中

在卷積神經網路中,每層輸出的特徵圖(feature map)是否下采樣是由卷積層的步長或者池化層決定的。而一個重要的觀點是:解析度越大的特徵圖(延遲降取樣)可以帶來更高的分類精度,而這一觀點從直覺上也可以很好理解,因為解析度越大的輸入能夠提供的資訊就越多。

2. MobileNet

1. 核心思想是採用 depth-wise convolution

操作,在相同的權值引數數量的情況下,相較於 standard convolution 操作,可以減少數倍的計算量,從而達到提升網路運算速度的目的。

2. depth-wise convolution 的思想非首創,借鑑於 2014 年一篇博士論文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》

3. 採用 depth-wise convolution 會有一個問題,就是導致「資訊流通不暢」,即輸出的 feature map 僅包含輸入的 feature map 的一部分,在這裡,MobileNet 採用了 point-wise convolution

解決這個問題。在後來,ShuffleNet 採用同樣的思想對網路進行改進,只不過把 point-wise convolution 換成了 channel shuffle,然後給網路美其名曰 ShuffleNet

假設輸入的 feature map 是兩個 5*5 的,即 5*5*2;輸出 feature map 數量為 3,大小是 3*3(因為這裡採用 3*3 卷積核)即 3*3*3。標準卷積是將一個卷積核(3*3)複製 M 份(M=2), 讓二維的卷積核(麵包片)拓展到與輸入 feature map 一樣的麵包塊形狀。

Standard 過程如下圖,X 表示卷積,+表示對應畫素點相加,可以看到對於 O1 來說,其與輸入的每一個 feature map 都「發生關係」,包含輸入的各個 feature map 的資訊。

Depth-wise 過程如下圖,可以看到 depth-wise convolution 得出的兩個 feature map——fd1 和 fd2 分別只與 i1 和 i2「發生關係」,這就導致違背上面所承認的觀點「輸出的每一個 feature map 要包含輸入層所有 feature map 的資訊」,因而要引入 pointwise convolution。

計算量減少了:

其中 DK 為標準卷積核大小,M 是輸入 feature map 通道數,DF 為輸入 feature map 大小,N 是輸出 feature map 大小。本例中,DK=3,M=2,DF=5,N=3,引數的減少量主要就與卷積核大小 DK 有關。在本文 MobileNet 的卷積核採用 DK=3,則大約減少了 8~9 倍計算量。

3. ShuffleNet

shuffle 具體來說是 channel shuffle,是將各部分的 feature map 的 channel 進行有序的打亂,構成新的 feature map,以解決 group convolution 帶來的「資訊流通不暢」問題。(MobileNet 是用 point-wise convolution 解決的這個問題)

 ShuffleNet unit 的演化過程

圖 (a):是一個帶有 depth-wise convolution 的 bottleneck unit;圖 (b):作者在 (a) 的基礎上進行變化,對 1*1 conv 換成 1*1 Gconv,並在第一個 1*1 Gconv 之後增加一個 channel shuffle 操作;圖 (c): 在旁路增加了 AVG pool,目的是為了減小 feature map 的解析度;因為解析度小了,於是乎最後不採用 Add,而是 concat,從而「彌補」了解析度減小而帶來的資訊損失。

ShuffleNet 小結:

1. 與 MobileNet 一樣採用了 depth-wise convolution,但是針對 depth-wise convolution 帶來的副作用——「資訊流通不暢」,ShuffleNet 採用了一個 channel shuffle 操作來解決。

2. 在網路拓撲方面,ShuffleNet 採用的是 resnet 的思想,而 mobielnet 採用的是 VGG 的思想,

2.1 SqueezeNet 也是採用 VGG 的堆疊思想

 

https://baijiahao.baidu.com/s?id=1589005428414488177&wfr=spider&for=pc