ai科技評論:作者陳凱,這篇文章最早發(fā)表在知乎,雷鋒的AI科技評論被授權(quán)轉(zhuǎn)載。
前言
進入圖像物體檢測的坑大概有一年了,至少短期內(nèi)還會留在坑里,還拉著搭檔入坑。值此新的(吉)、(許)和(班)節(jié)之際,我打算介紹一些已經(jīng)完成的工作,并寫下我對這一領域的理解。另外,如果有空,我也來說說mmdetection的設計和實現(xiàn)。
作為開始,讓我們來談談最早開始的項目“引導錨定的區(qū)域提案”/>
總結(jié)
我們提出了一種新的錨生成方法——引導錨,即通過圖像特征來引導錨的生成。通過預測錨的位置和形狀,生成稀疏的任意錨,并設計特征自適應模塊來修改特征圖以更好地匹配錨的形狀。以ResNet-50-FPN為骨干,Guided Anchoring將RPN的召回率(AR@1000)提高了9.1個點,用于不同的物體檢測器時,可以將map提高1.2到2.7個點。
下圖顯示了我們的方法與傳統(tǒng)RPN的性能和速度比較,可以看出它明顯優(yōu)于傳統(tǒng)RPN。
以下結(jié)果應用于不同的檢測方法,主干是ResNet-50-FPN。
背景
錨是目標檢測中的一個重要概念,通常是一組人工設計的框架,作為分類和包圍盒回歸的參考框架。錨廣泛用于單級和兩級探測器。例如,兩級檢測器的第一級通常使用RPN生成建議,這是一個對錨進行分類和回歸的過程,即錨->建議->;檢測bbox大多數(shù)單級檢測器直接對anchor進行分類回歸,即anchor->:檢測bbox。
一種常見的生成錨點的方法是滑動窗口,即首先定義k個具有特定比例和縱橫比的錨點,然后以一定的步長在整個圖上滑動。該方法廣泛應用于fast R-CNN、SSD、RetinaNet等經(jīng)典檢測方法中。
動力
滑動窗口生成錨點的方法簡單可行,但并不完美,不然也就沒紙可談了。首先,錨的尺度和長寬比需要提前定義,這是一個對性能影響很大的超級參數(shù),需要針對不同的數(shù)據(jù)集和方法獨立調(diào)整。如果比例和長寬比設置不當,召回率可能不夠高,或者錨太多可能會影響分類性能和速度。一方面,大部分錨點分布在背景區(qū)域,不會對提議或檢測產(chǎn)生任何正面影響;另一方面,預定義的錨定形狀可能不滿足具有極端尺寸或?qū)捀弑鹊膶ο?。所以我們期待的是一個可以根據(jù)位置改變形狀的稀疏錨。
制劑
首先,我們思考錨是如何產(chǎn)生的。我們通常用四個數(shù)字(x,y,w,h)來描述一個錨點,即中心點的坐標和寬度、高度。我們將錨的分布表述為以下公式:
錨的概率分布分解為兩個條件概率分布,即給定圖像特征后錨中心點的概率分布和給定圖像特征和中心點后的形狀概率分布,這就是論文題目中的引導錨定的由來。滑動窗可視為均勻分布,但屬于脈沖函數(shù)的特例。
根據(jù)上述公式,錨的生成過程可以分為兩個步驟,錨位預測和形狀預測。在這個看似簡單的公式中,我們走過了一些彎路,討論了一些奇怪的方法,最終發(fā)現(xiàn)了通往簡單的道路。
方式
如圖所示,基于原始RPN的特征圖,我們使用兩個分支分別預測錨的位置和形狀,然后將它們組合起來得到錨。然后,使用特征適配模塊來調(diào)整錨特征,并且獲得新的特征圖用于以后的預測(錨的分類和回歸)。整個方法可以進行端到端訓練,與以前的方法相比,只增加了3個1x1 conv和1個3x3可變形conv,模型參數(shù)變化不大。
位置預測
位置預測分支的目標是預測哪些區(qū)域應該作為中心點來生成錨點,這是一個二元分類問題。不同于RPN或者分割的分類,這里我們不預測每個點是前景還是背景,而是預測它是否是物體的中心。
整個要素圖區(qū)域分為對象中心區(qū)、外圍區(qū)和忽略區(qū)??傮w思路是在特征圖對應的地面真值框中心標記一小塊區(qū)域作為物體中心區(qū)域,訓練時作為正樣本,其他區(qū)域根據(jù)距離中心的距離標記為忽略或負樣本。具體設計在論文里說的很清楚。通過位置預測,我們可以選擇一小部分區(qū)域作為錨的候選中心點位置,大大減少了錨的數(shù)量。在靈感的時候,預測好位置后,可以用蒙面的conv代替普通的conv,只在有錨的地方計算,這樣可以加速。
形狀預測
形狀預測分支的目標是預測給定錨點中心點的最佳長度和寬度,這是一個回歸問題。當然,按照慣例,首先計算目標,即中心點錨的最優(yōu)w和h,然后用L1/L2/光滑L1損失來監(jiān)督。但是這個東西的目標不好計算,而且會很難實現(xiàn),所以我們直接用IoU作為監(jiān)督者來學習w和h,既然不能計算出最優(yōu)的w和h,而計算IoU又是一個可導的運算,那就讓網(wǎng)絡自己優(yōu)化,使IoU最大化。后來我們切換到有界IoU Loss,但是原理是一樣的。
還有一個問題,就是對于一個主播來說,應該用哪個地真來優(yōu)化IoU,也就是說應該給主播分配哪個地真。對于之前的常規(guī)錨,我們可以直接計算它的IoU和所有地面真值,然后分配給IoU最大的gt。不幸的是,錨的w和h是不確定的,需要預測。我們將此錨和gt的IoU表示為
當然,我們不可能真的遍歷所有可能的W和H,然后得到IoU的最大值,所以我們采用近似的方法,即對一些可能的W和H進行采樣,理論上,采樣越多,逼近效果越好。但是為了效率,我們采樣了9組常見的W和h,通過實驗發(fā)現(xiàn)最終的結(jié)果對樣本組數(shù)并不敏感,也就是說不管樣本組數(shù)多少,近似效果就足夠了。
生成錨點
預測好錨點位置和中心點后,我們就可以生成錨點了,如下圖所示。這時候主播稀疏,每個位置都不一樣。用生成的錨點代替滑動窗口,AR (Average Recall)可以超過普通RPN 4個點,成本只增加2個1x1 conv。
特征適應
故事本可以到此結(jié)束。我們用生成的錨點和之前的特征圖對錨點進行分類回歸,讓我們很開心。但是,我們發(fā)現(xiàn)了一個不合理的地方。我們都是同一層conv的特征。為什么我能比別人強,代表一個又長又大的主播,而你只能代表一個小主播?
一方面,不合理的原因在于conv同一層不同位置的接收特征場是相同的。在最初的RPN中,每個人都代表相同形狀的錨,所以他們很平靜。但現(xiàn)在每個錨都有自己獨特的形狀和大小,所以它并不特別匹配功能。另一方面,對于原始的特征圖,它并不知道形狀預測分支預測的錨點形狀,但是下面的分類和回歸都是基于預測的錨點,可能比較困難。
我們添加了一個功能適配模塊來解決這個問題。思路很簡單,就是把錨點的形狀信息直接集成到特征圖中,這樣新的特征圖就可以適應錨點在各個位置的形狀。我們使用一個3×3的可變形卷積來修改原始特征圖,可變形卷積的偏移量通過錨的w和h的1×1 conv來獲得。(重點要放在這里。如果像正??勺冃尉矸e那樣通過特征圖來預測偏移,則改進是有限的,因為沒有實現(xiàn)根據(jù)錨形狀進行適應的效果。)
通過這種操作,特征的有效范圍更接近錨的形狀,同一conv的不同位置也可以表示不同形狀和大小的錨。從表中可以看出,功能適配仍然非常強大,帶來了近五個點的改進。
打開高質(zhì)量建議書的正確方法
事實上,故事可以到此結(jié)束,但是我們遇到了和以前一些改進提案的論文一樣的問題,就是提案的質(zhì)量提高了很多(如下圖所示),但是對檢測器的性能提升有限。在不同的檢測模型上,使用導向錨定可以提高大約一個點。明明有很好的提議,但是mAP沒有漲很多,讓人很不舒服。
經(jīng)過一番研究,我們發(fā)現(xiàn)以下兩點:1。減少提案數(shù)量;2.訓練時提高陽性樣本的IoU閾值(這個比較重要)。既然top300有很多IoU高的提案,為什么還要用1000幀來訓練測試呢?既然提案都這么優(yōu)秀,那么把IoU標準變得更嚴格也不是沒有道理。
這種正確的開場方式基本上是齊家獨立轉(zhuǎn)移的,讓表演看起來好多了。通過這兩個改進,fast R-CNN上的上升點瞬間提高到了2.7點(沒有任何招數(shù)),其他方法也有了很大的改進。
論錨栓設計標準
我們在論文中提到了錨設計的兩個標準,對齊和一致性。對齊是指錨點的中心點應與特征的位置對齊,一致性是指錨點的特征應與形狀匹配。
Alignment由于每個錨點都是由要素圖上的一個點來表示的,所以最好將錨點定在該點的中心,否則,如果位置偏移,則該點的要素將不會很好地對應于錨點,使用該特征來預測錨點的分類和回歸將是有問題的。我們設計了一個類似級聯(lián)/迭代RPN的實驗來證明這一點。主播退步了兩次。第一次回歸采用常規(guī)方法,即對中心點和長寬進行回歸,使得第一次回歸后,錨點中心點和特征圖每個像素的中心不再完全對齊。我們發(fā)現(xiàn)這兩種倒退促銷非常有限。所以在形狀預測的分支中,我們只預測W和H,不返回中心位置。
Consistency這個標準是設計特征自適應的初衷。由于每個位置的錨點形狀不同,破壞了特征的一致性,因此需要通過特征自適應進行校正。這個準則本質(zhì)上是關于如何準確提取錨點特征的討論。對于兩級檢測器的第二級,我們可以通過RoI池或RoI對齊來準確提取RoI的特征。但是對于RPN或者單級檢測器的錨點,由于數(shù)量巨大,我們無法用這種笨重的方法準確匹配特征和幀,或者只能用特征圖上的一個點,也就是一個512x1x1的向量。那么特征適配(Feature Adaption)就起到了使特征和錨點之間的對應關系更加準確的作用,這種設計在其他地方也可以借鑒。
總結(jié)
在 anchor 設計中,alignment 和 consistency 這兩個準則十分重要。采用兩個 branch 分別預測 anchor 的位置和形狀,不需要預先定義。利用 anchor 形狀來 adapt 特征圖。高質(zhì)量 proposal 可以使用更少的數(shù)量和更高的 IoU 進行訓練。即插即用,無縫替換。關于代碼
預計將于3月底或4月的某個時候在MM Detection(https://github.com/open-mmlab/mmdetection)發(fā)布。歡迎觀看。
Arxiv鏈接
https://arxiv.org/abs/1901.03278
1.《anchor 干貨 | Guided Anchoring:物體檢測器也能自己學 Anchor》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《anchor 干貨 | Guided Anchoring:物體檢測器也能自己學 Anchor》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/guoji/984908.html