轉:懶人元(侵刪)
RPN全稱是Region Proposal Network,Region Proposal的中文意思是“區域選取”,也就是“提取候選框”的意思,所以RPN就是用來提取候選框的網絡。
1. RPN的意義
RPN第一次出現在世人眼中是在Faster RCNN這個結構中,專門用來提取候選框,在RCNN和Fast RCNN等物體檢測架構中,用來提取候選框的方法通常是Selective Search,是比較傳統的方法,而且比較耗時,在CPU上要2s一張圖。所以作者提出RPN,專門用來提取候選框,一方面RPN耗時少,另一方面RPN可以很容易結合到Fast RCNN中,稱為一個整體。
RPN的引入,可以說是真正意義上把物體檢測整個流程融入到一個神經網絡中,這個網絡結構叫做Faster RCNN; Faster RCNN = RPN + Fast RCNN
圖1 Faster RCNN的整體結構
我們不難發現,RPN在整個Faster RCNN中的位置,處於中間部分;
2. RPN的運作機制
我們先來看看Faster RCNN原文中的圖:
圖2 RPN的結構
圖2展示了RPN的整個過程,一個特征圖經過sliding window處理,得到256維特征,然后通過兩次全連接得到結果2k個分數和4k個坐標;相信大家一定有很多不懂的地方;我把相關的問題一一列舉:
- RPN的input 特征圖指的是哪個特征圖?
- 為什么是用sliding window?文中不是說用CNN么?
- 256維特征向量如何獲得的?
- 2k和4k中的k指的是什么?
- 圖右側不同形狀的矩形和Anchors又是如何得到的?
首先回答第一個問題,RPN的輸入特征圖就是圖1中Faster RCNN的公共Feature Map,也稱共享Feature Map,主要用以RPN和RoI Pooling共享;
對於第二個問題,我們可以把3x3的sliding window看作是對特征圖做了一次3x3的卷積操作,最后得到了一個channel數目是256的特征圖,尺寸和公共特征圖相同,我們假設是256 x (H x W);
對於第三個問題,我們可以近似的把這個特征圖看作有H x W個向量,每個向量是256維,那么圖中的256維指的就是其中一個向量,然后我們要對每個特征向量做兩次全連接操作,一個得到2個分數,一個得到4個坐標,由於我們要對每個向量做同樣的全連接操作,等同於對整個特征圖做兩次1 x 1的卷積,得到一個2 x H x W和一個4 x H x W大小的特征圖,換句話說,有H x W個結果,每個結果包含2個分數和4個坐標;
圖3 問題1,2,3的解答描述圖
這里我們需要解釋一下為何是2個分數,因為RPN是提候選框,還不用判斷類別,所以只要求區分是不是物體就行,那么就有兩個分數,前景(物體)的分數,和背景的分數;
我們還需要注意:4個坐標是指針對原圖坐標的偏移,首先一定要記住是原圖;
此時讀者肯定有疑問,原圖哪里來的坐標呢?
這里我要解答最后兩個問題了:
首先我們知道有H x W個結果,我們隨機取一點,它跟原圖肯定是有個一一映射關系的,由於原圖和特征圖大小不同,所以特征圖上的一個點對應原圖肯定是一個框,然而這個框很小,比如說8 x 8,這里8是指原圖和特征圖的比例,所以這個並不是我們想要的框,那我們不妨把框的左上角或者框的中心作為錨點(Anchor),然后想象出一堆框,具體多少,聰明的讀者肯定已經猜到,K個,這也就是圖中所說的K anchor boxes(由錨點產生的K個框);換句話說,H x W個點,每個點對應原圖有K個框,那么就有H x W x k個框默默的在原圖上,那RPN的結果其實就是判斷這些框是不是物體以及他們的偏移;那么K個框到底有多大,長寬比是多少?這里是預先設定好的,共有9種組合,所以k等於9,最后我們的結果是針對這9種組合的,所以有H x W x 9個結果,也就是18個分數和36個坐標; 圖4 問題4,5的解答描述圖
3. RPN的整個流程回顧
最后我們再把RPN整個流程走一遍,首先通過一系列卷積得到公共特征圖,假設他的大小是N x 16 x 16,然后我們進入RPN階段,首先經過一個3 x 3的卷積,得到一個256 x 16 x 16的特征圖,也可以看作16 x 16個256維特征向量,然后經過兩次1 x 1的卷積,分別得到一個18 x 16 x 16的特征圖,和一個36 x 16 x 16的特征圖,也就是16 x 16 x 9個結果,每個結果包含2個分數和4個坐標,再結合預先定義的Anchors,經過后處理,就得到候選框;整個流程如圖5:
圖5 RPN整個流程