目標檢測架構
主要有以下幾個步驟:
1. 預測候選區域
- 使用一個 CNN 抽取圖像特徵
- RPN 根據抽取的特徵,預測候選區域的位置、位置修正量
- 後面的步驟 (2)(3)(4) 與 Fast RCNN 相同
2. 取出候選區域的特徵
- 根據候選區域的位置,在 CNN 輸出的特徵圖上找到對應的區塊
- 將該區塊的特徵,輸入 RoI pooling layer + FC layer 後,得到固定長度的特徵向量
3. 輸出分類與回歸結果
- 候選區域的固定長度特徵向量,再經過一層 FC layer 後,會得到兩個分支的輸出
- 一個分支輸出 softmax probability 結果,預測每個類目的概率 (K個類別加上背景,共K+1個輸出值)
- 另一分支輸出 bbox regression 結果,為每個類目都輸出四個數值,用來修正 bounding-box 的位置 (共 4K 個輸出值)
一些細節
Anchor 機制
- 論文中使用了 3 種 scale 與 3 種 aspect ratio,所以共有 3 x 3 = 9 種形狀的 anchor
- 對於一個尺寸為 w x h 的 feature map,我們總共會有 w x h x k 個 anchor
- Anchor 機制具有平移不變性 (translation invariant),即使物件的平移,模型仍能有相同輸出
- 不同於特徵金字塔,採用了 anchor 金字塔設計,透過多個 Anchors 處理不同尺寸物件
RPN (Region Proposal Network)
- 前面提到的 CNN 特徵圖,會再經過一層 CNN (intermediate layer) 得到 256-d 的輸出
- 256-d 特徵再經過兩個 FC layer 分支 (cls layer、reg layer) 計算,得到兩組輸出:
- 用於對 k 個 anchor 進行二元分類,判斷是否存在物體的 2k 個分數
- 用於對 k 個 anchor 計算 BBox regression 的 4k 個輸出值
RPN 損失計算
- 符號
- : 參與損失計算的 anchor index
- : 用來調整 cls / reg 之間損失權重的參數
- : 分類損失 (此處使用二元交叉熵損失)
- : 迴歸損失 (此處使用smooth L1)
- : 物件是否存在 anchor 中 (帶 * 的是 ground-true)
- : anchor 位置修正量的值 (帶 * 的是 ground-true)
- : 用來正規化損失大小的參數
- 計算損失時,Anchor 的三種標籤:
- Positive
- 與 ground-true box 之間的 IoU 最大的 anchor
- 與任何 ground-true box 之間的 IoU > 0.7 的 anchor
- Negative
- 與 ground-true box 的 IoU < 0.3 者
- 不計算損失
- 其他剩餘的 anchor
- Positive
- 物件座標的參數化
RPN 與 Fast RCNN 的訓練
- 如果分別獨立訓練 RPN 與 Fast R-CNN,可能會使參數往不同的方向更新
- 下面介紹幾種能避免上述問題的訓練方法
Alternating optimization
- 訓練 RPN
- 訓練 Fast R-CNN (使用上個步驟的 RPN 所產生的 proposals)
- 訓練 RPN (初始化時,使用上個步驟 Fast R-CNN 的參數 )
- 重複上面的步驟
Approximate joint training
- RPN 與 Fast RCNN 的共享卷積層,進行前向傳導
- RPN 前向傳導,得到許多 region proposals
- 將這些 region proposals 視為固定值,Fast RCNN 進行前向傳導
- 進行反向傳導,根據 RPN 與 Fast R-CNN 的損失合併計算梯度,並更新整個網路
- 此方法易被實作,但其實忽略了最後結果對候選區域的微分,算是一個近似的聯合訓練
- 這個方法與 alternating training 相比結果差不多,但能夠減少訓練 25-50% 時間
Non-approximate joint training
- 如同上面提到的,最後結果對候選區域的微分不應該被忽略 (可以理解為是,在更新 RPN 時,除了考慮候選區域的損失外,候選區域對最後結果損失的影響也考慮到)
- 這個做法難度高,但可以透過 RoI warping 實現,詳情請再參考其他論文
4-Step alternating optimization
- 訓練一組 RPN (使用 ImageNet 預訓練權重初始化)
- 訓練另一組 Fast RCNN (使用 ImageNet 預訓練權重初始化,並使用上一步驟得到的 RPN 計算 region proposals 來訓練)
- 使用上一步驟得到的 Fast RCNN 參數初始化 RPN,並訓練 RPN (共享 CNN 參數,但是參數被固定不更新)
- 保持共享參數固定下,最後微調 Fast R-CNN 獨立擁有的參數部分
- 經過上面的步驟,就可以完成聯合網路的訓練,類似的步驟可以重複多次,但實驗結果表示這麼做並不會有太大的差異。
- 本論文中,使用了較方便的 4-step training algorithm 來進行訓練
參考文獻
- Ren, Shaoqing , et al. "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks." NIPS 2016.