CNN应用之基于Overfeat的物体检测-2014 ICLR-未完待续
轉(zhuǎn)載自:深度學(xué)習(xí)(二十)CNN應(yīng)用之基于Overfeat的物體檢測(cè)-2014 ICLR-未完待續(xù) - hjimce的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/hjimce/article/details/50187881
基于Overfeat的物體檢測(cè)
原文地址:
作者:hjimce
一、相關(guān)理論
本篇博文主要講解經(jīng)典物體檢測(cè)算法:《OverFeat:?Integrated Recognition, Localization and Detection?using Convolutional Networks》,至今為止這篇paper,已然被引用了幾百次,可見算法牛逼之處非同一般啊。說(shuō)實(shí)話,當(dāng)年剛?cè)腴T深度學(xué)習(xí)的時(shí)候,看這篇文章感覺很難,Overfeat、DCNN、FCN,這三個(gè)算法,每個(gè)算法都看了將近一周的時(shí)間,才打通了任督二脈。開始前,先解釋一下文獻(xiàn)的OverFeat是什么意思,只有知道了這個(gè)單詞,我們才能知道這篇文獻(xiàn)想要干嘛,OverFeat說(shuō)的簡(jiǎn)單一點(diǎn)就是特征提取算子,就相當(dāng)于SIFT,HOG等這些算子一樣。Along?with?this?paper,?we?release?a?feature?extractor?named?“OverFeat”,這是文獻(xiàn)對(duì)overfeat定義的原話。這篇文獻(xiàn)最牛逼的地方,在于充分利用了卷積神經(jīng)網(wǎng)絡(luò)的特征提取功能,它把分類過(guò)程中,提取到的特征,同時(shí)又用于檢測(cè)等各種任務(wù),牛逼哄哄啊。只需要改變網(wǎng)絡(luò)的最后幾層,就可以實(shí)現(xiàn)不同的任務(wù),而不需要從頭開始訓(xùn)練整個(gè)網(wǎng)絡(luò)的參數(shù)。
未完待續(xù),敬請(qǐng)期待……
訓(xùn)練部分
對(duì)于每張?jiān)瓐D片為256*256,然后進(jìn)行隨機(jī)裁剪為221*221的大小作為輸入訓(xùn)練數(shù)據(jù),訓(xùn)練的min-batchs選擇128,權(quán)重初始化選擇,高斯分布的隨機(jī)初始化:
?
然后采用隨機(jī)梯度下降法,進(jìn)行優(yōu)化更新,動(dòng)量項(xiàng)參數(shù)大小選擇0.6,L2權(quán)重衰減系數(shù)大小選擇10-5次方。學(xué)習(xí)率一開始選擇0.05,然后根據(jù)迭代次數(shù)的增加,每隔幾十次的迭代后,就把學(xué)習(xí)率的大小減小一半。
然后就是DropOut,這個(gè)只有在最后的兩個(gè)全連接層,才采用dropout,dropout比率選擇0.5,也就是網(wǎng)絡(luò)的第6、7層。下面就是整個(gè)網(wǎng)絡(luò)的相關(guān)參數(shù)。
?
由以上的網(wǎng)絡(luò)結(jié)構(gòu)可以知道,在訓(xùn)練過(guò)程中,輸出特征圖的大小為1*1,總共有1000個(gè)特征圖(1000個(gè)分類)。在網(wǎng)絡(luò)的第1-5層,基本上和AlexNet是一樣的,也是使用了ReLU激活,最大池化。不同之處在于:
1、作者沒(méi)有使用局部響應(yīng)歸一化層,
2、然后也沒(méi)有采用重疊池化的方法
3、在第一層卷積層,stride作者是選擇了2,這個(gè)與AlexNet不同,AlexNet選擇的跨步是4。在網(wǎng)絡(luò)中,如果stride選擇比較打得話,雖然可以減少網(wǎng)絡(luò)層數(shù),提高速度,但是卻會(huì)降低精度。
3.3多尺度圖片分類
這一步需要聲明一下,網(wǎng)絡(luò)結(jié)構(gòu)在訓(xùn)練完后,參數(shù)的個(gè)數(shù)、結(jié)構(gòu)是固定的,而這一步的算法并沒(méi)有改變網(wǎng)絡(luò)的結(jié)構(gòu),只是用于預(yù)測(cè)一張圖片時(shí),通過(guò)裁剪的方法裁剪成幾張圖片,然后對(duì)這幾張圖片分別進(jìn)行預(yù)測(cè),最后對(duì)這幾張圖片結(jié)果進(jìn)行平均統(tǒng)計(jì)。
我們知道在Alex的文獻(xiàn)中,他們預(yù)測(cè)的方法是,輸入一張圖片256*256,然后進(jìn)行multi-view裁剪,也就是從圖片的四個(gè)角進(jìn)行裁剪,還有就是一圖片的中心進(jìn)行裁剪,這樣可以裁剪到5張224*224的圖片。然后把原圖片水平翻轉(zhuǎn)一下,再用同樣的方式進(jìn)行裁剪,又可以裁剪到5張圖片。把這10張圖片作為輸入,分別進(jìn)行預(yù)測(cè)分類,在后在softmax的最后一層,求取個(gè)各類的總概率,求取平均值。
?
于是,對(duì)于預(yù)測(cè),作者就提出了多尺度的方法,不過(guò)感覺跟AlexNet還是挺像的,如上圖所示,paper提出的是把圖片裁剪成6張大小不同的圖片,然后對(duì)每張圖片分別進(jìn)行預(yù)測(cè),經(jīng)過(guò)網(wǎng)絡(luò),得到分類向量。當(dāng)然輸入6張大小不一的圖片,只是其中的一小步,對(duì)于我們來(lái)說(shuō),沒(méi)啥疑問(wèn),但是真正有疑問(wèn)的是,每一種輸入的圖片因?yàn)榇笮〔煌?#xff0c;最后在卷積層與全連接層
在這里我們以輸入一張圖片為例(6張圖片每一種的計(jì)算方法都相同),其:
?
?
上面這個(gè)表格中,
從layer-5?pre-pool到layer-5?post-pool:這一步的實(shí)現(xiàn)是通過(guò)池化大小為(3,3)進(jìn)行池化,然后△x=0、1、2,△y=0、1、2,這樣我們可以得到對(duì)于每一張?zhí)卣鲌D,我們都可以得到9幅池化結(jié)果。以上面表格中的sacle1為例,layer-5?pre-pool大小是17*17,經(jīng)過(guò)池化后,大小就是5*5,然后有3*3張結(jié)果圖(不同offset得到的結(jié)果)。
從layer-5?post-pool到全連接層:我們知道,我們?cè)谟?xùn)練的時(shí)候,從卷積層到全連接層,輸入的大小是4096*(5*5),然后進(jìn)行全連接,得到4096*(1*1)。這個(gè)過(guò)程其實(shí)也是卷積,我們可以把全連接層,看成是對(duì)整張輸入特征圖的大小作為卷積核大小,進(jìn)行卷積,這個(gè)在《Fully?Convolutional?Networks?for?Semantic?Segmentation》paper又把它稱之為Fully?Convolutional?Networks,說(shuō)的簡(jiǎn)單一點(diǎn)就是把全連接,看成是對(duì)整個(gè)圖片卷積,記住是“看成”,并沒(méi)有改變網(wǎng)絡(luò)的任何結(jié)構(gòu),因?yàn)槲覀冊(cè)趯懮疃葘W(xué)習(xí)的代碼的時(shí)候,卷積層到全連接層就用到了flatten函數(shù),當(dāng)然如果你不使用flatten函數(shù),你可以直接繼續(xù)調(diào)用卷積函數(shù),以整幅圖片的大小為卷積核,進(jìn)行卷積。
回歸正題,回到我們這篇paper,我們知道在訓(xùn)練過(guò)程中,我們從layer-5?post-pool到第六層的時(shí)候,如果把全連接看成是卷積,那么其實(shí)這個(gè)時(shí)候卷積核的大小為5*5,因?yàn)橛?xùn)練的時(shí)候,layer-5?post-pool得到的結(jié)果是5*5。因此在預(yù)測(cè)分類的時(shí)候,假設(shè)layer-5?post-pool?得到的是7*9(上面表格中的scale?3),經(jīng)過(guò)5*5的卷積核進(jìn)行卷積后,那么它將得到(7-5+1)*(9-5+1)=3*5的輸出。
總結(jié)
以上是生活随笔為你收集整理的CNN应用之基于Overfeat的物体检测-2014 ICLR-未完待续的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CNN应用之SPP(基于空间金字塔池化的
- 下一篇: caffe入门学习