論文名稱:CornerNet: Detecting Objects as Paired Keypoints
論文鏈接:https://arxiv.org/abs/1808.01244
代碼鏈接:https://github.com/princeton-vl/CornerNet
簡介
這篇文章是ECCV2018的一篇目標檢測論文,該論文的創新之處在於使用Keypoints代替原來的anchor思想進行目標檢測,提出檢測目標左上點和右下點來確定一個邊界框,提出一個新的池化方法:corner pooling,在mscoco數據集上達到42.2%的ap,精度上是當時的單階段目標檢測器的state of the art,但是速度略慢,大約1fps(論文為Titan X 244ms/f),無法滿足工程需求。
相對於基於anchor檢測器創新意義有:
- anchor數量巨大,造成訓練正負樣本不均衡(anchor機制解決方式為難例挖掘,比如ohem,focal loss)
- anchor超參巨多,數量,大小,寬高比等等(比如yolo多尺度聚類anchor,ssd的多尺度aspect ratio)
算法整體架構
如上圖fig1,經過特征提取主干網絡(主干網絡為Hourglass-104)后分為兩個分支(兩個分支分別接前面提到的corner pooling,隨后細談),一個分支生成目標左上點熱力圖,一個分支生成目標右下點熱力圖,而此時兩個熱力圖並沒有建立聯系,因此無法確定兩點是夠屬於同一目標,因此兩分支同時生成embeddings,通過判斷兩個embedding vector的相似性確定同一物體(距離小於某一閾值則划為同一目標)。
如上圖fig4,圖片首先經過1個7×7的卷積層將輸入圖像尺寸縮小為原來的1/4(論文中輸入圖像大小是511×511,縮小后得到128×128大小的輸出)。
然后經過hourglass-104提取特征,該網絡通過串聯多個hourglass module組成(Figure4中的hourglass network由2個hourglass module組成),每個hourglass module都是先通過一系列的降采樣操作縮小輸入的大小,然后通過上采樣恢復到輸入圖像大小,因此該部分的輸出特征圖大小還是128×128,整個hourglass network的深度是104層。
hourglass module后會有兩個輸出分支模塊,分別表示左上角點預測分支和右下角點預測分支,每個分支模塊包含一個corner pooling層和3個輸出:heatmaps、embeddings和offsets。heatmaps是輸出預測角點信息,可以用維度為CHW的特征圖表示,其中C表示目標的類別(無背景類),每個點的預測值為0到1,表示該點是角點的分數;embeddings用來找到屬於同一個目標的左上角角點和右下角角點;offsets用來對預測框做微調,與anchor機制中的offset有區別,前者用來微調特征圖映射回原圖后的取整量化誤差,后者用來表示ground true與anchor的偏移。
Headmaps
CornerNet的第一個輸出headmap用來預測角點的位置。公式(1)是針對角點預測(headmaps)的損失函數,是修改后的focal loss。
pcij表示預測的heatmaps在第c個通道(類別c)的(i,j)位置的值,ycij表示對應位置的ground truth,N表示目標的數量。ycij=1時候的損失函數容易理解,就是focal loss,α參數用來控制難易分類樣本的損失權重;ycij等於其他值時表示(i,j)點不是類別c的目標角點,照理說此時ycij應該是0(大部分算法都是這樣處理的),但是這里ycij不是0,而是用基於ground truth角點的高斯分布計算得到,因此距離ground truth比較近的(i,j)點的ycij值接近1,這部分通過β參數控制權重,這是和focal loss的差別。因為靠近ground truth的誤檢角點組成的預測框仍會和ground truth有較大的重疊面積,如下圖所示,紅色實線框是ground truth;橘色圓圈是根據ground truth的左上角角點、右下角角點和設定的半徑值畫出來的,半徑是根據圓圈內的角點組成的框和ground truth的IOU值大於0.7而設定的,圓圈內的點的數值是以圓心往外呈二維的高斯分布;白色虛線是一個預測框,可以看出這個預測框的兩個角點和ground truth並不重合,但是該預測框基本框住了目標,因此是有用的預測框,所以要有一定權重的損失返回,這就是為什么要對不同負樣本點的損失函數采取不同權重值的原因。
Embeddings
CornerNet的第二個輸出是embeddings,對應文章中group corner的內容。前面介紹了關於角點的檢測,在那部分中對角點的預測都是獨立的,不涉及一個目標的一對角點的概念,因此如何找到一個目標的兩個角點就是第三個輸出embedding做的工作。這部分是受associative embedding那篇文章的啟發,簡而言之就是基於不同角點的embedding vector之間的距離找到每個目標的一對角點,如果一個左上角角點和一個右下角角點屬於同一個目標,那么二者的embedding vector之間的距離應該很小。
embedding這部分的訓練是通過兩個損失函數實現的,etk表示屬於k類目標的左上角角點的embedding vector,ebk表示屬於k類目標的右下角角點的embedding vector,ek表示etk和ebk的均值。公式(4)用來縮小屬於同一個目標(k類目標)的兩個角點的embedding vector(etk和ebk)距離。公式(5)用來擴大不屬於同一個目標的兩個角點的embedding vector距離。
Offsets
CornerNet的第三個輸出是offset,這個值和目標檢測算法中預測的offset類似卻完全不一樣,說類似是因為都是偏置信息,說不一樣是因為在目標檢測算法中預測的offset是表示預測框和anchor之間的偏置,而這里的offset是表示在取整計算時丟失的精度信息,如上式(2),其中(xk,yk)表示第k個角點的原圖坐標值,n代表下采樣因子,ok表示特征圖縮放回原圖后與原gt框的精度損失。然后通過公式(3)的smooth L1損失函數監督學習該參數,和常見的目標檢測算法中的回歸支路類似。
Corner pooling
CornerNet是預測左上角和右下角兩個角點,但是這兩個角點在不同目標上沒有相同規律可循,如果采用普通池化操作,那么在訓練預測角點支路時會比較困難。作者認為左上角角點的右邊有目標頂端的特征信息(第一張圖的頭頂),左上角角點的下邊有目標左側的特征信息(第一張圖的手),因此如果左上角角點經過池化操作后能有這兩個信息,那么就有利於該點的預測。Figure3是針對左上角點做corner pooling的示意圖,該層有2個輸入特征圖,特征圖的寬高分別用W和H表示,假設接下來要對圖中紅色點(坐標假設是(i,j))做corner pooling,那么就計算(i,j)到(i,H)的最大值(對應Figure3上面第二個圖),類似於找到Figure2中第一張圖的左側手信息;同時計算(i,j)到(W,j)的最大值(對應Figure3下面第二個圖),類似於找到Figure2中第一張圖的頭頂信息,然后將這兩個最大值相加得到(i,j)點的值(對應Figure3最后一個圖的藍色點)。右下角點的corner pooling操作類似,只不過計算最大值變成從(0,j)到(i,j)和從(i,0)到(i,j)。
Figure6也是針對左上角點做corner pooling的示意圖,是Figure3的具體數值計算例子,該圖一共計算了4個點的corner pooling結果。
Prediction module
Figure7是Figure4中預測模塊的詳細結構,該結構包括corner pooling模塊和預測輸出模塊兩部分,corner pooling模塊采用了類似residual block的形式,有一個skip connection,虛線框部分執行的就是corner pooling操作,也就是Figure6的操作。
Loss function
Ldet為角點損失,Lpull、Lpush為embedding損失,Loff為offset損失
其中α為0.1,β為0.1,γ為1,損失函數優化方式為Adam
Testing details
1、在得到預測角點后,會對這些角點做NMS操作,選擇前100個左上角角點和100個右下角角點。
2、計算左上角和右下角角點的embedding vector的距離時采用L1范數,距離大於0.5或者兩個點來自不同類別的目標的都不能構成一對,檢測分數是兩個角點的平均分數。
3、測試圖像采用0值填充方式得到指定大小作為網絡的輸入,而不是采用resize,另外同時測試圖像的水平翻轉圖並融合二者的結果。
4、最后通過soft-nms操作去除冗余框,只保留前100個預測框。
Eexperiment
上表Table1是關於是否添加corner pooling的消融實驗,可以看出第二行(添加)提升效果明顯,尤其在大目標上
上表Table2是關於不同位置負樣本采取不同權重的損失函數的效果,第一行為無懲罰減少機制,第二行為固定半徑,第三行為采用目標計算得到的半徑值,效果提升明顯,尤其是在中、大目標上。
上表Table3是關於corner pooling分別對左上角點預測和右下角點預測的影響。
上表Table4是關於主干網絡選擇的消融實驗,該實驗分別以fpn為主干網絡+corner檢測方式,hourglass-104為主干網絡+anchor檢測方式,hourglass-104為主干網絡+corner檢測方式,最后說明本文組合方式效果最佳。
上表Table5將cornernet分別與RetinaNet、Cascade R-CNN、IoU-Net在高iou閾值下進行ap對比,證明“好的檢測期的邊界框與gt更貼近”
上表Table6錯誤分析。第一行是這篇文章的算法結果;第二行是將角點預測結果用ground truth代替,可以看到提升非常大;第三行是進一步將偏置用ground truth代替,相比之下提升會小很多。這說明目前該算法的瓶頸主要在於角點預測。
上表Table7是connerNet和其他優秀目標檢測算法的效果對比。
總結
本論文主要提出使用一對關鍵點(左上角點,右下角點)進行目標檢測,並取得非常好的檢測精度,由此掀起anchor-free熱潮,博主在寫此篇博文時cornernet已經被deprecated,取而代之的還是普林斯頓大學團隊提出的cornernet-lite(https://arxiv.org/abs/1904.08900),該論文在速度和精度上均對cornernet進行提升,另一篇同期論文(2019.04)centernet(https://arxiv.org/abs/1904.08189)提出Keypoint Triplets思想也對cornernet進行優化,達到目前單階段目標檢測器最高精度(47.0%)。接下來我將對以上兩篇論文進行總結,並有可能分析cornernet系列的源碼實現細節。本文參考:https://blog.csdn.net/u014380165/article/details/83032273