深度學習與TensorFlow:VGG論文筆記

深度學習與TensorFlow: VGG論文筆記

來自專欄雲時之間6 人贊了文章

馬毅老師曾說過:」如果你沒有看過近30年的經典論文,你是做不出成果的」.現如今深度學習如此火熱,一些關鍵節點發布的文章更應該好好的閱讀,因此我想在未來的一段時間內去閱讀一些經典的論文,去推敲和分析,並且爭取可以使用TensorFlow去復現他.而這篇文章我們將會閱讀VGG這篇經典文章,希望和大家交流,如果有理解不到位的地方,也請大家多多指正.

一:VGG的意義

這篇論文的模型的名稱」VGG」其實是牛津大學的Oxford Visual Geometry Group

這篇文章起初是以2014年該組參加imageNet的1000類圖像分類與定位的比賽的模型為基礎,使用該模型後該組獲得了2014年分類第二,定位任務第一的好成績.我們復現該文章的時候,是使用的VGG-16的模型.

論文下載地址:arxiv.org/pdf/1409.1556

二:文章內容

1:摘要

這篇文章主要討論的是在大規模的數據集的情況下,卷積網路深度對其準確率的影響,縱觀整篇文章,我們可以看到,他們的主要貢獻是使用了3*3的小型卷積核的網路結構去對逐漸加深的網路進行全面的評估,然後得出的結果表明加深網路到16-19層可以極大地超越之前的網路結構的效果.這些成果是基於2014年的imageNet挑戰賽,他獲得成績上文也有提到,並且這個模型的泛化能力也不錯,最後公布了VGG-16和VGG-19模型供大家研究.

2:介紹

我們想卷積網路(ConvNets)之所以能夠成功,無外乎有兩個原因:

1:大型的公共圖像數據集的出現,比如ImageNet

2:高性能的計算系統,比如GPU集群

下圖是卷積神經網路發展的一些主要網路,而我們今天要聊到的VGG其實是基於LeNet和AlexNet來提出更深的卷積神經網路

之前人們一直嘗試在AlexNet的原始框架上做一些改進,像是在第一個卷積上使用較小的卷積核以及較小的滑動步長,另一種思路就是在全圖以及多個尺寸上,更加稠密的進行訓練和測試網路.

VGG模型主要關注的是網路的深度,因此文章固定了網路的其他參數,通過增加卷積層來增加網路的深度,事實證明這是可行的,不難發現,文中的每個層都是小的3*3的卷積核

3:卷積配置

模型為了凸顯深度對於模型效果的影響,因此所有的卷積配置相同,上邊也提到過,因此在這一個章節,先是介紹卷積網路的通用架構,再去描述其評估的具體細節,最後再和之前的網路進行比較.

a):架構

訓練輸入:固定尺寸224*224的RGB圖像。

預處理:每個像素值減去訓練集上的RGB均值。

卷積核:一系列3*3卷積核堆疊,步長為1,採用padding保持卷積後圖像空 間解析度不變。

空間池化:緊隨卷積「堆」的最大池化,為2*2滑動窗口,步長為2。

全連接層:特徵提取完成後,接三個全連接層,前兩個為4096通道,第三個為1000通道,最後是一個soft-max層,輸出概率。

所有隱藏層都用非線性修正ReLu.

b):詳細配置

上圖中每列代表不同的網路,這些網路只有深度的不同(層數計算不包含池化層).卷積的通道數量都很少,第一層僅僅64通道,每經過一次最大池化,通道數翻翻,直到到達512通道停止.

圖2表示的是每一種模型的參數的數量,從圖中我們可以發現,儘管網路加深了,但是權重並沒有大幅度的增加,因此參數量主要集中在全連接層

c):使用3*3卷積核的意義

兩個3*3卷積核相當於一個5*5卷積核的感受域,三個3*3卷積核相當於一個 7*7卷積核的感受域。

優點:三個卷積堆疊具有三個非線性修正層,使模型更具判別性;其次三個 3*3卷積參數量更少,相當於在7*7卷積核上加入了正則化,便於加快訓練.

從下圖來看,在計算量這裡,為了突出小卷積核的優勢,拿同conv3x3、conv5x5、conv7x7、conv9x9和conv11x11,在224x224x3的RGB圖上(設置pad=1,stride=4,output_channel=96)做卷積,卷積層的參數規模和得到的feature map的大小如下:

3:分類框架

a):訓練

訓練方法基本與AlexNet一致,除了多尺度訓練圖像採樣方法不一致。 訓練採用mini-batch梯度下降法,batch size=256;

採用動量優化演算法,momentum=0.9;

採用L2正則化方法,懲罰係數0.00005;

dropout比率設為0.5;

初始學習率為0.001,當驗證集準確率不再提高時,學習率衰減為原來的0.1 倍,總共下降三次;

總迭代次數為370K(74epochs);

數據增強採用隨機裁剪,水平翻轉,RGB顏色變化;

設置訓練圖片大小的兩種方法:

定義S代表經過各向同性縮放的訓練圖像的最小邊。

第一種方法針對單尺寸圖像訓練,S=256或384,輸入圖片從中隨機裁剪 224*224大小的圖片,原則上S可以取任意不小於224的值。

第二種方法是多尺度訓練,每張圖像單獨從[Smin ,Smax ]中隨機選取S來進行尺 寸縮放,由於圖像中目標物體尺寸不定,因此訓練中採用這種方法是有效的,可看作一種尺寸抖動的訓練集數據增強。

論文中提到,網路權重的初始化非常重要,由於深度網路梯度的不穩定性, 不合適的初始化會阻礙網路的學習。因此我們先訓練淺層網路,再用訓練好的淺層網路去初始化深層網路。

b):測試

測試階段,對於已訓練好的卷積網路和一張輸入圖像,採用以下方法分類:

首先,圖像的最小邊被各向同性的縮放到預定尺寸Q;

然後,將原先的全連接層改換成卷積層,在未裁剪的全圖像上運用卷積網路, 輸出是一個與輸入圖像尺寸相關的分類得分圖,輸出通道數與類別數相同;

最後,對分類得分圖進行空間平均化,得到固定尺寸的分類得分向量。

我們同樣對測試集做數據增強,採用水平翻轉,最終取原始圖像和翻轉圖像 的soft-max分類概率的平均值作為最終得分。 由於測試階段採用全卷積網路,無需對輸入圖像進行裁剪,相對於多重裁剪效率會更高。但多重裁剪評估和運用全卷積的密集評估是互補的,有助於性能提升。

4:分類實驗

a):單尺寸評估

上圖展示了單一測試尺寸下的卷積網路性能

b);多尺寸評估

上圖展示了多個測試尺寸上的卷積網路性能

c):多重裁剪與密集網路評估

上圖展示多重裁剪與密集網路對比,並展示兩者相融合的效果

d):卷積模型的融合

這部分探討不同模型融合的性能,計算多個模型的 soft-max 分類概率的平均 值來對它們的輸出進行組合,由於模型的互補性,性能有所提高,這也用於比賽的最佳結果中。

1:展示多個卷積網路融合的結果

e):與當前最好演算法的比較

5:結論

VGG這篇論文評估了非常深的卷積網路在大規模圖像分類上的性能。結果表明深度有利於分類準確率的提升。附錄中展示了模型的泛化能力,再次確認了視覺表達中深度的重要性,並且一個比較重要的思想是卷積可代替全連接。整體參數達1億4千萬,主要在於第一個全連接層,用卷積來代替後,參數量下降且無精度損失,這個的確可以好好琢磨一下.

6:參考資料

1:VGG網路中測試時為什麼全鏈接改成卷積? -

zhihu.com/question/5342

2:ILSVRC-2014 presentation

robots.ox.ac.uk/~karen/

3:CS231n筆記

cs231n.stanford.edu/sli

4:深度學習VGG模型核心拆解

blog.csdn.net/qq_400270

推薦閱讀:

cifar10 (1) 讀取數據
imagenet-vgg-verydeep-19.mat 格式解析
TensorFlow開發環境搭建(Ubuntu16.04+GPU+TensorFlow源碼編譯)
深度學習面試100題(第16-20題)
TensorFlow與NLP模型

TAG:機器學習 | 深度學習DeepLearning | TensorFlow |