Guided Anchoring: 物體檢測器也能自己學 Anchor

2020-11-23 雷鋒網

雷鋒網 AI 科技評論按,本文作者陳愷,該文首發於知乎,雷鋒網(公眾號:雷鋒網) AI 科技評論獲其授權轉載。

前言

進入圖片物體檢測這個坑也有一年出頭了,而且至少短期內還將繼續待在坑裡而且還拉了同夥入坑。值此新(ji)春(xu)佳(ban)節(zhuan)之際,打算介紹一些做過的工作,寫一下對這個領域的理解,另外有空的話也會講講 mmdetection 的設計和一些實現。

作為開篇,就講一下啟動最早的一個項目,"Region Proposal by Guided Anchoring"。這篇 paper 的方法用在了 COCO Challenge 2018 檢測任務的冠軍方法中,在極高的 baseline 上漲了 1 個點。最近公開在 ArXiv 上,歡迎大家提出意見。

概述

我們提出了一種新的 anchor 生成方法 —— Guided Anchoring,即通過圖像特徵來指導 anchor 的生成。通過預測 anchor 的位置和形狀,來生成稀疏而且形狀任意的 anchor,並且設計了 Feature Adaption 模塊來修正特徵圖使之與 anchor 形狀更加匹配。在使用 ResNet-50-FPN 作為 backbone 的情況下,Guided Anchoring 將 RPN 的 recall(AR@1000) 提高了 9.1 個點,將其用於不同的物體檢測器上,可以提高 mAP 1.2 到 2.7 個點不等。

下圖是我們的方法和傳統 RPN 的性能和速度對比,可以看到要顯著優於傳統 RPN。

下面是應用在不同檢測方法上的結果,backbone 均為 ResNet-50-FPN。

背景

Anchor 是物體檢測中的一個重要概念,通常是人為設計的一組框,作為分類(classification)和框回歸(bounding box regression)的基準框。無論是單階段(single-stage)檢測器還是兩階段(two-stage)檢測器,都廣泛地使用了 anchor。例如,兩階段檢測器的第一階段通常採用 RPN 生成 proposal,是對 anchor 進行分類和回歸的過程,即 anchor -> proposal -> detection bbox;大部分單階段檢測器是直接對 anchor 進行分類和回歸,也就是 anchor -> detection bbox。

常見的生成 anchor 的方式是滑窗(sliding window),也就是首先定義 k 個特定尺度(scale)和長寬比(aspect ratio)的 anchor,然後在全圖上以一定的步長滑動。這種方式在 Faster R-CNN,SSD,RetinaNet 等經典檢測方法中被廣泛使用。

Motivation

通過 sliding window 生成 anchor 的辦法簡單可行,但也不是完美的,不然就不會有要講的這篇 paper 了。首先,anchor 的尺度和長寬比需要預先定義,這是一個對性能影響比較大的超參,而且對於不同數據集和方法需要單獨調整。如果尺度和長寬比設置不合適,可能會導致 recall 不夠高,或者 anchor 過多影響分類性能和速度。一方面,大部分的 anchor 都分布在背景區域,對 proposal 或者檢測不會有任何正面作用;另一方面,預先定義好的 anchor 形狀不一定能滿足極端大小或者長寬比懸殊的物體。所以我們期待的是稀疏,形狀根據位置可變的 anchor。

Formulation

首先我們思考 anchor 是如何生成的。我們通常使用 4 個數 (x, y, w, h) 來描述一個 anchor,即中心點坐標和寬高。我們將 anchor 的分布 formulate 成如下公式。

Anchor 的概率分布被分解為兩個條件概率分布,也就是給定圖像特徵之後 anchor 中心點的概率分布,和給定圖像特徵和中心點之後的形狀概率分布,這也是論文標題中 Guided Anchoring 的由來。Sliding window 可以看成是是均勻分布而是衝激函數的一個特例。

根據上面的公式,anchor 的生成過程可以分解為兩個步驟,anchor 位置預測和形狀預測。在這個看起來很簡單的 formulation 上,我們走過一些彎路,討論過一些奇奇怪怪的方法,最後發現大道至簡。

方法

如圖所示,在原始 RPN 的特徵圖基礎上,我們採用兩個分支分別預測 anchor 位置和形狀,然後結合在一起得到 anchor。之後採用一個 Feature Adaption 模塊進行 anchor 特徵的調整,得到新的特徵圖供之後的預測(anchor 的分類和回歸)使用。整個方法可以 end-to-end training,而且相比之前只是增加了 3 個 1x1 conv 和一個 3x3 deformable conv,帶來的模型參數量的變化很小。

位置預測

位置預測分支的目標是預測哪些區域應該作為中心點來生成 anchor,是一個二分類問題。不同於 RPN 或者 segmentation 的分類,這裡我們並不是預測每個點是前景還是背景,而是預測是不是物體的中心。

我們將整個 feature map 的區域分為物體中心區域,外圍區域和忽略區域,大概思路就是將 ground truth 框的中心一小塊對應在 feature map 上的區域標為物體中心區域,在訓練的時候作為正樣本,其餘區域按照離中心的距離標為忽略或者負樣本,具體設計在 paper 裡講得比較清楚。通過位置預測,我們可以篩選出一小部分區域作為 anchor 的候選中心點位置,使得 anchor 數量大大降低。在 inference 的時候,預測完位置之後,我們可以採用 masked conv 替代普通的 conv,只在有 anchor 的地方進行計算,可以進行加速。

形狀預測

形狀預測分支的目標是給定 anchor 中心點,預測最佳的長和寬,這是一個回歸問題。按照往常做法,當然是先算出 target,也就是該中心點的 anchor 最優的 w 和 h,然後用 L1/L2/Smooth L1 這類 loss 來監督。然而這玩意的 target 並不好計算,而且實現起來也會比較困難,所以我們直接使用 IoU 作為監督,來學習 w 和 h。既然我們算不出來最優的 w 和 h,而計算 IoU 又是可導的操作,那就讓網絡自己去優化使得 IoU 最大吧。後來改用了 bounded IoU Loss,但原理是一樣的。

這裡面還有個問題,就是對於某個 anchor,應該優化和哪個 ground truth 的 IoU,也就是說應該把這個 anchor 分配給哪個 ground truth。對於以前常規的 anchor,我們可以直接計算它和所有 ground truth 的 IoU,然後將它分配給 IoU 最大的那個 gt。但是很不幸現在的 anchor 的 w 和 h 是不確定的,是一個需要預測的變量。我們將這個 anchor 和某個 gt 的 IoU 表示為

當然我們不可能真的把所有可能的 w 和 h 遍歷一遍然後求 IoU 的最大值,所以採用了近似的方法,也就是 sample 一些可能的 w 和 h。理論上 sample 得越多,近似效果越好,但出於效率的考慮,我們 sample 了常見的 9 組 w 和 h。我們通過實驗發現,最終結果對 sample 的組數這個超參並不敏感,也就是說不管 sample 多少組,近似效果已經足夠。

生成 anchor

在得到 anchor 位置和中心點的預測之後,我們便可以生成 anchor 了,如下圖所示。這時的 anchor 是稀疏而且每個位置不一樣的。採用生成的 anchor 取代 sliding window,AR (Average Recall) 已經可以超過普通 RPN 4 個點了,代價僅僅是增加兩個 1x1 conv。

Feature Adaption

故事本可以就此結束,我們用生成的 anchor 和之前的特徵圖來進行 anchor 的分類和回歸,漲點美滋滋。但是我們發現一個不合理的地方,大家都是同一層 conv 的特徵,憑啥我就可以比別人優秀一些,代表一個又長又大的 anchor,你就只能代表一個小小的 anchor。

不合理的原因一方面在於,在同一層 conv 的不同位置,feature 的 receiptive field 是相同的,在原來的 RPN 裡面,大家都表示相同形狀的 anchor,所以相安無事,但是現在每個 anchor 都有自己獨特的形狀大小,和 feature 就不是特別好地 match。另一方面,對原本的特徵圖來說,它並不知道形狀預測分支預測的 anchor 形狀,但是接下來的分類和回歸卻是基於預測出的 anchor 來做的,可能會比較懵逼。

我們增加了一個 Feature Adaption 模塊來解決這種問題。思路很簡單,就是把 anchor 的形狀信息直接融入到特徵圖中,這樣新得到的特徵圖就可以去適應每個位置 anchor 的形狀。我們利用一個 3x3 的 deformable convolution 來修正原始的特徵圖,而 deformable convolution 的 offset 是通過 anchor 的 w 和 h 經過一個 1x1 conv 得到的。(此處應該劃重點,如果是像正常的 deformable convolution 一樣,用特徵圖來預測 offset,則提升有限,因為沒有起到根據 anchor 形狀來 adapt 的效果)

通過這樣的操作,達到了讓 feature 的有效範圍和 anchor 形狀更加接近的目的,同一個 conv 的不同位置也可以代表不同形狀大小的 anchor 了。從表格可以看到,Feature Adaption 還是很給力的,帶來了接近 5 個點的提升。

高質量 proposal 的正確打開方式

故事到這裡其實也可以結束了,但是我們遇到了和之前一些改進 proposal 的 paper 裡相同的問題,那就是 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),其他方法上也有大幅提升。

談談 anchor 設計準則

我們在 paper 裡提到了 anchor 設計的兩個準則,alignment(中心對齊) 和 consistency(特徵一致)。其中 alignment 是指 anchor 的中心點要和 feature 的位置對齊,consistency 是指 anchor 的特徵要和形狀匹配。

由於每個 anchor 都是由 feature map 上的一個點表示,那麼這個 anchor 最好是以這個點為中心,否則位置偏了的話,這個點的 feature 和這個 anchor 就不是非常好地對應起來,用該 feature 來預測 anchor 的分類和回歸會有問題。我們設計了類似 cascade/iterative RPN 的實驗來證明這一點,對 anchor 進行兩次回歸,第一次回歸採用常規做法,即中心點和長寬都進行回歸,這樣第一次回歸之後,anchor 中心點和 feature map 每一個像素的中心就不再完全對齊。我們發現這樣的兩次 regress 提升十分有限。所以我們在形狀預測分支只對 w 和 h 做預測,而不回歸中心點位置。

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

總結

  1. 在 anchor 設計中,alignment 和 consistency 這兩個準則十分重要。

  2. 採用兩個 branch 分別預測 anchor 的位置和形狀,不需要預先定義。

  3. 利用 anchor 形狀來 adapt 特徵圖。

  4. 高質量 proposal 可以使用更少的數量和更高的 IoU 進行訓練。

  5. 即插即用,無縫替換。

關於 code

預計在三月底或者四月的某個時候 release 在 mmdetection (https://github.com/open-mmlab/mmdetection) 裡,歡迎 watch。

Arxiv 連結

https://arxiv.org/abs/1901.03278

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 港中大-商湯聯合實驗室等提出:Guided Anchoring: 物體檢測器也能自己學 Anchor
    在使用 ResNet-50-FPN 作為 backbone 的情況下,Guided Anchoring 將 RPN 的 recall(AR@1000) 提高了 9.1 個點,將其用於不同的物體檢測器上,可以提高 mAP 1.2 到 2.7 個點不等。下圖是我們的方法和傳統 RPN 的性能和速度對比,可以看到要顯著優於傳統 RPN。
  • 目標檢測:Anchor-Free時代
    其實Anchor-Free並不是一個新概念了,大火的YOLO算是目標檢測領域最早的Anchor-Free模型,而最近的Anchor-Free模型如FASF、FCOS、FoveaBox都能看到DenseBox的影子。
  • CVPR 2020 | 商湯提出 Anchor-free 目標檢測新網絡
    Centripetalnet在大型公開數據集MS-COCO上達到了目前anchor-free檢測模型中的最優效果。  2  動機  1、現有的基於關鍵點的目標檢測網絡(如CornerNet、CenterNet、ExtremeNet等)通過使用關聯嵌入向量進行物體關鍵點的匹配,然而關聯嵌入向量具有訓練難度大且容易混淆同類物體的缺點,這會造成許多錯誤的關鍵點匹配從而導致錯誤的檢測結果。
  • 卷積神經網絡 物體檢測 SSD
    2015年,YOLO之後,另外一個直接回歸的方法SSD,以state-of-the-art的檢測效果和檢測效率橫空出世;SSD,single shot multibox detector直接看下圖吧,可以看出,YOLO是在卷積層後加了FC,然後預估2*7*7共49個位置98BBox;而SSD顯著的不同就是多尺度:1) 多尺度的feature map上提取特徵,通過3*3的卷積核,保證特徵的細粒度和豐富性; 2) 多尺度feature map上抽取anchor,每張圖共有7308個BBox,遠大於YOLO的98;
  • 卷積神經網絡 物體檢測 FPN
    2017年,kaiming和rbg再次合作(一作Tsung-Yi Lin),提出了FPN解決小物體檢測的問題FPN(feature pyramid network)從rcnn到fater rcnn,物體的分類都是在最後conv層的feature map上做的,而此時feature map每個點對應的是原圖的一個區域,如果我們要檢測的物體比較小,很容易漏檢;所謂低層的特徵淺但是位置精細,高層的特徵深但是位置粗糙,因此如何加入多尺度特徵是本篇要解決的問題,如下是幾種方案:(a)通過多尺度圖片分別獲取多尺度特徵
  • 輕鬆識別小目標的物體檢測算法揭秘
    FasterRCNN檢測方案使用CNN網絡來提取特徵圖(feature map),然後在特徵圖的每個單元(cell)上基於錨框(anchor box)去做是否有物體的二分類任務,及物體相對於錨框位移的回歸任務。這個階段被稱作Region Proposal Network(RPN)。
  • 卷積神經網絡 物體檢測 Faster-RCNN
    而這裡3*3的卷積核卷積出來的256維也代表了原圖的一個區域(比如20*20);那其實我們可以直接對這256維進行學習,但是這樣每個點一個region proposal太少太粗糙了,我們現在不止要用256維學習3*3卷積對應原圖的20*20的區域,而是要以此區域中心點為中心學習多個不同尺度不同長寬比例的區域,而不同尺度和不同長度的區域-proposal稱之成為anchor
  • 香港中文大學陳愷:物體檢測算法的近期發展及開源框架介紹 | 大...
    雷鋒網 AI 科技評論按:物體檢測是計算機視覺的基礎任務之一。香港中文大學多媒體實驗室博士生陳愷在 AI 研習社的公開課上,為大家總結了深度學習背景下物體檢測算法的發展,分享 COCO 比賽冠軍團隊所使用的算法,並介紹由港中大多媒體實驗室開源的物體檢測算法框架 mmdetection。
  • CVPR2020 | HAMBox 火腿框人臉檢測 真香
    以下解讀為自己與作者討論後的理解,如有錯漏,歡迎指出。0.Fig1 人臉檢測中的misalignment現象個人認為圖a中在一定範圍內anchor尺度越大,每張人臉匹配到的anchor數目越多是由於數據分布導致,不能說明普適的檢測任務。
  • CVPR精彩論文解讀:對當下主流CNN物體檢測器的對比評測
    如何選擇物體檢測器——對當下主流CNN物體檢測器的評測自2014年RCNN被提出以來,基於卷積神經網絡的物體檢測已經成為主流。Faster RCNN、SSD、YOLO、 R-FCN等諸多檢測算法百花齊放,每種方法都在各自的維度上達到當時的state-of-the-art。而由於各種不同方法在實驗時所使用的特徵提取網絡、圖像解析度、軟硬體架構等諸多因素不盡相同,目前對於不同的檢測方法一直缺乏一個實際的公平比較。這篇論文主要討論多種物體檢測算法在速度、精度做不同權衡時的表現,進而指導實際應用中對物體檢測器的選擇。
  • 先理解Mask R-CNN的工作原理,然後構建顏色填充器應用
    主幹架構主幹網絡的簡化圖示這是一個標準的卷積神經網絡(通常來說是 ResNet50 和 ResNet101),作為特徵提取器。底層檢測的是低級特徵(邊緣和角等),較高層檢測的是更高級的特徵(汽車、人、天空等)。
  • 乾貨| 算法工程師入門第三期——黃李超講物體檢測
    內容主要包括:第一,什麼是物體檢測,如何去評價一個物體裡系統的好壞。第二,物體檢測整個的框架是怎麼樣的?它一般包含了圖像的分類和物體檢測的定位。第三,介紹物體檢測的歷史發展,從傳統的人工設計的一些圖像特徵加上分類器到現在的深度學習。
  • 用Unity去釋放自己的惡意——我們來實現一下《掘地求升》
    這款遊戲雖然自己玩起來經常有砸滑鼠的衝動,但是當在直播平臺上看著別的主播玩卻意外的節目效果爆炸,因此該遊戲迅速的佔領各大直播平臺。最有名的當屬一位名叫kimdoe的韓國主播,當他在直播中歷經12小時的奮戰卻一個不慎從半山腰跌入起始點,真的是隔著屏幕都能感覺到那散發出來的滿滿的絕望。(動圖見原文)
  • 全球檢測器面臨短缺:新加坡自己將生產4000萬個檢測拭子
    新加坡國立大學的研究員研究出兩個新方法來製作新冠病毒的檢測拭子。其中一個是使用3D列印技術製作,這類的檢測拭子已經在新冠確診者身上實驗過,檢測結果準確。另外一個是注射制模,幾分鐘內就能生產幾百個檢測器。這兩種方法都是低成本的,預測新加坡未來幾個月內會生產近4000萬個檢測拭子。
  • 基於聲波的機器人夾持器被開發 無需接觸就能精準操縱微小易碎物體
    這種夾持器可以在不接觸小而易碎的物體的情況下操縱它們。此外,這些柔性機器人夾持器只能提供有限的定位精度。 不接觸也能抓住:這就是Schuck的「無接觸機器人」項目背後的原理。這項技術是基於一種已經被開發了80多年並首次用於太空探索的效應。超聲波會產生一種人們看不見或聽不見的壓力場。壓力點是聲波相互疊加而形成的,小物體可以被困在這些壓力點中。結果,它們似乎在空氣中自由漂浮——在一個聲學陷阱中。
  • 「蛇型」機械抓取器誕生,可抓取比自身重220倍的物體
    近日,雪梨新南威爾斯大學的團隊研發了一種柔軟的織物機械抓取器,它可以像象鼻一樣抓取和釋放物體而不會將其損壞。機械抓取器是一種仿生工具,它的外形酷似一條蛇,設計靈感來自於研究人員對自然界中諸如大象、蟒蛇、章魚等動物肢體行為的觀察。
  • 解讀目標檢測新範式:Segmentations is All You Need
    為了解決這一問題,程澤華等研究者提出使用弱監督分割多模態注釋,在沒有 NMS 的情況下實現了高度穩健的目標檢測性能。作者利用注釋質量較差的邊界框在困難環境中實現穩健的目標檢測性能,避免了與 anchor 框或 NMS 相關的所有超參數。他們提出的模型超越了之前基於 anchor 的一步和多步檢測器,而且簡單得多。該模型在準確性和召回率方面都達到了當前最佳水平。
  • 自動駕駛檢測器可同時實現3D檢測精讀和速度的提升
    打開APP 自動駕駛檢測器可同時實現3D檢測精讀和速度的提升 佚名 發表於 2020-03-20 13:40:40 3月19日,
  • 詳解目標檢測Faster R-CNN
    這種技術在遷移學習(Transfer Learning)中比較普遍,尤其是,採用在大規模數據集訓練的網絡權重,來對小規模數據集訓練分類器。然後,RPN(Region Propose Network) 對提取的卷積特徵圖進行處理。