【CV论文阅读】 Fast RCNN + SGD笔记
Fast RCNN的結(jié)構(gòu):
?
先從這幅圖解釋FAST RCNN的結(jié)構(gòu)。首先,FAST RCNN的輸入是包含兩部分,image以及region proposal(在論文中叫做region of interest,ROI)。Image經(jīng)過(guò)深度網(wǎng)絡(luò)(deep network)之后得到feature map,然后可以從feature map中找到ROI在其中的投射projection得到每個(gè)patch,但論文沒(méi)有提及怎么在map中尋找對(duì)應(yīng)的patch,估計(jì)可以通過(guò)位置關(guān)系找到(猜想,因?yàn)閐eep ConvNet 之后相對(duì)的位置是不變的)。
把每個(gè)patch經(jīng)過(guò)ROI pooling layer,再經(jīng)過(guò)一系列的full connected layer后,分別完成了兩個(gè)任務(wù)的預(yù)估:一是類(lèi)別的預(yù)測(cè)softmax,一個(gè)是bounding box的預(yù)測(cè)。
在softmax的預(yù)測(cè)輸出是類(lèi)別的概率分布,而bounding box 預(yù)測(cè)為每個(gè)類(lèi)別都輸出預(yù)測(cè)回歸方程計(jì)算的四個(gè)參數(shù)(如上篇總結(jié)《Rich feature hierarchies for accurate object detection and semantic segmentation》中學(xué)習(xí)的四個(gè)參數(shù),但論文中好像直接就是代表中心坐標(biāo)以及長(zhǎng)寬)。
?
ROI pooling layer:
ROI pooling layer其實(shí)是一個(gè)max pooling layer。假設(shè)有兩個(gè)超參數(shù)H、W,把輸入的patch劃分成H*W個(gè)小方格,假設(shè)投影的每個(gè)ROI的patch為h*w,則每個(gè)小子方格的大小沒(méi)h/H*w/W,而在每個(gè)方格中,執(zhí)行的是max pooling layer 的操作。
在這里有必要繼續(xù)的討論一下在這個(gè)ROI pooling layer怎樣反向誤差傳播。
首先要明白的是,BP算法其實(shí)應(yīng)用的就是導(dǎo)數(shù)的鏈?zhǔn)椒▌t,很巧妙地解決了誤差的傳播問(wèn)題。如下公式:
?
其中aj代表卷積層的輸入,而如果經(jīng)過(guò)一個(gè)激活函數(shù)之后,得到zj=h(aj),其實(shí)zj才是下一層的輸入,而對(duì)k求和代表所有包含zj作為輸入的神經(jīng)元。因此,可以得到公式,而就是誤差。
對(duì)應(yīng)到pooling層,假設(shè)輸入層的元素值xi,對(duì)應(yīng)卷積層的i位置,對(duì)應(yīng)的是第r個(gè)ROI的layer,它經(jīng)過(guò)ROI pooling層后在對(duì)應(yīng)輸出到j(luò)位置。而xi是子窗口中的最大值。把一般的求誤差的公式對(duì)應(yīng)到ROI pooling中,
?
其中i*(r,j)表示第r個(gè)ROI從第i的輸入(如果是子窗口中的最大像素值)對(duì)應(yīng)到輸出的第j的位置。而sigma(r)是因?yàn)槟硞€(gè)像素可能落在多個(gè)ROI中。
?
Mini-batch:
當(dāng)使用pre-trained網(wǎng)絡(luò)的參數(shù)去初始化Fast RCNN網(wǎng)絡(luò)時(shí),需要三個(gè)改變。第一,把最后一層的max pooling使用ROI pooling層去替代;第二、最后一層fc層以及softmax層用softmax層和bounding box預(yù)測(cè)層替代;第三,輸入包含兩種數(shù)據(jù):image以及ROI。
batch就是完成一次訓(xùn)練的數(shù)據(jù)集,這里對(duì)參數(shù)進(jìn)行tune,就是有監(jiān)督訓(xùn)練對(duì)參數(shù)進(jìn)行微調(diào)(使用的是SGD,隨機(jī)梯度下降法)。mini batch是通過(guò)隨機(jī)采樣得到的,首先隨機(jī)選擇N張圖片,然后每張圖片隨機(jī)采樣R/N個(gè)ROI。論文采用R=128,N=2。
今天想明白了一個(gè)batch是怎么完成一次訓(xùn)練。我開(kāi)始以為是一次輸入一個(gè)batch的數(shù)據(jù)集,其實(shí)不是的,一次處理的依然是一張的圖片,而在最后輸出層計(jì)算這張圖片的產(chǎn)生的loss,把batch里的圖片全部輸入到網(wǎng)絡(luò)里,就產(chǎn)生了loss的和LOSS,這時(shí)可以使用這個(gè)LOSS去執(zhí)行BP算法,微調(diào)網(wǎng)絡(luò)中的參數(shù)。
同樣的,當(dāng)IOU至少是0.5的才有可能是帶有類(lèi)別標(biāo)志的,而0.1到0.5的認(rèn)為是背景,而低于0.1的act as a heuristic for hard example mining(這里我也想不明白)。
?
損失函數(shù):
損失函數(shù)由兩部分組成,分別是類(lèi)別誤差函數(shù)以及定位誤差:
?
(@2016/8/17 ? : 訓(xùn)練時(shí)每個(gè)ROI輸入時(shí)應(yīng)該都是有l(wèi)abel的,這取決于它與label的IOU,如上小節(jié)所述。估計(jì)訓(xùn)練時(shí)的樣本只會(huì)有一個(gè)bounding box)
其中類(lèi)別誤差取類(lèi)別概率的負(fù)對(duì)數(shù)作為誤差函數(shù)。而第二項(xiàng)定位誤差,在真實(shí)類(lèi)別u>=1時(shí)才有意義,u=0時(shí)表示背景。Bounding box的目標(biāo)為v,如上文提到,它有四個(gè)參數(shù),于是定位誤差為:
?
其中,,而且。
?
尺度不變性:
論文中實(shí)現(xiàn)尺度不變性是通過(guò)把圖像固定。
?
隨機(jī)梯度下降法:
?
@ 2016 /08/21 更新。
現(xiàn)在神經(jīng)網(wǎng)絡(luò)里用的SGD都是指min-batch SGD,找了一個(gè)例子from?http://www.cnblogs.com/maybe2030/p/5089753.html#_label2
轉(zhuǎn)載于:https://www.cnblogs.com/jie-dcai/p/5701435.html
總結(jié)
以上是生活随笔為你收集整理的【CV论文阅读】 Fast RCNN + SGD笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: smarty基础
- 下一篇: Linux下恢复误删文件:思路+实践