完整的目標檢測架構
1. 抽取圖像中多個候選區域
- 這個部份負責從圖像中,找出可能是物件的候選區域 (region propos)
- Fast R-CNN 並不包含這一部分
2. 抽取整張圖像的特徵
- 使用 CNN + Max pooling 抽取特徵
3. 取出候選區域的特徵
- 根據 region proposal 的位置,在 CNN 輸出的特徵圖上找到對應的區塊
- 將該區塊的特徵,輸入 RoI pooling layer + FC layer 後,得到固定長度的特徵向量
4. 輸出分類與回歸結果
- 候選區域的固定長度特徵向量,再經過一層 FC layer 後,會得到兩個分支的輸出
- 一個分支輸出 softmax probability 結果,預測每個類目的概率 (K個類別加上背景,共K+1個輸出值)
- 另一分支輸出 bbox regression 結果,為每個類目都輸出四個數值,用來修正 bounding-box 的位置 (共 4K 個輸出值)
RoI Pooling
- 首先,目標是從 Feature map 抽取固定尺寸的特徵,特徵的大小為
- 根據 Region proposal 的位置,找到 feature map 對應的區域,區域的大小為
- 將該區域切分成 個大小為 的 grid
- 對區域內所有 grid 做 Max pooling,得到 尺寸的特徵
訓練過程
預訓練
同樣使用了 ImageNet 預訓練,接著對三個部分做調整:
- 將模型最後的 Max pooling 換成 RoI Pooling
- 模型尾部的 FC Layer 與 1000類Softmax 更換成前面提到的兩個分支,分別是預測 BBox 位置修正量的 FC Layer 與 K+1 類Softmax。
- 網路的輸入改為兩個,分別是 Region proposals 與輸入影像
採用 image centric 採樣策略
- 過去 RCNN 的作法是,每個 mini-batch 中的 RoI 都採樣自不同的圖像
- Fast RCNN 中,則是每個 mini-batch 固定採樣 N 個圖像,並從每個圖像採樣出 R/N 個 RoI
- 同個圖像中的 R/N 個 RoI 特徵,僅需要計算一次,因此減少了計算與儲存量
- 論文中,採用了 N=2, R=128 (作者發現,同圖像產生的多個 RoI 並不會影響模型收斂)
- 25% RoI 會是正樣本 (IoU ≧ 0.5),75%是困難負樣本 (0.1 ≦ IoU < 0.5)
多任務訓練
- Fast RCNN 模型有兩個輸出分支,分別是:
- 預測物件類別的機率分布
- 預測 bounding box 的修正量
- 損失函數可以用下式表示
- 符號
- : 物件類別 (0: 背景)
- v : 物件位置修正量
- : 用來調整兩種損失比例的參數
- : 當括號裡面的條件滿足時為 1,其餘情況為 0
- : 分類損失,採用了交叉熵損失
- : 回歸損失,採用了 smooth L1
參考文獻
- Girshick, Ross. "Fast r-cnn." Proceedings of the IEEE international conference on computer vision. 2015.