R-FCN:Region-based Fully Convolutional Network
R-FCN 也是知名度較高的一個目標檢測框架肢藐,mAP 和前傳速度能夠與 Faster R-CNN 一較高下乒融,盡管速度比不過 YOLO 系馆铁,但相對而言準確度更高咕缎。值得一看的是里面的全卷積思路匹层,使得 R-FCN 作為一個 two-stage 的方法卻有著相對簡單的網(wǎng)絡結(jié)構(gòu)呵晨。
R-FCN論文:R-FCN: Object Detection via Region-based Fully Convolutional Networks
出發(fā)點
對于知名的 R-CNN 系網(wǎng)絡(R-CNN吐限、Fast R-CNN、Faster R-CNN天揖、Mask R-CNN)而言菊卷,將每個 RoI 中的特征圖分別進行前向傳播都是不可避免的。盡管從 Fast R-CNN 起宝剖,這一弊端已經(jīng)被權(quán)重共享的特征提取網(wǎng)絡緩解了洁闰,但在其后的目標檢測與分類網(wǎng)絡上的運算仍然是 per-RoI 的。由于 RPN 可以提供以千為數(shù)量級的 RoI万细,R-CNN 系的網(wǎng)絡結(jié)構(gòu)在訓練和預測過程中都會導致一定的時間消耗扑眉。
這些最先進的目標檢測網(wǎng)絡引入大量 per-RoI 運算的一個原因在于,它們都是基于 ResNet 或 GoogLeNet 等骨干網(wǎng)絡的赖钞,這些骨干網(wǎng)絡是全卷積的腰素,因為骨干網(wǎng)絡本來就是在圖像分類數(shù)據(jù)集上進行預訓練的。為了將網(wǎng)絡的任務從“進行準確的分類”遷移到“定位目標并進行分類”雪营,不得不在骨干網(wǎng)絡后面再次引入多層的卷積結(jié)構(gòu)弓千,盡管這些卷積層的參數(shù)是共享的,但它們的運算卻是分散的献起,這種結(jié)構(gòu)——據(jù) R-FCN 作者所言——是不自然的洋访。
這并非在否認 R-CNN 系網(wǎng)絡姻政,畢竟至今它們?nèi)允悄繕藱z測任務中的首選模型,并且在前向傳播速度上也不能稱之為慢岂嗓。但盡管是最先進的方法汁展,其中存在的問題也仍然確實值得解決。 R-FCN 的主要出發(fā)點就是盡可能地減輕 per-RoI 的運算,加快網(wǎng)絡的訓練和預測速度食绿。
思路
在 R-FCN 論文中提出的觀點:圖像分類任務存在平移不變性侈咕,而深度卷積網(wǎng)絡又具有不在意圖像內(nèi)容平移的特性,所以能夠在此類任務中有非常好的表現(xiàn)器紧;但對于目標檢測任務而言耀销,這種特性是無法很好地被過渡的囤攀,因為此時需要得到目標的位置信息背伴,這在一定程度上引入了平移變化性。所以,不能直接將骨干網(wǎng)絡的結(jié)構(gòu)用于目標檢測任務中桥状。
許多其它方法中,解決這一問題的做法都是通過在特征圖上進行 RoI Pooling 操作硝清,以及進行后續(xù)的 per-RoI 運算辅斟,借此引入平移變化性。
與一般策略不同芦拿,R-FCN 的做法是士飒,仍然通過共享運算的全卷積網(wǎng)絡提取圖像在空間上的特征,并且不令 RoI Pooling 層后還有任何可訓練參數(shù)蔗崎。
網(wǎng)絡結(jié)構(gòu)
RoI 的提取采用 RPN(Region Proposal Network)酵幕,此項工作在 Faster R-CNN 中已有完善的實現(xiàn),且?guī)缀鯚o需更多地進行訓練缓苛。初步的特征提取在 ResNet-101 上進行芳撒,得到 feature maps。
定義超參數(shù)未桥,表示網(wǎng)絡將把 RoI 分為
的小窗格分別進行考慮笔刹。文中取
,即把 RoI 分為 9 個小窗格子冬耿,考慮 RoI 的左上方舌菜、上方、右上方亦镶、左方日月、中間、右方缤骨、左下方山孔、下方、右下方荷憋。
在初始特征圖上引入新的卷積層台颠,以得到對位置敏感的 score map,score map 通道數(shù)為,表示對于
個類別而言的
個RoI位置(或者串前,也可以理解成
和
在不同的維度上瘫里,不過這樣子特征就是4維了,不好畫圖表示)荡碾,這個 score maps 大概算整個論文里最抽象的東西了谨读。盡管這些新的卷積層功能特殊,但它們在結(jié)構(gòu)上與一般的卷積層沒有什么差別坛吁。
在其后連接一個對位置敏感的特殊 RoI Pooling 層劳殖,以引導來自 score map 的信息。該池化層以及后續(xù)的層都不再具有可訓練的權(quán)重拨脉。該池化層的池化算法需要單獨說明哆姻。
位置敏感的 RoI Pooling 層
RoI 已由 RPN 得到,RoI Pooling 層將此 RoI 下的 score map 中的內(nèi)容分割成的窗格玫膀。若 RoI 尺寸為
矛缨,則每個窗格的大小為
。
在 RoI Pooling 層中帖旨,對于每個類別箕昭,每個窗格最后都得到一個輸出,此池化層采用平均池化解阅,輸出 shape 為落竹。注意池化層之前 RoI 窗口內(nèi)的特征 shape 為
,按說池化層應該只改變尺寸货抄,不改變通道數(shù)述召,可是這里的 RoI Pooling 卻在改變特征圖尺寸的同時,改變了其通道數(shù)碉熄,這里是 R-FCN 方法中較容易令人迷惑的一點桨武。
通道數(shù)的改變是因為 RoI Pooling 層上的特殊操作:score map 之所以被稱為對位置敏感的,就是因為它對個窗格內(nèi)的特征進行了分立的特征提取锈津。對應地呀酸,在 RoI Pooling 層進行平均池化時,只池化 score map 上符合條件 {①在相同的窗格內(nèi) and ②在對應的通道上} 的特征像素琼梆。比如性誉,在對右上角(即第 3 個)窗格池化時,池化操作是對 score map 上茎杂,對應窗格內(nèi)错览,在總共
組
通道上,第 3 個
通道上的特征進行的煌往。
上述 score map 通道到池化輸出窗格的映射倾哺,的網(wǎng)絡結(jié)構(gòu)圖中以不同的顏色標示了出來轧邪。
目標檢測的后續(xù)操作
R-FCN 在 RoI Pooling 層之后就不再有可訓練參數(shù),所以需要用其他的方式判斷 RoI 是否(較好地)覆蓋目標羞海、目標的類別以及邊框回歸參數(shù)忌愚。
RoI 是否覆蓋目標
在一個 RoI 內(nèi),對特定的類別却邓,RoI Pooling 的
個輸出進行一次投票硕糊,投票以不加權(quán)平均值的形式實現(xiàn),如果這個投票值超過一定的閾值腊徙,則認為該 RoI 內(nèi)有屬于類別
的目標简十。
下圖示意 RoI 是否覆蓋所導致 RoI Pooling 層的不同輸出,可以看到撬腾,當 RoI 的左上方窗格“在目標的左上方(的置信度高)”時螟蝙,score map 上對應的窗格及通道上的特征將被高度激活,上方时鸵、右上方胶逢、左方厅瞎、中間饰潜、右方、左下方和簸、下方彭雾、右下方這些位置也符合此規(guī)律。如果一個 RoI 恰好覆蓋目標锁保,那么其投票值就會很高薯酝。
至于為什么會有這樣的特性?可以認為這種特征就是 R-FCN 所構(gòu)建和訓練的網(wǎng)絡從訓練集中所學習到的爽柒。
目標分類
一個 RoI 將輸出通道數(shù)為的投票值吴菠,對該輸出進行 softmax 激活,得到置信度最高的類別浩村,作為目標類別做葵。
邊框回歸
與上述的??通道的卷積層并行,構(gòu)造了一個兄弟卷積層心墅,通道數(shù)為
酿矢,用同樣的策略將它聚合到一個
通道的平均投票值上,這四個值表示
怎燥,為目標檢測領域通用的邊框回歸參數(shù)瘫筐。
感想
感覺 R-FCN 的思路比較清奇,雖然看懂了它是怎么做的铐姚,但并沒理解它為什么要這么設計策肝。