【转载】计算机视觉~VGG网络
【轉載:一文讀懂VGG網絡 - Amusi的文章 - 知乎 https://zhuanlan.zhihu.com/p/41423739】
目錄
前言
VGG原理
VGG網絡結構
VGG優缺點
VGG優點
VGG缺點
VGG預訓練模型
代碼篇:VGG訓練與測試
參考
網上太多關于CNN經典網絡的介紹了,泛讀的文章大多都從LeNet說到ResNet/DenseNet;而精讀的文章質量參次不齊,而且很多介紹的并不具體。本文旨在加深筆者印象,并盡可能詳盡地來介紹VGG網絡,供以后方便查詢,若能順便幫助大家理解,實屬榮幸。
《Very Deep Convolutional Networks for Large-Scale Image Recognition》
- arXiv:[1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition
- intro:ICLR 2015
- homepage:Visual Geometry Group Home Page
前言
VGG是Oxford的Visual?Geometry?Group的組提出的(大家應該能看出VGG名字的由來了)。該網絡是在ILSVRC 2014上的相關工作,主要工作是證明了增加網絡的深度能夠在一定程度上影響網絡最終的性能。VGG有兩種結構,分別是VGG16和VGG19,兩者并沒有本質上的區別,只是網絡深度不一樣。
VGG原理
VGG16相比AlexNet的一個改進是采用連續的幾個3x3的卷積核代替AlexNet中的較大卷積核(11x11,7x7,5x5)。對于給定的感受野(與輸出有關的輸入圖片的局部大小),采用堆積的小卷積核是優于采用大的卷積核,因為多層非線性層可以增加網絡深度來保證學習更復雜的模式,而且代價還比較小(參數更少)。
簡單來說,在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網絡的深度,在一定程度上提升了神經網絡的效果。
比如,3個步長為1的3x3卷積核的一層層疊加作用可看成一個大小為7的感受野(其實就表示3個3x3連續卷積相當于一個7x7卷積),其參數總量為 3x(9xC^2) ,如果直接使用7x7卷積核,其參數總量為 49xC^2 ,這里 C 指的是輸入和輸出的通道數。很明顯,27xC^2小于49xC^2,即減少了參數;而且3x3卷積核有利于更好地保持圖像性質。
這里解釋一下為什么使用2個3x3卷積核可以來代替5*5卷積核:
5x5卷積看做一個小的全連接網絡(卷積層一豎排25個神經單元,可以看成是5x5矩陣)在5x5區域(同上理,輸入一長溜數據看一看成是mxn矩陣,受卷積層size限制,只能在5x5區域滑動)滑動,我們可以先用一個3x3的卷積濾波器卷積,然后再用一個全連接層連接這個3x3卷積輸出,這個全連接層我們也可以看做一個3x3卷積層。這樣我們就可以用兩個3x3卷積級聯(疊加)起來代替一個 5x5卷積。
具體如下圖所示:
至于為什么使用3個3x3卷積核可以來代替7*7卷積核,推導過程與上述類似,大家可以自行繪圖理解。
VGG網絡結構
下面是VGG網絡的結構(VGG16和VGG19都在):
- VGG16包含了16個隱藏層(13個卷積層和3個全連接層),如上圖中的D列所示
- VGG19包含了19個隱藏層(16個卷積層和3個全連接層),如上圖中的E列所示
VGG網絡的結構非常一致,從頭到尾全部使用的是3x3的卷積和2x2的max pooling。
如果你想看到更加形象化的VGG網絡,可以使用經典卷積神經網絡(CNN)結構可視化工具來查看高清無碼的VGG網絡。
VGG ILSVRC 16 layers:http://dgschwend.github.io/netscope/#/gist/e65799e70358c6782b1b
VGG優缺點
VGG優點
- VGGNet的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
- 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
- 驗證了通過不斷加深網絡結構可以提升性能。
VGG缺點
- VGG耗費更多計算資源,并且使用了更多的參數(這里不是3x3卷積的鍋),導致更多的內存占用(140M)。其中絕大多數的參數都是來自于第一個全連接層。VGG可是有3個全連接層啊!
PS:有的文章稱:發現這些全連接層即使被去除,對于性能也沒有什么影響,這樣就顯著降低了參數數量。
VGG預訓練模型
注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相對其他的方法,參數空間很大,最終的model有500多m,AlexNet只有200m,GoogLeNet更少,所以train一個vgg模型通常要花費更長的時間,所幸有公開的pretrained model讓我們很方便的使用。
代碼篇:VGG訓練與測試
這里推薦兩個開源庫,訓練請參考tensorflow-vgg,快速測試請參考VGG-in TensorFlow。
代碼我就不介紹了,其實跟上述內容一致,跟著原理看code應該會很快。我快速跑了一下,VGG-in TensorFlow,代碼親測可用,效果很nice,就是model下載比較煩。
貼心的Amusi已經為你準備好了[VGG-in TensorFlow](VGG in TensorFlow)的測試代碼、model和圖像。需要的同學可以關注CVer微信公眾號,后臺回復:VGG。
天道酬勤,還有很多知識要學,想想都刺激~Fighting!
參考
[1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition
深度網絡VGG理解 - CSDN博客
深度學習經典卷積神經網絡之VGGNet - CSDN博客
Netscope CNN Analyzer
machrisaa/tensorflow-vgg
VGG in TensorFlow
機器學習進階筆記之五 | 深入理解VGG\Residual Network](機器學習進階筆記之五 | 深入理解VGG\Residual Network
總結
以上是生活随笔為你收集整理的【转载】计算机视觉~VGG网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习应用方向(三)~可解释机器学习E
- 下一篇: 医学图像~脑分类数据fMRI, voxe