【蜂口 | AI人工智慧】模型選擇與設計——龍鵬的一站式caffe工程實踐連載(六)

絵飛的魚發表於2018-09-26

知識引入

這一次我的分享內容是模型的選擇與設計,這是本次系列課程的比較核心的內容,具體將包含以下幾個方面:首先,一個基礎模型的介紹,我們所選擇的基礎模型是 mobilenet的。雖然深度學習已經發展了許多年,但是實際上基礎的網路模型變種其實並沒有那麼多。從早期的Alexnet GoogLeNet到後來的mobilenet,都是一系列經典模型的代表。很多的模型都是在這些基礎模型的基礎之上進行一些簡單的修補和變化。第二個,就是我們反摺積與skip連線的設計,前面我們已經詳細介紹了反摺積的原理以及skip連線的一些作用。這一次我們在設計網路的過程中,我們就會講講它的具體的設計細節。第三部分是模型的壓縮,我們會給大家介紹一個 比較簡單的模型壓縮技巧,就是互補卷積。 因為我們最終的目標是訓練一個可以在移動端,也就是手機端可以實時執行的一個影像分割網路,我們不可能設計一個有十幾兆甚至幾十兆,然後執行時間,一次影像 操作需要一秒甚至兩秒這樣的一個神經功能,所以我們需要設計一個高效的神經網路。在設計一個高效的神經網路的過程中,我們肯定需要用到一些簡單的模型的壓縮技巧。

Mobilenet網路結構

mobilenet是google提出的一個非常具有代表性的移動端的框架,移動端的一個網路,它的核心內容是depthwise卷積跟pointwise卷積,也就是它將我們一個通常意義上的一個卷積分解成了兩個卷積的串聯。

下面分別介紹,如圖片所示:

 

這張圖展示的是 depthwise卷積。那麼究竟什麼是depthwise卷積呢?

第一張圖就是一個標準的卷積。一個標準的卷積,它的輸入的 feature map數量是M,卷積和是dk,它的輸出feature map數量是N,那麼一個標準的卷積輸出的feature map的每一個通道,都與輸入的每一個通道都有關係。

depthwise卷積

然後我們看看那 depthwise卷積有什麼不一樣?depthwise卷積進行的分組,也就是說將我們輸入的M個通道的一個feature map這樣的block,分成了很多很多的組,最集中的情況下就是分成M組,每一個通道都是單獨的一組, 我們的輸出跟我們的輸入通道數目是相等的。假如我們把輸入分成M組,那麼輸出每一個通道 就只與 出的某一個通道進行相連。這就是depthwise卷積,也就是分組卷 積。上圖圖 C就是展示了1×1的卷積。1×1的卷積實際上就是一個卷積和為1×1的普通的 卷積。

depthwise卷積特徵

depthwise卷積,它有一個特點,就是輸入輸出的通道一定是相等的。在最極端的情況下,也是mobilenet的原始的設計情況下,每一個通道都只與他這個通道進行卷積,不與其他的通道融合資訊。

Pointwise卷積

Pointwise卷積,它是一個卷積核核大小為1×1的正常卷積。depthwise它實現的空間的分離,Pointwise 卷積 實現了空間的融合。這樣的兩個卷積的串聯的block的設計替換了正常的卷積,這就是mobilenet的核心思想。

mobilenet設計優勢

那這樣的設計到底有什麼優勢呢?我們來給大家算一算。它最大的優勢就是 計算量下降 對,一個標準的卷積,如果它的輸入為M乘以DK乘以DK的這樣一個feature map,它的輸出為N乘以D階乘,由此推出,這樣的一個標準卷積,它的計算量就是M乘以dx乘DK乘以N*DJ乘DJ這樣的一個計算量,那如果是mobilenet,它的計算量是什麼樣的呢?d epthwise是由於是分組的卷積,M的每一個通道都是相互獨立的。所以depthwise計算量是M乘以DK乘以DX乘 DJ乘DJ,而Pointwise它是一個1×1的卷積,所以它的計算量是M乘N乘以DJ乘以DJ。我們看看計算量的對比,從上面可以看出,mobilenet除以標準卷積的一個計算量是一除以N加上一除以DK乘以DK,由於網路中大量使用的是3 x 3的卷積和,如果N比較大的話,那上面的一個計算量對比就約等於E除以D和A乘以DK,也就是1/9。 這樣mobilenet,它這一個卷積對應它原始的標準卷積,它的計算量就基本上降低了一個數量級,這就是mobilenet的最大優勢。因為移動端對計算量,尤其是計算時間是非常敏感

https://mp.weixin.qq.com/s/9Oo4__66ZjtLyLaLkNNAhA

此處影片由於編輯器的限制,還請根據連結移步到微信公眾號文章中觀看,謝謝

模型設計

下面說第二部分,我們說說反摺積怎麼設計,我們直接看網路結構,如下圖所示:

其中 deconv6包含了五個反摺積,我們採用的這樣的一個設計思想,也就是逐級恢復原始解析度,我們不是一次性將影像上取樣到原來的16倍,而是透過五個反摺積block每次上取樣兩倍。這樣設計有什麼好處呢?從deconv1到deconv5,每一次反摺積恢復兩倍的解析度相比,直接恢復一個更大倍率的尺寸,這還可以增加網路的深度和非線性的能力。這就是我們反摺積的一個設計思想。

Skip連線

我們再來看看 skip連線,如下圖所示:

我們可以看到我們以 deconv3為例子,它與conv1 block進行的連線,也就是與在底層的一個比較底層的與它feature map大小相等的block進行了串聯。串聯之後成為block_6-3這樣的一個新的輸入。skip連線,就是每一個反摺積的解析度都與它大小相同的一個卷積層進行連線,這樣,他們就可以互補高層資訊和底層資訊,增加恢復的細節。

csrelu通道補償

最後我們看看一個模型壓縮的技巧 ——  csrelu通道補償技術。

我們直接看網路結構,如下圖所示:

 

我們可以看到, conv5_5,這樣的一個卷積之後,我們接了power5-5,它的操作實際上就是對conv5-5乘以-1,然後兩者相連,得到一個新的輸入,然後再進行一個新的卷積操作。為什麼可以這樣做呢?是因為經過大量的實驗證明,我們發現了這樣一個現象,即網路的引數有互補的現象。如果我們就一個減半後的一個通道補上這個通道的反,然後串聯起來會基本上相當於原有的模型。而我們不像它的反的這樣一個操作,基本上就不耗時了。這樣的話,我們的feature map的數量就降低了一倍,計算量也就降低了一倍。

mobilenet的核心block就是我們前面說的depthwise+pointwise這樣的一個串聯結構。其中,depthwise因為是分組的卷積,它大大的降低了一個通道的數目的計算量。所以pointwise才是其中計算量比較大的一個部分。也就是圖中的SEP這樣的一個卷積操作。於是我們對SEP這樣的一個卷積操作使用的crelu這樣的一個通道補償技術,可以直接降低一倍的計算量。所以對於移動端的模型來說是非常高效的,也是非常簡單的。當然,影像壓縮和模型的壓縮遠遠不止這些技術,還有Shufflenet,Densenet等等一系列的影像壓縮技巧, 在此我們就不再贅述。

以上就是我們模型設計最核心的一些技術細節。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31553577/viewspace-2214950/,如需轉載,請註明出處,否則將追究法律責任。

相關文章