『計算機視覺』Region Proposal by Guided Anchoring

論文地址:Guided Anchoring網絡

不得不佩服自媒體,直接找到了論文做者之一寫了篇解析文章,這裏給出連接,本文將引用一部分原做者的解析,減小個人打字量,也方便結合比照理解。ide

1、問題和思路

一、面臨問題

常見的生成 anchor 的方式是滑窗(sliding window),也就是首先定義 k 個特定尺度(scale)和長寬比(aspect ratio)的 anchor,而後在全圖上以必定的步長滑動。anchor 的尺度和長寬比須要預先定義,這是一個對性能影響比較大的超參,並且對於不一樣數據集和方法須要單獨調整。若是尺度和長寬比設置不合適,可能會致使 recall 不夠高函數

一方面,大部分的 anchor 都分佈在背景區域,對 proposal 或者檢測不會有任何正面做用性能

另外一方面,預先定義好的 anchor 形狀不必定能知足極端大小或者長寬比懸殊的物體學習

並且 anchor 數目過多影響將網絡性能和速度。因此咱們期待的是稀疏,形狀根據位置可變的 anchor。測試

二、anchor設計準則

本段引用做者本身的解釋:優化

Alignmentui

因爲每一個 anchor 都是由 feature map 上的一個點表示,那麼這個 anchor 最好是以這個點爲中心,不然位置偏了的話,這個點的 feature 和這個 anchor 就不是很是好地對應起來,用該 feature 來預測 anchor 的分類和迴歸會有問題。咱們設計了相似 cascade/iterative RPN 的實驗來證實這一點,對 anchor 進行兩次迴歸,第一次迴歸採用常規作法,即中心點和長寬都進行迴歸,這樣第一次迴歸以後,anchor 中心點和 feature map 每個像素的中心就再也不徹底對齊。咱們發現這樣的兩次 regress 提高十分有限。因此咱們在形狀預測分支只對 w 和 h 作預測,而不迴歸中心點位置。spa

Consistency設計

這條準則是咱們設計 feature adaption 的初衷,因爲每一個位置 anchor 形狀不一樣而破壞了特徵的一致性,咱們須要經過 feature adaption 來進行修正。這條準則本質上是對於如何準確提取 anchor 特徵的討論。對於兩階段檢測器的第二階段,咱們能夠經過 RoI Pooling 或者 RoI Align 來精確地提取 RoI 的特徵。可是對於 RPN 或者單階段檢測器的 anchor 來講,因爲數量巨大,咱們不可能經過這種 heavy 的方法來實現特徵和框的精確 match,仍是隻能用特徵圖上一個點,也就是 512x1x1 的向量來表示。那麼 Feature Adaption 起到了一個讓特徵和 anchor 對應更加精確的做用,這種設計在其餘地方也有能夠借鑑之處。

三、文章貢獻

一、提出了一種新的 anchor 生成方法:Guided Anchoring,即經過圖像特徵來指導 anchor 的生成,經過預測 anchor 的位置形狀,來生成稀疏並且形狀任意的 anchor

二、設計了 Feature Adaption 模塊來修正特徵圖使之與 anchor 形狀更加匹配

這篇 paper 的方法用在了 COCO Challenge 2018 檢測任務的冠軍方法中,在極高的 baseline 上漲了 1 個點。

2、Guided Anchoring

一、inference 網絡

GA的邏輯圖如上,網絡分爲3塊:NL、NS、NT

NL 生成等大的單通道特徵,表示每個像素位置爲一個 anchor 中心的機率(1*1卷積+sigmoid)

NS 生成等大的雙通道特徵,表示每個 anchor 中心對應的 h、w 值(1*1卷積+轉換運算)

NT 做者提出的 Feature adaption 模塊,邏輯上屬於 backbone 的特徵提取,應用了可變形卷積,附加了 anchor 的信息,生成的 F' 將能夠直接回歸、分類對應的 anchor

NS 轉換運算公式以下:

  

dwdh 轉換爲 wh,原文說可將 [-1,1] 放縮到 [0,1000],方便學習,因此推測在1*1後應該還有一個sigmoid層。

NT 的提出是由於自學習的 anchor 長寬並不會受特徵層的感覺野指導,因此問題就來了:同一層的特徵感覺野相同,但 anchor 差別巨大,每個特徵點使用一樣大小的感覺野表明不一樣大小的 anchor,這不合理,因此做者在 NS 後添加了1*1卷積輸出 offset,設計了 NT 這個僅包含一層3*3可變形卷積的結構,使得輸出特徵的每一個特徵點表明一個 anchor 的特徵信息

二、損失函數和 label 設置

 損失函數由四部分組成:

其後兩項爲傳統的分類迴歸損失函數,前兩項爲anchor的定位、形狀損失函數。

錨框定位損失函數 Lloc

定位標籤按照 NL 輸出來看很容易發現僅須要一張 mask 圖像便可,可是這樣定位正樣本比例會太低,且負樣本中會有不少誤導項(臨近真實點的像素都做爲負樣本的話會有很強的干擾性),因此做者提出了幾個概念:CR、IR、OR,原文解釋以下(「xg」 表示的是 x 上標爲 ' 下標爲 g,其餘符號同理):

(1) The center region CR=R(xg, yg, σ1w, σ1h) defines the center area of the box. Pixels in CR are assigned aspositive samples.

(2) The ignore region IR=R(xg, yg 2w, σ2h) \ CR is a larger (σ2> σ1) region excluding CR. Pixels in IR are marked as「ignore」and exluded during training.

(3) The outside region OR is the whole feature map excluding CR and IR. Pixels in OR are regarded as negative samples.

即 CR 區域(真實中心附近的矩形範圍像素)的樣本均視爲正樣本,CR 區域外圍的環形區域 IR 不參與損失函數的貢獻,防止混淆,再外面的像素 OR 才視爲負樣本。

對於應用 FPN 結構做者作出了進一步的規範:

  • 有預測 gt 任務的層的相鄰層,將把任務層的 CR+IR 區域對應的像素均視爲本層的IR

結合上面的規則,示意圖以下:

錨框形狀損失函數 Lshape

原文本部分涉及兩個問題:損失函數的選擇 & gt 的選擇。

先看 gt 選擇,因爲咱們的 anchor 沒有預先的形狀,因此咱們很差判斷 anchor 屬於哪一個 gt,做者的處理手段也很傳統:預先定義9組寬高,將9組寬高和特定 gt 的 IOU 計算出來並保留最大的記爲 vIOU,將其和不一樣 gt 的 vIOU 橫向比較,選最大的 vIOU 對應的 gt 做爲該 anchor 對應的 gt

損失函數做者在鏈接文章中說的很明白了,

預測最佳的長和寬,這是一個迴歸問題。按照往常作法,固然是先算出 target,也就是該中心點的 anchor 最優的 w 和 h,而後用 L1/L2/Smooth L1 這類 loss 來監督。然而這玩意的 target 並很差計算,並且實現起來也會比較困難,因此咱們直接使用 IoU 做爲監督,來學習 w 和 h。既然咱們算不出來最優的 w 和 h,而計算 IoU 又是可導的操做,那就讓網絡本身去優化使得 IoU 最大吧。後來改用了 bounded IoU Loss,但原理是同樣的。

論文爲: Improving object local-ization with fitness nms and bounded iou loss (2018)。

三、將 GA 結構應用到傳統兩步法網絡

做者發現 proposal 質量提高不少,可是在 detector 上性能提高比較有限。在不一樣的檢測模型上,使用 Guided Anchoring 能夠提高 1 個點左右。明明有很好的 proposal,可是 mAP 卻沒有漲不少。做者對該問題的探索以下:

通過一番探究,咱們發現瞭如下兩點:1. 減小 proposal 數量,2. 增大訓練時正樣本的 IoU 閾值(這個更重要)。既然在 top300 裏面已經有了不少高 IoU 的 proposal,那麼何須用 1000 個框來訓練和測試,既然 proposal 們都這麼優秀,那麼讓 IoU 標準嚴格一些也何嘗不可。

這個正確的打開方式基本是 Jiaqi 獨立調出來的,讓 performance 一下好看了不少。經過這兩個改進,在 Faster R-CNN 上的漲點瞬間提高到了 2.7 個點(沒有加任何 trick),其餘方法上也有大幅提高。

其餘實驗部分較爲瑣碎建議瀏覽原文。

相關文章
相關標籤/搜索