1. 程式人生 > >卷積神經網路從lenet到DPN發展歷程

卷積神經網路從lenet到DPN發展歷程

先發一張圖(不全),以後再補

一,LeNet5

1998 Yann LeCun LeNet5


最早的卷積網路,已經有了卷積層,池化層和全連線層。

二,AlexNet

2012,ImageNet Classification with DeepConvolutional Neural Networks

ImageNet Top5錯誤率:16.4%,而兩年前非深度學習的方法的最好錯誤率是28.2%

AlexNet總體結構和LeNet相似,但是有極大改進:

·        由五層卷積和三層全連線組成,輸入影象為三通道224x224大小,網路規模遠大於LeNet

·        使用了ReLU啟用函式

·        

使用了Dropout,可以作為正則項防止過擬合,提升模型魯棒性

·        一些很好的訓練技巧,包括資料增廣、學習率策略、weight decay

  • AlexNet使用3GB視訊記憶體的GTX 580顯示卡,所以如上圖所示將模型分為兩部分放到了兩塊顯示卡上並行運算。雖然在當時這僅僅是單塊顯示卡資源有限時的做法,但是這種做法會減小引數數量,加快計算速度。(group convolution)對以後網路的加速方向提供了一種方法。如shufflenet,resnext都採用了這種group convolution的方式。

三,VGG

2014,Very deep convolutionalnetworks for large-scale image recognition

在AlexNet之後,另一個提升很大的網路是VGG系列,ImageNet上Top5錯誤率減小到7.3%。

具體結構:

主要改進:採取更深的網路結構,以尺寸為3x3的小卷積核來代替大的卷積核。拋棄了

Alexnet中5x5與11x11的卷積核。這樣做的好處是讓引數數量更少,速度更快,更能防止過擬合。舉個例子來說:如果輸入為256x256x3的影象,第一層要輸出256x256x64特徵圖,如果以3x3的卷積尺寸進行卷積則引數數量為(3x3x3+1)x64=1792,而如果以11x11的卷積尺寸進行卷積的話,引數數量為)(3x11x11+1)x64=23296,增加了13倍。

四,GoogLeNet

Inception v1(GoogLeNet):2015,Going deeper with convolutions

ImageNet Top5錯誤率6.7%

Vgg讓網路更深,GoogLeNet不僅深而且寬。GoogLeNet 加入了inception的模組如下(其實就是多個並行的卷積操作)。


1.     inception v1(第一個版本)。如果單獨5x5的卷積核,引數數量會很大,但是引入1x1的卷積核來對特徵圖降維(特徵圖的厚度)會大大減小引數的數量(後續的很多卷積神經網路都採用了1x1的卷積尺寸),例如輸入256x256x64,輸出256x256x128,如果單獨採用5x5的卷積核則引數數量為(64x5x5+1)x128=204928,如果加上1x1的卷積操作則可以有中間過渡過程,輸入256x256x64,過渡256x256x16,輸出256x256x128,引數數量為(64x1x1+1)x16+(16x5x5+1)x128=52368,差不多隻有25.6%的引數數量。

2.     inception v2

一方面了加入了BN層(規範化層),使每一層的輸出都規範化到一個N(0, 1)的高斯分佈; 另外一方面學習VGG用2個3x3的conv替代inception模組中的5x5,既降低了引數數量,也加速計算;


3.     inception v3

v3一個最重要的改進是分解(Factorization),將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這樣的好處,既可以加速計算(多餘的計算能力可以用來加深網路),又可以將1個conv拆成2個conv,使得網路深度進一步增加,增加了網路的非線性,還有值得注意的地方是網路輸入從224x224變為了299x299,更加精細設計了35x35/17x17/8x8的模組。

4.     inception v4

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

5.     Xception

2016,Xception: Deep Learning withDepthwise Separable Convolutions

標準的卷積方式如下圖:

Xception則把group convolution的思想發揮到了極致,每一個通道單獨分為一組。叫做deepwise separable convolution,如下圖所示:

 

其實就是把標準卷積分成兩步,第一步叫deepwise convolution,就是單獨對每個特徵圖進行卷積,第二步叫pointwise convolution,其實就是標準卷積,只是卷積核尺寸為1x1。這樣分成兩步會大大減少引數數量。列如輸入256x256x64,輸出256x256x128

標準卷積(如果·3x3的尺寸)的引數數量為(64x3x3+1)128=73856,另一種為(64x3

X3)+(64x1x1+1)x128=8896,相當於只有12%的引數數量。

五,ResNet

2016,Deep residual learning for imagerecognition

Vgg和inception都增加了網路的深度,但是隨著網路的不斷加深,可能會出現梯度消失(梯度接近於0)的問題(為什麼,之後我會寫個詳細的文章來分析這個問題和梯度下降法,不然寫太多了),由於卷積神經網路是依靠梯度下降法來尋優的,一旦梯度消失則無法更新引數,ResNet通過引入shortcut直連來解決這個問題:

     

對於shortcut的方式,作者提出了三個選項:

A. 使用恆等對映,如果residualblock的輸入輸出維度不一致,對增加的維度用0來填充;

B. 在block輸入輸出維度一致時使用恆等對映,不一致時使用線性投影以保證維度一致;

C. 對於所有的block均使用線性投影。

對這三個選項都進行了實驗,發現雖然C的效果好於B的效果好於A的效果,但是差距很小,因此線性投影並不是必需的,而使用0填充時,可以保證模型的複雜度最低,這對於更深的網路是更加有利的。

在進一步的優化過程中引入1x1的卷積。減少了引數數量。

 

ResNet一個主流分支,基於殘差結構發展出許多優秀的網路包括DenseNet、DPN、ResNeXt等。

1.     DenseNet

既然殘差結構這麼好用,為什麼不多用,於是·DenseNet將residualconnection發揮到極致,每一層輸出都直連到後面的所有層,可以更好地複用特徵,每一層都比較淺,融合了來自前面所有層的所有特徵,並且很容易訓練。但是不是resnet那樣基於對應的特徵圖相加add,而是特徵圖的拼接concate。拼接的缺點是網路到後面特徵圖會很多(相當於之前特徵圖數量的累加(注意是數量上的累加)),所以使用一個叫做“增長率”(k)的超引數防止網路變得過寬,還用了一個1*1的卷積瓶頸層(又是它)在3*3卷積前減少特徵對映的數量。缺點是視訊記憶體佔用更大並且反向傳播計算更復雜一點。網路結構如下所示:

2017,Aggregated ResidualTransformations for Deep Neural Networks

結構圖如下:

左邊為普通的resnet結構,而右邊為ResNeXt提出的結構,有點像inception+resnet

但是inception最後是拼接,而這裡是加,各個通道也是一模一樣的(很方便之後特徵圖相加)。這種方式利用1卷積和groupconvolution,看起來結構複雜了很多,其實引數數量並沒有增加。

3.     DPN

duall path networks

DPN可以說是融合了ResNeXt和DenseNet的核心思想,這裡為什麼不說是融合了ResNet和DenseNet,因為作者也用了group操作,而ResNeXt和ResNet的主要區別就在於group操作。

分成左右兩個部分,第一部分類似DenseNet(因為加入了分組卷積,所以說是類似),第二部分是ResNeXt,對與中間的shortcut部分,由左右兩部分的特徵圖經過1x1卷積相加,然後經過3x3卷積,和1x1的卷積(這就是resnet的shortcut部分),然後對獲取的特徵圖分成兩部分,一部分和左邊類DenseNet對應特徵圖拼接,另一部分與右邊ResNeXt的特徵圖進行相加(注意左右是不一樣的操作

六,移動端的網路

1.     MobileNet

MobileNet v1:2017,MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications

和Xception類似,通過depthwiseseparable convolution來減少計算量,設計了一個適用於移動端的,取得效能和效率間很好平衡的一個網路。

MobileNet v2:2018,Inverted Residuals and Linear Bottlenecks: Mobile Networks forClassification, Detection and Segmentation

使用了ReLU6(即對ReLU輸出的結果進行Clip,使得輸出的最大值為6)適配移動裝置更好量化,然後提出了一種新的Inverted Residuals and Linear Bottleneck,即ResNet基本結構中間使用了depthwise卷積,一個通道一個卷積核,減少計算量,中間的通道數比兩頭還多(ResNet像漏斗,MobileNet v2像柳葉),並且全去掉了最後輸出的ReLU。

2.     ShuffleNet

2017,ShuffleNet: An ExtremelyEfficient Convolutional Neural Network for Mobile Devices

Xception已經做得很好了,但是1x1那裡太耗時間了成了計算的瓶頸,那就分組group convolution減少引數數量,但是分組了,組和組之間資訊隔離了,那就重排shuffle一下,強行讓資訊流動。具體的網路結構如上圖左側所示。channelshuffle就是對通道進行重排,將每組卷積的輸出分配到下一次卷積的不同的組去:

未完待續

如果有什麼錯誤,疑問,請加QQ:643421232探討


相關推薦

神經網路lenet到DPN發展歷程

先發一張圖(不全),以後再補一,LeNet51998, Yann LeCun 的 LeNet5。最早的卷積網路,已經有了卷積層,池化層和全連線層。二,AlexNet2012,ImageNet Classification with DeepConvolutional Neur

深度學習進階(六)--CNN神經網路除錯,錯誤歷程總結

總結一下今天的學習過程 (注:我此刻的心情與剛剛三分鐘前的心情是完全不一樣的) (昨天在想一些錯誤,今天又重拾信心重新配置GPU環境,結果很失敗,不過現在好了,在尋思著今天干了什麼的時候,無意間想到是不是自己方法入口不對啊。結果果然很幸運的被我猜到了,,,哈哈哈,我的心情又

常用神經網路基本原理到結構彙總

先明確一點就是,Deep Learning是全部深度學習演算法的總稱,CNN是深度學習演算法在影象處理領域的一個應用。第一點,在學習Deep learning和CNN之前,總以為它們是很了不得的知識,總以為它們能解決很多問題,學習了之後,才知道它們不過與其他機器學習演算法如s

CNN--神經網路R-CNN到Faster R-CNN的理解(CIFAR10分類程式碼)

1. 什麼是CNN 卷積神經網路(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一。 我們先來看卷積神經網路各個層級結構圖

深度學習、影象識別入門,VGG16神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就是說,理應有一些基本概念作為奠基石,讓你有底氣去完全理解一個龐大的卷積神經網路: 本文思路: 一、我認為學習卷積神經網路必須知道的幾個概念: 1、卷積過程: 我們經常說卷積神經網路卷積神經網路,到

《PaddlePaddle入門到煉丹》四——神經網路

文章目錄前言訓練模型預測影象參考資料 前言 上一章我們通過學習線性迴歸例子入門了深度學習,同時也熟悉了PaddlePaddle的使用方式,那麼我們在本章學習更有趣的知識點卷積神經網路。深度學習之所以那麼流行,很大程度上是得益於它在計算機視覺上得到非常好的效果,而

深度學習基礎(二)—— 多層感知機(MLP)到神經網路(CNN)

經典的多層感知機(Multi-Layer Perceptron)形式上是全連線(fully-connected)的鄰接網路(adjacent network)。 That is, every neuron in the network is connec

綜述神經網路論文:基礎技術到研究前景

卷積神經網路(CNN)在計算機視覺領域已經取得了前所未有的巨大成功,但我們目前對其效果顯著的原因

AlexNet理解神經網路的一般結構

2012年AlexNet在ImageNet大賽上一舉奪魁,開啟了深度學習的時代,雖然後來大量比AlexNet更快速更準確的卷積神經網路結構相繼出現,但是AlexNet作為開創者依舊有著很多值得學習參考的地方,它為後續的CNN甚至是R-CNN等其他網路都定下了基調

深度神經網路在目標檢測中發展

近些年來,深度卷積神經網路(DCNN)在影象分類和識別上取得了很顯著的提高。回顧從2014到2016這兩年多的時間,先後湧現出了R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SDP-CRC, YOLO,G-CNN, SSD等越來越快速和準確的目標檢測方法。 基

神經網路神經網路的瞭解

date: 2016-09-14 11:02 老師提供的閱讀材,上週就應該看完,但還是沒看,這周需要看完然後看兩篇FNN的論文並做一個report。 提供的材料是CS231n PS:才發現有翻譯,真真好人,我真真浪費時間t-T PPS

深度學習、影象分類入門,VGG16神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就是說,理應有一些基本概念作為奠基石,讓你有底氣去完全理解一個龐大的卷積神經網路: 本文思路: 一、我認為學習卷積神經網路必須知道的幾個概念: 1、卷積過程:   我們經常說卷積

卷積神經網路入門一種全卷積神經網路(LeNet),左至右依次為卷積→子取樣→卷積→子取樣→全連線→全連線→高斯連線測試 最後,為了檢驗 CNN 能否工作,我們準備不同的另一組圖片與標記集(不能在訓練

轉載來自:http://blog.csdn.net/maweifei/article/details/52443995 第一層——數學部分 CNN 的第一層通常是卷積層(Convolutional Layer)。輸入內容為一個 32 x 32 x 3 的畫素值陣列。現在

ImageNet資料集上的神經網路可以學到什麼What I learned from competing against a ConvNet on ImageNet

The results of the 2014 ImageNet Large Scale Visual Recognition Challenge (ILSVRC) were published a few days ago. The New York Times wr

深入理解神經網路(CNN)——原理到實現

王琦      QQ:451165431      計算機視覺&深度學習 本篇通過在MNIST上的實驗,引出卷積神經網路相關問題,詳細闡釋其原理以及常用技巧、調參方法。歡迎討論相關技術&學術問題,但謝絕拿來主義。 程式碼是博主自己

乾貨丨深度學習、影象分類入門,VGG16神經網路開始

剛開始接觸深度學習、卷積神經網路的時候非常懵逼,不知道從何入手,我覺得應該有一個進階的過程,也就

Keras學習(四)——CNN神經網路

本文主要介紹使用keras實現CNN對手寫資料集進行分類。 示例程式碼: import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.models impo

深度學習(十九)基於空間金字塔池化的神經網路物體檢測

原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一、相關理論    本篇博文主要講解大神何凱明2014年的paper:《Spatial Pyramid Pooling in Dee

淺析神經網路的內部結構

提到卷積神經網路(CNN),很多人的印象可能還停留在黑箱子,輸入資料然後輸出結果的狀態。裡面超級多的引數、眼花繚亂的命名可能讓你無法短時間理解CNN的真正內涵。這裡推薦斯坦福大學的CS231n課程,知乎上有筆記的中文翻譯。如果你需要更淺顯、小白的解釋,可以讀讀看本文。文章大部分理解都源自於CS3

TensorFlow官方文件樣例——三層神經網路訓練MNIST資料

        上篇部落格根據TensorFlow官方文件樣例實現了一個簡單的單層神經網路模型,在訓練10000次左右可以達到92.7%左右的準確率。但如果將神經網路的深度拓展,那麼很容易就能夠達到更高的準確率。官方中文文件中就提供了這樣的樣例,它的網路結構如