深度學習與TensorFlow:VGG論文筆記
來自專欄雲時之間6 人贊了文章
馬毅老師曾說過:」如果你沒有看過近30年的經典論文,你是做不出成果的」.現如今深度學習如此火熱,一些關鍵節點發布的文章更應該好好的閱讀,因此我想在未來的一段時間內去閱讀一些經典的論文,去推敲和分析,並且爭取可以使用TensorFlow去復現他.而這篇文章我們將會閱讀VGG這篇經典文章,希望和大家交流,如果有理解不到位的地方,也請大家多多指正.
一:VGG的意義
這篇論文的模型的名稱」VGG」其實是牛津大學的Oxford Visual Geometry Group
這篇文章起初是以2014年該組參加imageNet的1000類圖像分類與定位的比賽的模型為基礎,使用該模型後該組獲得了2014年分類第二,定位任務第一的好成績.我們復現該文章的時候,是使用的VGG-16的模型.
論文下載地址:https://arxiv.org/pdf/1409.1556.pdf
二:文章內容
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網路中測試時為什麼全鏈接改成卷積? -
https://www.zhihu.com/question/53420266
2:ILSVRC-2014 presentation
http://www.robots.ox.ac.uk/~karen/pdf/ILSVRC_2014.pdf
3:CS231n筆記
http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture9.pdf
4:深度學習VGG模型核心拆解
https://blog.csdn.net/qq_40027052/article/details/79015827
推薦閱讀:
※cifar10 (1) 讀取數據
※imagenet-vgg-verydeep-19.mat 格式解析
※TensorFlow開發環境搭建(Ubuntu16.04+GPU+TensorFlow源碼編譯)
※深度學習面試100題(第16-20題)
※TensorFlow與NLP模型
TAG:機器學習 | 深度學習DeepLearning | TensorFlow |