[論文筆記] Faster R-CNN(未完成)

目標檢測架構

主要有以下幾個步驟:

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 損失計算

  • 符號
    • i : 參與損失計算的 anchor index
    • \lambda : 用來調整 cls / reg 之間損失權重的參數
    • L_{cls} : 分類損失 (此處使用二元交叉熵損失)
    • L_{reg}: 迴歸損失 (此處使用smooth L1)
    • p_i, p_i^* : 物件是否存在 anchor 中 (帶 * 的是 ground-true)
    • t_i, t_i^* : anchor 位置修正量的值 (帶 * 的是 ground-true)
    • N_{cls}, N_{reg} : 用來正規化損失大小的參數
  • 計算損失時,Anchor 的三種標籤:
    • Positive
      • 與 ground-true box 之間的 IoU 最大的 anchor
      • 與任何 ground-true box 之間的 IoU > 0.7 的 anchor
    • Negative
      • 與 ground-true box  的 IoU < 0.3 者
    • 不計算損失
      • 其他剩餘的 anchor
  • 物件座標的參數化

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 來進行訓練

參考文獻

  1. Ren, Shaoqing , et al. "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks." NIPS 2016.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值