深度學習方法(十一):卷積神經網路結構變化——Google Inception V1-V4,Xception(depthwise convolution)

歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld
技術交流QQ群:433250724,歡迎對演算法、機器學習技術感興趣的同學加入。


上一篇講了深度學習方法(十):卷積神經網路結構變化——Maxout Networks,Network In Network,Global Average Pooling,本篇講一講Google的Inception系列net,以及還是Google的Xception。(扯一下,Google的Researcher們還是給了很多很棒的idea的,希望讀者朋友和我自己在瞭解paper之餘,可以提出自己的想法,並實現。)

如果想看Xception,就直接拉到最後看,有手畫示意圖。

Inception V1-V4

Inception V1

V1是大家口頭說的Googlenet,在之前的深度學習方法(五):卷積神經網路CNN經典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning有簡單介紹,這裡再凝練一下創新點:

這裡寫圖片描述
圖1

要想提高CNN的網路能力,比如分類準確率,一般的想法就是增大網路,比如Alexnet確實比以前早期Lenet大了很多,但是純粹的增大網路——比如把每一層的channel數量翻倍——但是這樣做有兩個缺點——引數太多容易過擬合,網路計算量也會越來越大。

以下重點:目前很多工作證明,要想增強網路能力,可以:增加網路深度,增加網路寬度;但是為了減少過擬合,也要減少自由引數。因此,就自然而然有了這個第一版的Inception網路結構——同一層裡面,有卷積1* 1, 3* 3,5* 5 不同的卷積模板,他們可以在不同size的感受野做特徵提取,也算的上是一種混合模型了。因為Max Pooling本身也有特徵提取的作用,而且和卷積不同,沒有引數不會過擬合,也作為一個分支。但是直接這樣做,整個網路計算量會較大,且層次並沒有變深,因此,在3*3和5*5卷積前面先做1*1的卷積,降低input的channel數量,這樣既使得網路變深,同時計算量反而小了;(在每一個卷積之後都有ReLU)

Inception V2-V3

V2和V3版本比較接近,就不絕對區分了,具體可以看[3]。講一講其中的創新點:

首先,用兩層堆疊的3*3代替了一層5*5,我們可以看到,這樣做引數量少了,計算量少了,但是層數變深了,效果也變好了:

這裡寫圖片描述

用1*3和3*1卷積替代3*3卷積,計算量少了很多,深度變深,思路是一樣的。(實際上是1*n和n*1替代n*n,n可以變)

這裡寫圖片描述

放到Inception結構裡,下面是原始的Inception

這裡寫圖片描述

下面圖5-6-7是改進版本:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

總體的網路結構:

這裡寫圖片描述

我們看到,Inception並不是全程都用,是在影象比較小了採用,並且,圖5-6-7的結構是依次用的,他們適合不同size的影象。

Inception V4

v4研究了Inception模組結合Residual Connection能不能有改進?發現ResNet的結構可以極大地加速訓練,同時效能也有提升,得到一個Inception-ResNet v2網路,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的效能 [7]

Inception-resnet-v1 and Inception-ResNet v2都是用的這個結構圖,區別在於下圖的註釋中,

這裡寫圖片描述

這篇文章通篇就是各種微結構變化,我在這裡貼也沒什麼意思,希望讀者移步論文[4],找到對應的圖號,看一下。

這裡寫圖片描述

這裡寫圖片描述

其實我也有疑惑,雖然paper總可以說出一些道道,結果也確實有一定提升,但是對於不同層設計了完全不同的微結構,這樣會不會模式上太不統一了?有沒有用更簡潔統一的方式,達到一樣的效果呢?我相信是有的,自我感覺Inception V1的模式很簡單,Resnet的跳層結構也很簡單,美,但是到了V4這裡,結構變化太多,很難理解為什麼是必須的呢?**

就好比我們以前做電影推薦比賽,最終獲勝的結果往往是多模型混合,但是我個人還是最感興趣那個最最有效果的單模型是什麼樣的。

Xception

非常新的一個工作[5],前面講了那麼多Inception網路,那麼Inception網路的極限是什麼呢?其中一個極限版本如下:

這裡寫圖片描述

在1*1卷積之後,對每一個channel,做3*3的*1的獨立卷積,然後再concat。認為每一個spatial conv對cross channel feature是沒有關係的。

[5]作者提出了Depthwise Separable Convolution,或者簡稱Depthwise Convolution,是下面這個樣子:先做channel-wise conv,然後再過1*1卷積,中間沒有ReLU,最後有ReLU。

這裡寫圖片描述

上面提到兩種結構的區別,文中這一段寫的很清楚:

這裡寫圖片描述

整個網路結構:

這裡寫圖片描述


OK,本篇到這裡,只是作為一個記錄和引導,讓大家發現更多結構設計的idea。


參考資料

下面參考資料部分paper還帶了test error
[1] Going Deeper with Convolutions, 6.67% test error
http://arxiv.org/abs/1409.4842
[2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error
http://arxiv.org/abs/1502.03167
[3] Rethinking the Inception Architecture for Computer Vision, 3.5% test error
http://arxiv.org/abs/1512.00567
[4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error
[5] Xception: Deep Learning with Depthwise Separable Convolutions
[6] 深入淺出——網路模型中Inceptionv1到 v4 的作用與結構全解析
[7] Inception in CNN
[8] 論文筆記 | Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning