歡迎轉載,轉載請注明:本文出自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有簡單介紹,這裡再凝練一下創新點:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LctGetNmdk5mYwp0RlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN2ATMwgzMyIDNxMDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
圖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