1. 程式人生 > >CPNDet:粗暴地給CenterNet加入two-stage精調,更快更強 | ECCV 2020

CPNDet:粗暴地給CenterNet加入two-stage精調,更快更強 | ECCV 2020

> 本文為CenterNet作者發表的,論文提出anchor-free/two-stage目標檢測演算法CPN,使用關鍵點提取候選框再使用兩階段分類器進行預測。論文整體思路很簡單,但CPN的準確率和推理速度都很不錯,比原本的關鍵點演算法更快,原始碼也會公開,到時可以一試   來源:曉飛的演算法工程筆記 公眾號 **論文: Corner Proposal Network for Anchor-free,Two-stage Object Detection** ![](http://upload-images.jianshu.io/upload_images/20428708-90b0404e28b661ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * **論文地址:[http://arxiv.org/abs/2007.13816](http://arxiv.org/abs/2007.13816)** * **論文程式碼:[http://github.com/Duankaiwen/CPNDet](http://github.com/Duankaiwen/CPNDet)** # Introduction *** ![](http://upload-images.jianshu.io/upload_images/20428708-c6426d517f78bf32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   目前,amchor-based目標檢測方法和anchor-free目標檢測方法都湧現了大量的優秀檢測方案。論文認為,對於形狀特異的目標,anchor-free目標檢測方式比較佔優,但acnhor-free方法通常會出現大量的誤檢,如圖1所示,需要一個獨立的分類器來提升檢測的準確率。為此,論文提出CPNDet(Corner Proposal Network),結合了anchor-free和two-stage的檢測正規化。先基於CornerNet進行角點檢測,將有效的角點列舉組合成大量候選預測框。由於候選框包含大量負樣本,先訓練一個二值分類器過濾大部分的候選預測框,再使用多類別分類器進行標籤預測。 # Anchor-based or Anchor-free? One-stage or Two-stage? ***   這裡論文主要討論anchor-based vs anchor-free以及one-stage vs two-stage的問題。 ### Anchor-based or Anchor-free?   Anchor-based方法將大量的anchor平鋪在特徵圖上,然後預測每個anchor是否包含物體以及標籤。通常,anchor是與圖片特定的位置關聯,大小也是相對固定的,bbox迴歸能夠輕微地改變其幾何形狀。Anchor-free方法則不受預設的anchor限制,直接定位目標的關鍵點,然後再預測其形狀和標籤。所以,論文認為anchor-free方法在任意形狀目標的定位上更靈活,召回率也更高。 ![](http://upload-images.jianshu.io/upload_images/20428708-52ad42cc27fba72a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   論文也對anchor-based方法和anchor-free方法在不同大小以及不同比例的目標上的進行召回率對比,結果如上表所示。可以看出anchor-free方法通常有較高的召回率,特別是在長寬比較大的物體上,anchor-based方法由於預設的anchor與目標差異大,召回率偏低。其次,FCOS雖然也是anchor-free方法,但其最後需要預測關鍵點到邊界的距離,這在這種場合下也難以預測。 ### One-stage or Two stage?   雖然anchor-free方法解決了尋找目標候選框的約束,但由於缺乏目標的內部資訊,難以很好地建立關鍵點與目標之間的聯絡,會給檢測的準確率帶來較大的影響,而關鍵點和目標之間的聯絡的建立通常需要豐富的語義資訊。 ![](http://upload-images.jianshu.io/upload_images/20428708-1246d4709726adc5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   論文將高召回率CornerNet和CenterNet作為實驗目標,結果如上表所示。主幹網路的加強能夠帶來準確率的提升,但仍然有很多的誤檢。如果去掉無目標的誤檢($AP_{refined}$)以及糾正標籤的錯誤識別($AP_{correct}$)後,準確率能夠明顯地提升了。上述的實驗說明,為了建立關鍵點與目標間的聯絡,需要借用two-stage的正規化,提取候選框的資訊來過濾誤檢部分。 # The Framework of Corner Proposal Network *** ![](http://upload-images.jianshu.io/upload_images/20428708-36984c42fc275ad8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   基於上面的分析,論文結合acnhor-free方法和two-stage正規化提出了Corner-Proposal-Network(CPN),完整的結構如圖2所示。首先使用anchor-free方法提取關鍵點,遍歷關鍵點組合成候選框,最後使用兩個分類器分別對候選框進行誤檢過濾以及標籤預測。 ### Stage 1: Anchor-free Proposals with Corner Keypoints   第一階段為anchor-free候選框提取過程,假定每個目標都由兩個關鍵點進行定位,先根據CornerNet輸出兩組角點的熱圖,選擇top-k個左上角點以及top-k個右下角點。將有效的關鍵點組合成目標的候選框,關鍵點組合是否有效主要有兩個判斷: 1. 關鍵點是否屬於同一個類別 2. 左上角點必須在右上角點的左上位置   儘管論文基於CornerNet提取候選框,但後處理有較大差異。CornerNet使用embedding向量來組合關鍵點,論文認為embedding向量並不能保證是可學習的,而論文采用獨立的分類器進行處理,能夠使用完整的中間特徵來提升準確率。 ### Stage 2: Two-step Classification for Filtering Proposals   基於anchor-free方法提取候選框雖然召回率很高,但會帶來大量的誤檢,論文采用two-step分類方法進行過濾和校正。首先採用輕量的二值分類器過濾80%的候選框,然後使用多分類器預測剩餘候選框的類別。   第一步訓練二值分類器來決定候選框是否為目標,採用$7\times 7$的RoIAlign提取每個候選框的在box特徵圖上的特徵,然後使用1個$32\times 7\times 7$的卷積層來輸出每個預測框的分類置信度,損失函式為: ![](http://upload-images.jianshu.io/upload_images/20428708-ff7bcfc45c1be26d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   $M$為總候選框數,$N$為正樣本數,$p_m$為$m$候選框為目標的概率,$\tau$為IoU閾值,設為0.7。   第二步用於給剩餘的候選框預測類別,由於缺乏目標的內部資訊的,關鍵點的類別通常不太準確,所以需要強大的分類器來根據ROI特徵進行預測。首先使用$7\times 7$的ROIAlign提取每個候選框在category特徵圖上的特徵,然後使用$C$個$256\times 7\times 7$的卷積層輸出$C$維向量,$C$為類別數量,損失函式為: ![](http://upload-images.jianshu.io/upload_images/20428708-fd6acc97cf68ea6f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   $\hat{M}$和$\hat{N}$為過濾後的候選框數量和正樣本數量,$q_{m,c}$為$m$候選框的$c$類別置信度,其餘的引數與第一步類似。 ### The Inference Process   推理過程跟訓練過程基本一樣,由於訓練過程包含很多低質量的預測框,$p_m$和$q_{m,c}$的值是偏向零的,所以推理階段第一步使用相對低的閾值(0.2)進行過濾,大約保留20%的候選框。在第二步,每個候選框有兩個標籤,分別為角點預測的標籤$s_1$和第二階段分類器預測的標籤$s_2$,當其中一個標籤分數大於0.5時才將候選框輸出,分數計算為$s_c=(s_1+0.5)(s_2+0.5)$,再歸一化到$[0,1]$。 # Experiments *** ![](http://upload-images.jianshu.io/upload_images/20428708-fe4f058d6dea2853.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   與SOTA檢測演算法進行對比,初始的輸入解析度為$511\times 511$。 ![](http://upload-images.jianshu.io/upload_images/20428708-0d9bcc6d34984c45.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   推理階段的兩個分類器對效能的影響,B-Classifier為二值分類器,M-Classifier為多標籤分類器。 ![](http://upload-images.jianshu.io/upload_images/20428708-b67e60bc794976e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   相對於其它keypoint-based方法,CPN誤檢更低。 ![](http://upload-images.jianshu.io/upload_images/20428708-c1bfaec612e43a2e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   二值分類器與CornerNet的embedding向量的效能對比。 ![](http://upload-images.jianshu.io/upload_images/20428708-15688a845826d794.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   推理速度對比。 # CONCLUSION ***   論文提出anchor-free/two-stage目標檢測演算法CPN,使用關鍵點提取候選框再使用兩階段分類器進行預測。論文整體思路很簡單,但CPN的準確率和推理速度都很不錯,比原本的關鍵點演算法更快,論文的細節也值得推敲。       > 如果本文對你有幫助,麻煩點個贊或在看唄~ 更多內容請關注 微信公眾號【曉飛的演算法工程筆記】 ![work-life balance.](http://upload-images.jianshu.io/upload_images/20428708-7156c0e4a2f49bd6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)