經(jīng)典分類CNN模型系列其二:VGG

介紹

自Alexnet于2012年的ILSVRC大賽中奮勇奪魁后,ConvNet就不可抑制地大發(fā)展了起來(lái)。2014年新的一屆ILSVRC大賽中Googlenet與VGG的身影分外亮眼。Googlenet相對(duì)VGG而言在網(wǎng)絡(luò)結(jié)構(gòu)上有了更新的突破,不過(guò)其復(fù)雜度也大大增加了。VGG相對(duì)Googlenet雖然精度略遜些,但其整體網(wǎng)絡(luò)框架還是延續(xù)了Alexnet及更早的Lenet等的一貫思路,此外還更深入的探討了ConvNet深度對(duì)模型性能可能的影響。由于其整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的簡(jiǎn)單、強(qiáng)大,VGG16/VGG19曾一度廣泛被用作各種檢測(cè)網(wǎng)絡(luò)框架像Faster-RCNN/SSD等的主干特征提取網(wǎng)絡(luò),直到Resnet提出之后,它才漸漸完成了其歷史使命,退居二線了。。不過(guò)至今仍有許多計(jì)算機(jī)視覺(jué)領(lǐng)域內(nèi)的任務(wù)會(huì)考慮VGG的網(wǎng)絡(luò)設(shè)計(jì)來(lái)構(gòu)建其新的應(yīng)用網(wǎng)絡(luò)模型。

VGG網(wǎng)絡(luò)結(jié)構(gòu)

VGG的幾種網(wǎng)絡(luò)架構(gòu)

下表所示為VGG論文當(dāng)中實(shí)驗(yàn)過(guò)的幾種ConvNet結(jié)構(gòu)。它們其本采用了3x3的Conv kernel,pad/stride為1,只是在其中的若干Conv層后會(huì)置MaxPool層來(lái)作特征的上采樣以高度抽象特征,節(jié)省后續(xù)的計(jì)算。然后在每個(gè)網(wǎng)絡(luò)的最后則是同其它分類網(wǎng)絡(luò)一樣的若干個(gè)FCs層及Softmax(注意,在更為近代的Resnet/Googlenet系列模型當(dāng)中已經(jīng)去掉了參數(shù)非常多,計(jì)算量大的FC層,而改用了更好使的Average Pool層)。在這些網(wǎng)絡(luò)結(jié)構(gòu)中,VGG16與VGG19(表中的D網(wǎng)絡(luò)與E網(wǎng)絡(luò))最為受人歡迎,它們?cè)诟鞔驠rameworks上訓(xùn)練好的模型參數(shù)在網(wǎng)上都可公開(kāi)獲得。

VGG網(wǎng)絡(luò)的幾種結(jié)構(gòu)

作者表明雖然兩個(gè)級(jí)聯(lián)的3x3 conv或三個(gè)級(jí)聯(lián)的3x3 conv分別在理論上等價(jià)于一個(gè)5x5 conv及一個(gè)7x7 conv。不過(guò)它們所具的模型參數(shù)(9C^2與27C2)則分別要少于后兩者的數(shù)目(分別為25*C2與49*C^2)。同時(shí)作者實(shí)驗(yàn)表明更深(層數(shù)更多)而非更寬(conv channels更多)的網(wǎng)絡(luò)有著自動(dòng)規(guī)則自己參數(shù)的能力,因此有著更好的學(xué)習(xí)能力。(呵呵,這恐怕亦是一煉金術(shù)中招數(shù),難有理論支撐吧,多半是作者在此種VGG類型網(wǎng)絡(luò)中得到的經(jīng)驗(yàn)總結(jié))。

VGG分類框架

VGG訓(xùn)練

同Alexnet一樣,也是用SGD對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。其訓(xùn)練中用到的超參數(shù)像Learning rate/Dacay factor等與Alexnet也幾乎一樣。訓(xùn)練中用到的輸入圖片增強(qiáng),VGG也是使用了一樣的image shift及Random crop兩種技術(shù)。

不過(guò)對(duì)于輸入圖片的維度,VGG分別實(shí)驗(yàn)了兩種方法。一種是采用固定的維度輸入,論文中分別嘗試了256x256與384x384兩種輸入圖片維度。另外一種則是采用了多維度訓(xùn)練及每次輸入圖片從一個(gè)維度范圍內(nèi)([256, 512])進(jìn)行選擇,resize后再用于進(jìn)行訓(xùn)練。這種方法顯然會(huì)受模型最后的幾個(gè)FCs層的限制,因此作者特意將第一個(gè)FC改為了7x7的conv,后兩個(gè)FC則改為了1x1的conv,最后如Googlenet那樣接上了一個(gè)Average Pool層對(duì)得到的1000個(gè)(Imagenet共有1000類)score maps進(jìn)行channel級(jí)加總,最后再用softmax層處理就得到了1000類的概率分布。

VGG推理

推理時(shí)VGG將完整的image直接通過(guò)訓(xùn)練好的VGG模型,其中在multi-scal訓(xùn)過(guò)的VGG上它最終后先得到一個(gè)1000個(gè)channels的score maps,然后經(jīng)Average Pool層再得到最終的1000類的概率分布。作者實(shí)驗(yàn)了曾被證明較為成功的multi-crop圖片進(jìn)行預(yù)測(cè),然后再對(duì)其求平場(chǎng)的方式,發(fā)現(xiàn)效果并不明顯,提升精度有限,而且會(huì)帶來(lái)較大的計(jì)算量。

訓(xùn)練細(xì)節(jié)

作者在論文中的實(shí)驗(yàn)結(jié)果是使用了4個(gè)GPUs作多節(jié)點(diǎn)數(shù)據(jù)并行訓(xùn)練得到的。

實(shí)驗(yàn)結(jié)果

首先下表為多種不同深度的VGG網(wǎng)絡(luò)所分別具有的分類精度比較??梢钥闯鲎钌畹腣GG16與VGG19表現(xiàn)突出。不過(guò)作者實(shí)驗(yàn)也表明若使用此類結(jié)構(gòu)再進(jìn)進(jìn)一步對(duì)網(wǎng)絡(luò)加深,那么其分類精度也不會(huì)再進(jìn)一步提升了。換言之對(duì)于VGG類型的3x3 single scale conv疊加的網(wǎng)絡(luò)而言,19層是它的天花板,再向上加層已無(wú)意義。

不同VGG網(wǎng)絡(luò)配置得到的實(shí)驗(yàn)結(jié)果對(duì)比

下表為VGG網(wǎng)絡(luò)與當(dāng)時(shí)其它的分類網(wǎng)絡(luò)的結(jié)果比較。

VGG與其它分類網(wǎng)絡(luò)的性能比較

代碼分析

作者本來(lái)就是基于Caffe完成的此網(wǎng)絡(luò)實(shí)現(xiàn)。因此這里我們也使用caffe下的模型描述來(lái)分析下它的結(jié)構(gòu)。

首先是它的基本輸入層,與Alexnet網(wǎng)絡(luò)一樣。其用于完成數(shù)據(jù)增強(qiáng)的工作多是在transform里面完成,可見(jiàn)它只是用了Mirror鏡像處理增強(qiáng),此外就是以227x227的size對(duì)原圖進(jìn)行切割,在真正灌入網(wǎng)絡(luò)之前還會(huì)使用已有的dataset mean file對(duì)圖片進(jìn)行歸一化操作。

name: "AlexNet"layer{name:"data"type:"Data"top:"data"top:"label"include {? ? phase: TRAIN? }transform_param{mirror: true? ? crop_size:227mean_file:"data/ilsvrc12/imagenet_mean.binaryproto"}data_param{source:"examples/imagenet/ilsvrc12_train_lmdb"batch_size:256backend: LMDB? }}

以下是它網(wǎng)絡(luò)的基本組成成分。差不多就是Conv(3x3)+ReLu+LRN或者Conv(3x3)+ReLu+LRN+Pool(2x2)。注意后來(lái)更先進(jìn)的分類網(wǎng)絡(luò)已經(jīng)紛紛拋棄了LRN而改用了更好的BN。

layer{name:"conv1"type:"Convolution"bottom:"data"top:"conv1"param {? ? lr_mult:1decay_mult:1}param{lr_mult:2decay_mult:0}convolution_param{num_output:96kernel_size:11stride:4weight_filler {? ? ? type:"gaussian"std:0.01}bias_filler{type:"constant"value:0}? }}layer{name:"relu1"type:"ReLU"bottom:"conv1"top:"conv1"}layer{name:"norm1"type:"LRN"bottom:"conv1"top:"norm1"lrn_param {? ? local_size:5alpha:0.0001beta:0.75}}layer{name:"pool1"type:"Pooling"bottom:"norm1"top:"pool1"pooling_param {? ? pool: MAX? ? kernel_size:3stride:2}}

與Alexnet一樣,在第一個(gè)參數(shù)量較多的FC層后也用了dropout來(lái)防止模型在訓(xùn)練當(dāng)中出現(xiàn)過(guò)擬合。

layer{name:"fc6"type:"InnerProduct"bottom:"pool5"top:"fc6"param {? ? lr_mult:1decay_mult:1}param{lr_mult:2decay_mult:0}inner_product_param{num_output:4096weight_filler {? ? ? type:"gaussian"std:0.005}bias_filler{type:"constant"value:0.1}? }}layer{name:"relu6"type:"ReLU"bottom:"fc6"top:"fc6"}layer{name:"drop6"type:"Dropout"bottom:"fc6"top:"fc6"dropout_param {? ? dropout_ratio:0.5}}

然后就是最后的FC及用于訓(xùn)練的SoftmaxLoss層和用于推理的Accuracy層。

layer{name:"fc8"type:"InnerProduct"bottom:"fc7"top:"fc8"param {? ? lr_mult:1decay_mult:1}param{lr_mult:2decay_mult:0}inner_product_param{num_output:1000weight_filler {? ? ? type:"gaussian"std:0.01}bias_filler{type:"constant"value:0}? }}layer{name:"accuracy"type:"Accuracy"bottom:"fc8"bottom:"label"top:"accuracy"include {? ? phase: TEST? }}layer{name:"loss"type:"SoftmaxWithLoss"bottom:"fc8"bottom:"label"top:"loss"}

參考文獻(xiàn)

VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION, Karen-Simonyan & Andrew-Zisserman, 2015

https://github.com/intel/caffe

作者:manofmountain

鏈接:http://www.itdecent.cn/p/c5475b67371f

來(lái)源:簡(jiǎn)書

簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容