1. 程式人生 > >基於深度學習的目標檢測演算法綜述(二)—Two/One stage演算法改進之R-FCN

基於深度學習的目標檢測演算法綜述(二)—Two/One stage演算法改進之R-FCN

基於深度學習的目標檢測演算法綜述(一):https://blog.csdn.net/weixin_36835368/article/details/82687919

目錄

1、Two stage

1.1 R-FCN:Object Detection via Region-based Fully Convolutional Networks

 

1.2-FCN-3000 at 30fps: Decoupling Detection and Classification

1.3 Mask R-CNN


1、Two stage

Faster R-CNN 網路包括兩個步驟:

         1. 使用RPN(region proposal network)提取 proposal 資訊;

         2. 使用 R-CNN 對候選框位置進行預測和物體類別識別。

這裡主要介紹在 Faster R-CNN 基礎上改進的幾篇論文:R-FCN、R-FCN3000 和 Mask R-CNN。R-FCN 系列提出了 Position Sensitive(ps)的概念,提升了檢測效果。另外需要註明的是,雖然 Mask R-CNN 主要應用在分割上,但該論文和 Faster R-CNN 一脈相承,而且論文提出了 RoI Align 的思想,對物體檢測迴歸框的精度提升有一定效果,故本篇綜述也介紹了這篇論文。

1.1 R-FCN:Object Detection via Region-based Fully Convolutional Networks

論文連結:arxiv.org/abs/1605.06409

開原始碼:github.com/daijifeng001/R-FCN

錄用資訊:CVPR2017

論文目標

對預測特徵圖引入位置敏感分數圖提增強徵位置資訊,提高檢測精度。

核心思想

背景

Faster R-CNN 是首個利用 CNN 來完成 proposals 的預測的,之後的很多目標檢測網路都是藉助了 Faster R-CNN 的思想。而 Faster R-CNN 系列的網路都可以分成 2 個部分:

1.Fully Convolutional subnetwork before RoI Layer

2.RoI-wise subnetwork

第 1 部分就是直接用普通分類網路的卷積層來提取共享特徵,後接一個 RoI Pooling Layer 在第 1 部分的最後一張特徵圖上進行提取針對各個 RoIs 的特徵圖,最後將所有 RoIs 的特徵圖都交由第 2 部分來處理(分類和迴歸)。第二部分通常由全連線層組層,最後接 2 個並行的 loss 函式:Softmax 和 smoothL1,分別用來對每一個 RoI 進行分類和迴歸。由此得到每個 RoI 的類別和歸回結果。其中第 1 部分的基礎分類網路計算是所有 RoIs 共享的,只需要進行一次前向計算即可得到所有 RoIs 所對應的特徵圖。

第 2 部分的 RoI-wise subnetwork 不是所有 RoIs 共享的,這一部分的作用就是給每個 RoI 進行分類和迴歸。在模型進行預測時基礎網路不能有效感知位置資訊,因為常見的 CNN 結構是根據分類任務進行設計的,並沒有針對性的保留圖片中物體的位置資訊。而第 2 部分的全連階層更是一種對於位置資訊非常不友好的網路結構。由於檢測任務中物體的位置資訊是一個很重要的特徵,R-FCN 通過提出的位置敏感分數圖(position sensitive score maps)來增強網路對於位置資訊的表達能力,提高檢測效果。

網路設計

position-sensitive score map

圖中展示的是 R-FCN 的網路結構圖,展示了位置敏感得分圖(position-sensitive score map)的主要設計思想。如果一個 RoI 含有一個類別 c 的物體,則將該 RoI 劃分為 k x k 個區域,分別表示該物體的各個相應部位。其每個相應的部位都由特定的特徵圖對其進行特徵提取。R-FCN在  、共享卷積層的最後再接上一層卷積層,而該卷積層就是位置敏感得分圖 position-sensitive score map。其通道數 channels=k x k x (C+1)。C 表示物體類別種數再加上 1 個背景類別,每個類別都有 k x k 個 score maps 分別對應每個類別的不同位置。每個通道分別負責某一類的特定位置的特徵提取工作。

Position-sensitive RoI pooling

位置敏感RoI池化操作了(Position-sensitive RoI pooling)如下圖所示:

該操作將每個 RoIs 分為 k x k 個小塊。之後提取其不同位置的小塊相應特徵圖上的特徵執行池化操作,下圖展示了池化操作的計算方式。

得到池化後的特徵後,每個 RoIs 的特徵都包含每個類別各個位置上的特徵資訊。對於每個單獨類別來講,將不同位置的特徵資訊相加即可得到特徵圖對於該類別的響應,後面即可對該特徵進行相應的分類。

position-sensitive regression

在位置框迴歸階段仿照分類的思路,將特徵通道數組合為 4 x k x k 的形式,其中每個小塊的位置都對應了相應的通道對其進行位置迴歸的特徵提取。最後將不同小塊位置的四個迴歸值融合之後即可得到位置迴歸的響應,進行後續的位置迴歸工作。

網路訓練

position-sensitive score map高響應值區域

在訓練的過程中,當 RoIs 包涵物體屬於某類別時,損失函式即會使得該 RoIs 不同區域塊所對應的響應通道相應位置的特徵響應儘可能的大,下圖展示了這一過程,可以明顯的看出不同位置的特徵圖都只對目標相應位置的區域有明顯的響應,其特徵提取能力是對位置敏感的。

訓練和測試過程

使用如上的損失函式,對於任意一個 RoI,計算它的 Softmax 損失,和當其不屬於背景時的迴歸損失。因為每個RoI都被指定屬於某一個 GT box 或者屬於背景,即先讓 GT box 選擇與其 IoU 最大的那個 RoI,再對剩餘 RoI 選擇與 GT box 的 IoU>0.5 的進行匹配,而剩下的 RoI 全部為背景類別。當 RoI 有了 label 後 loss 就可以計算出來。這裡唯一不同的就是為了減少計算量,作者將所有 RoIs 的 loss 值都計算出來後,對其進行排序,並只對最大的 128 個損失值對應的RoIs進行反向傳播操作,其它的則忽略。並且訓練策略也是採用的 Faster R-CNN 中的 4-step alternating training 進行訓練。在測試的時候,為了減少 RoIs 的數量,作者在 RPN 提取階段就將 RPN 提取的大約 2W 個 proposals 進行過濾:

1.去除超過影象邊界的proposals

2.使用基於類別概率且閾值IoU=0.3的NMS過濾

3.按照類別概率選擇top-N個proposals

在測試的時候,一般只剩下300個RoIs。並且在R-FCN的輸出300個預測框之後,仍然要對其使用NMS去除冗餘的預測框。

演算法效果

該圖比較了 Faster-R-CNN 和 R-FCN 的 mAP 值和監測速度,採用的基礎網路為 ResNet-101,測評顯示卡為 Tesla K40。

 

1.2-FCN-3000 at 30fps: Decoupling Detection and Classification

論文連結:arxiv.org/abs/1712.01802

開原始碼:/

錄用資訊:/

論文目標

YOLO9000 將檢測資料集和分類資料集合並訓練檢測模型,但 r-fcn-3000 僅採用具有輔助候選框資訊的 ImageNet 資料集訓練檢測分類器。

如果使用包含標註輔助資訊(候選框)的大規模分類資料集,如 ImageNet 資料集,進行物體檢測模型訓練,然後將其應用於實際場景時,檢測效果會是怎樣呢?how would an object detector perform on "detection"datasets if it were trained on classification datasets with bounding-box supervision?

核心思想

r-fcn-3000 是對 r-fcn 的改進。上文提到,r-fcn 的 ps 卷積核是 per class 的,假設有 C 個物體類別,有 K*K 個 ps 核,那麼 ps 卷積層輸出 K*K*C 個通道,導致檢測的運算複雜度很高,尤其當要檢測的目標物體類別數較大時,檢測速度會很慢,難以滿足實際應用需求。

為解決以上速度問題,r-fcn-3000 提出,將 ps 卷積核作用在超類上,每個超類包含多個物體類別,假設超類個數為 SC,那麼ps卷積層輸出 K*K*SC 個通道。由於 SC 遠遠小於 C,因此可大大降低運算複雜度。特別地,論文提出,當只使用一個超類時,檢測效果依然不錯。演算法網路結構如下:

上圖可以看出,與 r-fcn 類似,r-fcn-3000 也使用 RPN 網路生成候選框(上圖中虛線迴路);相比 r-fcn,r-fcn-3000 的網路結構做了如下改進:

1. r-fcn-3000 包含超類(上圖中上半部分)和具體類(上圖中下半部分)兩個卷積分支。

2. 超類卷積分支用於檢測超類物體,包含分類(超類檢測)和迴歸(候選框位置改進)兩個子分支;注意上圖中沒有畫出用於候選框位置改進的 bounding-box 迴歸子分支;迴歸分支是類別無關的,即只確定是否是物體。

3. 具體類卷積分支用於分類物體的具體類別概率,包含兩個普通 CNN 卷積層。

4. 最終的物體檢測輸出概率由超類卷積分支得到的超類類概率分別乘以具體類卷積分支輸出的具體類別概率得到。引入超類和具體類兩個卷積分支實現了“物體檢測”和“物體分類”的解耦合。超類卷積分支使得網路可以檢測出物體是否存在,由於使用了超類,而不是真實物體類別,大大降低了運算運算元。保證了檢測速度;具體類分支不檢測物體位置,只分類具體物體類別。

超類生成方式:對某個類別j的所有樣本影象,提取 ResNet-101 最後一層 2018 維特徵向量,對所有特徵項向量求均值,作為該類別的特徵表示。得到所有類別的特徵表示進行 K-means 聚類,確定超類。

演算法效果

在 imagenet 資料集上,檢測 mAP 值達到了 34.9%。使用 nvidia p6000 GPU,對於 375x500 影象,檢測速度可以達到每秒 30 張。在這種速度下,r-fcn-3000 號稱它的檢測準確率高於 YOLO 18%。

此外,論文實驗表明,r-fcn-3000 進行物體檢測時具有較強的通用性,當使用足夠多的類別進行訓練時,對未知類別的物體檢測時,仍能檢測出該物體位置。如下圖:

在訓練類別將近 3000 時,不使用目標物體進行訓練達到的通用預測 mAP 為 30.7%,只比使用目標物體進行訓練達到的 mAP 值低 0.3%。

1.3 Mask R-CNN

 


論文連結:arxiv.org/abs/1703.06870

開原始碼:github.com/TuSimple/mx-maskrcnn

錄用資訊:CVPR2017

論文目標

1. 解決 RoIPooling 在 Pooling 過程中對 RoI 區域產生形變,且位置資訊提取不精確的問題。

2. 通過改進 Faster R-CNN 結構完成分割任務。

核心思想

1. 使用RoIAlign代替RoIPooling,得到更好的定位效果。

2. 在Faster R-CNN基礎上加上mask分支,增加相應loss,完成畫素級分割任務。

概述

Mask R-CNN 是基於 Faster R-CNN 的基礎上演進改良而來,不同於 Faster R-CNN,Mask R-CNN 可以精確到畫素級輸出,完成分割任務。此外他們的輸出也有所不同。Faster R-CNN 輸出為種類標籤和 box 座標,而 Mask R-CNN 則會增加一個輸出,即物體掩膜(object mask)。

網路結構介紹:

Mask R-CNN 結構如下圖:

Mask R-CNN 採用和 Faster R-CNN 相同的兩個階段,具有相同的第一層(即 RPN),第二階段,除了預測種類和 bbox 迴歸,並且並行的對每個 RoI 預測了對應的二值掩膜(binary mask)。

Mask R-CNN詳細改進

RoIAlign

Faster R-CNN 採用的 RoIPooling,這樣的操作可能導致 feature map 在原圖的對應位置與真實位置有所偏差。如下圖:

而通過引入 RoIAlign 很大程度上解決了僅通過 Pooling 直接取樣帶來的 Misalignment 對齊問題。

RoIPooling 會對區域進行拉伸,導致區域形變。RoIAlign 可以避免形變問題。具體方式是先通過雙線性插值到 14 x 14,其次進行雙線性插值得到藍點的值,最後再通過 max Pooling 或 average pool 到 7 x 7。

多工損失函式

Mask R-CNN 的損失函式可表示為:

其中 與Faster R-CNN中的相似,所以我們具體看 損失函式。

掩膜分支針對每個 RoI 產生一個 K x M xM 的輸出,即 K 個 M x M 的二值的掩膜輸出。其中K為分類物體的類別數目。依據預測類別輸出,只輸出該類對應的二值掩膜,掩膜分支的損失計算如下示意圖:

圖 16

1. mask branch 預測 K 個種類的 M x M 二值掩膜輸出。

2. 依據種類預測分支(Faster R-CNN 部分)預測結果:當前 RoI 的物體種類為 i。

3 RoI 的平均二值交叉損失熵(對每個畫素點應用 Sigmoid 函式)即為損失  。

此外作者發現使用 Sigmoid 優於 Softmax ,Sigmoid 可以避免類間競爭。

演算法效果

圖 17

體現了在 COCO 資料集上的表現效果。