《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
- VGG16的keras代碼結(jié)構(gòu):https://blog.csdn.net/cai13160674275/article/details/71078554
前言
VGG是Oxford的Visual Geometry Group的組提出的(大家應(yīng)該能看出VGG名字的由來(lái)了)矛渴。該網(wǎng)絡(luò)是在ILSVRC 2014上的相關(guān)工作伏嗜,主要工作是證明了增加網(wǎng)絡(luò)的深度能夠在一定程度上影響網(wǎng)絡(luò)最終的性能钮呀。VGG有兩種結(jié)構(gòu),分別是VGG16和VGG19,兩者并沒(méi)有本質(zhì)上的區(qū)別蘸际,只是網(wǎng)絡(luò)深度不一樣。
VGG原理
VGG16相比AlexNet的一個(gè)改進(jìn)是采用連續(xù)的幾個(gè)3x3的卷積核代替AlexNet中的較大卷積核(11x11,7x7衩辟,5x5)。對(duì)于給定的感受野(與輸出有關(guān)的輸入圖片的局部大胁ǜ健)艺晴,采用堆積的小卷積核是優(yōu)于采用大的卷積核,因?yàn)槎鄬臃蔷€性層可以增加網(wǎng)絡(luò)深度來(lái)保證學(xué)習(xí)更復(fù)雜的模式掸屡,而且代價(jià)還比較蟹饽(參數(shù)更少)。
簡(jiǎn)單來(lái)說(shuō)仅财,在VGG中狈究,使用了3個(gè)3x3卷積核來(lái)代替7x7卷積核,使用了2個(gè)3x3卷積核來(lái)代替5*5卷積核盏求,這樣做的主要目的是在保證具有相同感知野的條件下抖锥,提升了網(wǎng)絡(luò)的深度亿眠,在一定程度上提升了神經(jīng)網(wǎng)絡(luò)的效果。
比如磅废,3個(gè)步長(zhǎng)為1的3x3卷積核的一層層疊加作用可看成一個(gè)大小為7的感受野(其實(shí)就表示3個(gè)3x3連續(xù)卷積相當(dāng)于一個(gè)7x7卷積)纳像,其參數(shù)總量為 3x(9xC^2) ,如果直接使用7x7卷積核拯勉,其參數(shù)總量為 49xC^2 竟趾,這里 C 指的是輸入和輸出的通道數(shù)。很明顯宫峦,27xC2小于49xC2岔帽,即減少了參數(shù);而且3x3卷積核有利于更好地保持圖像性質(zhì)导绷。
這里解釋一下為什么使用2個(gè)3x3卷積核可以來(lái)代替55卷積核:*
5x5卷積看做一個(gè)小的全連接網(wǎng)絡(luò)在5x5區(qū)域滑動(dòng)山卦,我們可以先用一個(gè)3x3的卷積濾波器卷積,然后再用一個(gè)全連接層連接這個(gè)3x3卷積輸出诵次,這個(gè)全連接層我們也可以看做一個(gè)3x3卷積層账蓉。這樣我們就可以用兩個(gè)3x3卷積級(jí)聯(lián)(疊加)起來(lái)代替一個(gè) 5x5卷積。
具體如下圖所示:
至于為什么使用3個(gè)3x3卷積核可以來(lái)代替7*7卷積核逾一,推導(dǎo)過(guò)程與上述類(lèi)似铸本,大家可以自行繪圖理解。
參考
3x3卷積的作用
連續(xù)使用兩個(gè)3x3的卷積核的感受野相當(dāng)于5x5遵堵,連續(xù)使用三個(gè)3x3的卷積核的感受野相當(dāng)于7x7箱玷。 那么舉例來(lái)說(shuō),使用3個(gè)3x3的卷積核而不是一個(gè)7x7的卷積核的好處是什么陌宿?有兩點(diǎn)原因:
我們使用了3次非線性函數(shù)而不是1次锡足,這樣增加了函數(shù)的判別能力。
這樣減少了參數(shù)的數(shù)量:假設(shè)三個(gè)堆疊的3x3卷積層的輸入和輸出的通道數(shù)都是C壳坪,參數(shù)數(shù)目為舶得。對(duì)于一個(gè)7x7的卷積核,參數(shù)數(shù)目為爽蝴。這相當(dāng)于對(duì)7x7的卷積核施加了正則化沐批。
1x1卷積的作用
增加決策函數(shù)(decision function)的非線性,因?yàn)橐肓朔蔷€性激活函數(shù)蝎亚。
VGG網(wǎng)絡(luò)結(jié)構(gòu)
下面是VGG網(wǎng)絡(luò)的結(jié)構(gòu)(VGG16和VGG19都在):
VGG16包含了16個(gè)隱藏層(13個(gè)卷積層和3個(gè)全連接層)九孩,如上圖中的D列所示
VGG19包含了19個(gè)隱藏層(16個(gè)卷積層和3個(gè)全連接層),如上圖中的E列所示
VGG網(wǎng)絡(luò)的結(jié)構(gòu)非常一致发框,從頭到尾全部使用的是3x3的卷積和2x2的max pooling躺彬。
如果你想看到更加形象化的VGG網(wǎng)絡(luò),可以使用經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)(CNN)結(jié)構(gòu)可視化工具來(lái)查看高清無(wú)碼的VGG網(wǎng)絡(luò)。
VGG優(yōu)缺點(diǎn)
VGG優(yōu)點(diǎn)
- VGGNet的結(jié)構(gòu)非常簡(jiǎn)潔宪拥,整個(gè)網(wǎng)絡(luò)都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)仿野。
- 幾個(gè)小濾波器(3x3)卷積層的組合比一個(gè)大濾波器(5x5或7x7)卷積層好:
- 驗(yàn)證了通過(guò)不斷加深網(wǎng)絡(luò)結(jié)構(gòu)可以提升性能。
VGG缺點(diǎn)
- VGG耗費(fèi)更多計(jì)算資源江解,并且使用了更多的參數(shù)(這里不是3x3卷積的鍋),導(dǎo)致更多的內(nèi)存占用(140M)徙歼。其中絕大多數(shù)的參數(shù)都是來(lái)自于第一個(gè)全連接層犁河。VGG可是有3個(gè)全連接層啊魄梯!
PS:有的文章稱:發(fā)現(xiàn)這些全連接層即使被去除桨螺,對(duì)于性能也沒(méi)有什么影響,這樣就顯著降低了參數(shù)數(shù)量酿秸。
注:很多pretrained的方法就是使用VGG的model(主要是16和19)灭翔,VGG相對(duì)其他的方法,參數(shù)空間很大辣苏,最終的model有500多m肝箱,AlexNet只有200m,GoogLeNet更少稀蟋,所以train一個(gè)vgg模型通常要花費(fèi)更長(zhǎng)的時(shí)間煌张,所幸有公開(kāi)的pretrained model讓我們很方便的使用。
代碼篇:VGG訓(xùn)練與測(cè)試
這里推薦兩個(gè)開(kāi)源庫(kù)退客,訓(xùn)練請(qǐng)參考tensorflow-vgg骏融,快速測(cè)試請(qǐng)參考VGG-in TensorFlow。
代碼我就不介紹了萌狂,其實(shí)跟上述內(nèi)容一致档玻,跟著原理看code應(yīng)該會(huì)很快。我快速跑了一下茫藏,VGG-in TensorFlow误趴,代碼親測(cè)可用,效果很nice务傲,就是model下載比較煩冤留。
貼心的Amusi已經(jīng)為你準(zhǔn)備好了[VGG-in TensorFlow](VGG in TensorFlow)的測(cè)試代碼吆豹、model和圖像污筷。需要的同學(xué)可以關(guān)注CVer微信公眾號(hào)锅劝,后臺(tái)回復(fù):VGG培慌。
天道酬勤慎皱,還有很多知識(shí)要學(xué)娃肿,想想都刺激~Fighting儡蔓!
參考
[1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition
深度學(xué)習(xí)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)之VGGNet - CSDN博客