深度學習方法(十一):卷積神經網絡結構變化——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之餘,能夠提出本身的想法,並實現。)markdown

若是想看Xception,就直接拉到最後看,有手畫示意圖。網絡

Inception V1-V4

Inception V1

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

這裏寫圖片描述
圖1ide

要想提升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,咱們能夠看到,這樣作參數量少了,計算量少了,可是層數變深了,效果也變好了:idea

這裏寫圖片描述

用1*3和3*1卷積替代3*3卷積,計算量少了不少,深度變深,思路是同樣的。(其實是1*n和n*1替代n*n,n能夠變)spa

這裏寫圖片描述

放到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

相關文章
相關標籤/搜索