RCNN是從圖像中檢測物體位置的方法,嚴格來講不屬於三維計算機視覺。但是這種方法卻又非常非常重要,對三維物體的檢測非常有啟發,所以在這里做個總結。
1、RCNN - the original idea
—— <Rich feature hierarchies for accurate object detection and semantic segmentation>
這篇文章提出了用CNN網絡來對物體進行檢測的思路。
Q:
a. CNN網絡中存在卷積層和池化層,每次池化都會弱化物體的位置信息,強化物體的特征信息,所以CNN網絡最終會告訴我們是什么,而不是在哪兒
b. 要使用CNN網絡來檢測,直覺上我們可以訓練一個識別某物體的網絡,來對小方塊進行分類。但是這需要大量的訓練集,可能對於待檢測物體,我們沒有收集大量訓練集的機會
c. CNN網絡的圖像輸入層具有固定的維度,任意大小的小方塊是無法直接輸入到CNN網絡里的
A:
a. 文章提出了可以在已經訓練好的網絡上利用小規模的訓練集進行優化,也能達到很好的效果。
b.通過 selective search來確定可能含有物體的小方塊
c.將消方塊進行拉伸(warp),送入CNN進行分類,最終實現檢測
細節:
1、使用了ILSVRC 2012對網絡進行預訓練,步長0.01
2、精訓練使用的步長是0.001
3、mini-batch size = 128, 其中背景96,帶東西的32。有意的bias,讓網絡更大概率判為背景
4、loss function 中,IoU超過50%判為1,否則為0
5、使用svm對物體類別進行判斷
6、對box進行線性回歸,獲得更高的精度(后面還會提到)
2、SPPNet - 結合金字塔
—— <Spatial pyramid pooling in deep convolutional networks for visual recognition>
在第一步使用rcnn中,檢測需要將圖片拉伸成特定的大小,便於輸入網絡。這顯然很不合理,很多東西拉伸以后就完全變形了,這會降低檢測的精度。所以需要一種不拉伸方塊的方法,來對物體進行檢測。
Q:
a.拉伸圖像會帶來識別精度的下降,在r-cnn中尤其明顯
A:
a.金字塔池化:將任意維度的圖片池化成同一維度。例如,圖片為256*256,金字塔接受的就是maxpool2dlayer(16,'stride',16),如果圖片為128*128,金字塔接受的就是maxpool2dlayer(8,'stride',8)

細節:
只用了兩種bin size 來構建訓練集,180 * 180, 224 * 224. 因為只有兩種情況,所以可以很方便的構建bp函數
3、FastCNN - 要啥金字塔,一層就夠啦
—— <Fast R-CNN>
Q:
a.對於每個 box/proposal 都需要進行一次feed forward.
b.訓練時需要對分類函數和回歸函數分開訓練
A:
a.對圖像進行一次整體的feed forward,得到總的卷積結果;對總結果中的box,每個box一次,分別進行ROI pooling (其實就是金字塔的第一層)
b. ROI pooling 后會得到固定維度的向量,送入多次全連接層,直接映射成類別和box的回歸

細節:
1、訓練時,所有的權重都得到迭代
4、Faster R-CNN — 這才是顛覆
——<Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks>
Q:
a. 對每張圖都要進行一次 selective search 以獲得proposal太耗時了
A:
a.設計一個神經網絡 Region Proposal Net 自動來提出proposal 吧!

RPN 本質上可以看作一個非常獨立的部分,雖然它號稱使用了整幅圖像的feature,但功能上RPN是獨立的。RPN的任務是輸入圖像,輸出一系列Proposal(四點坐標+是否有物體)
1、使用卷積網絡的最后一個卷積層卷積完的結果 Last_Image * final_convolution2dlayer(n,d). 作為RPN的真正輸入(前面都是公用的,后面才是RPN)
2、使用一個3*3的小卷積掩模將1中的結果抽象成d 維向量。
3、將該向量送入2個全連接層——分類全連接(2K輸出)和坐標全連接(4K輸出)————k個proposal (3 scale,2 aspect ratio)
4、在2中,掩模的位置決定了全連接輸出參數的"原點"
5、總結
在神經網絡中,全連接是最強的非線性映射方式,也是花費最重的。在結果層少量的使用全連接以換取強大的映射方程是很有意義的。
說了那么多,和三維視覺有毛關系?其實關系在這里,在二維圖像中檢測物體位置和在三維圖像中檢測物體位姿是對偶的。不信?見 <Deep Sliding Shapes for amodal 3D object detection in RGB-D images>
