天天看點

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

CornerNet: Detecting Objects as Paired Keypoints 學習筆記

  • Overview
  • CornerNet
    • Detecting Corner
    • Focal Loss
    • Embedding
    • Offset
    • Corner Pooling
    • Hourglass Network
    • Detail
  • Experiment

Overview

CornerNet算是物體檢測中anchor free方法的開山之作,促使CornerNet誕生的原因是基于anchor的方法還有一些缺點未能解決:

  1. 需要大量的anchor box,然而隻有一小部分的anchor box與ground truth 存在較大的重疊,這就會造成類别不平衡問題,而且不利于訓練;
  2. 使用anchor 引入了大量人為的超參數及設計方法(數量、大小、比例等)。

    CornerNet利用單個卷積網絡将框的左上角及右下角兩個點組成一對關鍵點,用一個卷積網絡預測所有同一類别的樣本的左上角點的heatmap,及右下角點的heatmap,及一個檢測到角點的embeding vector。embeding用于組合屬于同一個目标的一對角點,網絡預測其相似的embedings。是以不需要設計大量的anchor boxes,這樣就簡化了模型的輸出,同時移除了anchor的設計步驟。同時提出了corner pooling的新概念用于提升角點定位效果。

思路圖如下:

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

Fig. 1 We detect an object as a pair of bounding box corners grouped together. A convolutional network outputs a heatmap for all top-left corners, a heatmap for all bottom-right corners, and an embedding vector for each detected corner. The network is trained to predict similar embeddings for corners that belong to the same object.

CornerNet

one-stage方法,通過檢測一對keypoints時間檢測框特點:

1)一個卷積神經網路預測top-left corner,一個預測bottom-right corner,稱為heatmap。

2)embedding,負責檢測哪個top-left corner和哪個bottom-right corner是一對,組成一個box,同一個box的corner距離短。

3)offset:為了獲得tighter bounding box,調整corner位置。

4)corner pooling:更好的定位corner(一個corner定位不能隻依靠局部資訊),檢測top-left,有兩組feature map,相同像素點,pooling值一個是該像素水準向右的最大值,一個是垂直向下的最大值,之後兩組feature map求和。

5)hourglass結構+Focal loss 更好訓練

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

主要流程:

将檢測框的左上及右下的點作為一組角點。一個單一結構的卷積網絡用于預測兩組不同目标類别的heatmaps,一組heatmaps用于預測左上角的點,另一組用于預測右下角的點,同時預測一個embeddings向量,比如來自同一目标類别的兩個角點之間的距離很小。為了得到更加緊密的邊框,網絡同時預測一個偏差用于調整角點的位置。有了兩個角點的heatmaps,embedding vectors,及Offset,後面通過使用一個後處理的方法來獲得最終的邊框。如上圖,使用hourglass 網絡作為backbone,其後接着兩個預測子產品,一個用于預測左上角的點,另一個用于預測右下角的點。每個子產品都有自己的corner pool層,在進行預測heatmaps,embeding vector,offset之前pool hourglass 網絡的feature maps.本文并使用不同的尺寸檢測目标物,隻借助模型的兩個輸出角點進行目标檢測。

Detecting Corner

預測兩組heatmaps,每組heatmaps的尺寸為HxWxC。C代表目标物的類别。沒有背景這個類别,每個通道的feature map為二值型的mask,代表是否為該類别。對于每個角點,存在一個ground truth positive location,其餘的位置為negative.本文降低了對正樣本附近圓周位置的負樣本的懲罰,因為一對距離對應ground truth很近的負樣本角點也可以産生一個較好的邊界框,包圍目标物。如下圖所示。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

優勢:

1)更易實作:corner定位需要兩個邊,box中心的确定需要四個邊。

2)表示box空間更efficient:O(wh)頂點表示 O(w2h2)anchor box

Focal Loss

Pcij代表第(i, j)類别為c的機率,ycij代表對應的經過unnormalized高斯分布增強過的ground truth标簽(0, 1),定義了新的Focal Loss:

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

α, β為超參數,用來控制每個角點的分布,實驗中α全部設為2, β全部設為4。

Embedding

對角點的預測都是獨立的,不涉及一個目标的一對角點的概念,是以如何找到一個目标的兩個角點就是embedding做的工作,簡單來說通過不同角點的embedding vector之間的距離找到每個目标的一對角點,如果一個左上角角點和一個右下角角點屬于同一個目标,那麼二者的embedding vector之間的距離應該很小。

這部分是受associative embedding的啟發,embedding這部分的訓練是通過兩個損失函數實作的,etk表示屬于k類目标的左上角角點的embedding vector,ebk表示屬于k類目标的右下角角點的embedding vector,ek表示etk和ebk的均值。公式(4)用來縮小屬于同一個目标(k類目标)的兩個角點的embedding vector(etk和ebk)距離。公式(5)用來擴大不屬于同一個目标的兩個角點的embedding vector距離。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

Offset

目标檢測算法中預測的offset是表示預測框和anchor之間的偏置,而這裡的offset是表示在取整計算時丢失的精度資訊,如上式(2),其中(xk,yk)表示第k個角點的原圖坐标值,n代表下采樣因子,ok表示特征圖縮放回原圖後與原gt框的精度損失。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

然後通過smooth L1損失函數監督學習該參數,和常見的目标檢測算法中的回歸支路類似。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

Corner Pooling

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

CornerNet是預測左上角和右下角兩個角點,但是這兩個角點在不同目标上沒有相同規律可循,如果采用普通池化操作,那麼在訓練預測角點支路時會比較困難。作者認為左上角角點的右邊有目标頂端的特征資訊(第一張圖的頭頂),左上角角點的下邊有目标左側的特征資訊(第一張圖的手),是以如果左上角角點經過池化操作後能有這兩個資訊,那麼就有利于該點的預測。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

文章中的具體舉例比較易懂:

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

Hourglass Network

本文創新點啟發于姿态估計,左上角點和右下角點的配對也類似于姿态估計關鍵點的組合。CornerNet的backbone取用于stacked hourglass model中的hourglass network,SHM的主要貢獻在于利用多尺度特征來識别姿态,這裡不再贅述,我們着重于hourglass network結構。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

網絡的前半段用來提取特征,随着層數的加深,feature map的語義越來越多。

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

後半段做上采樣,于前半段基本對稱,相當于pooling層的反操作,feature map的大小也一一對應。每擴大一次feature map的大小,就将前半段對應大小的feature map add進來,直至傳回為原圖大小。整個過程類似于U-Net。

Detail

  1. Loss Funtion

    Ldet為角點損失,Lpull、Lpush為embedding損失,Loff為offset損失

    其中α為0.1,β為0.1,γ為1,損失函數優化方式為Adam

    CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
    CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
  2. 上圖是預測子產品的詳細結構,該結構包括corner pooling子產品和預測輸出子產品兩部分,corner pooling子產品采用了類似residual block的形式,有一個skip connection,虛線框部分執行的就是corner pooling操作。
  3. 1、在得到預測角點後,會對這些角點做NMS操作,選擇前100個左上角角點和100個右下角角點。

    2、計算左上角和右下角角點的embedding vector的距離時采用L1範數,距離大于0.5或者兩個點來自不同類别的目标的都不能構成一對,檢測分數是兩個角點的平均分數。

    3、測試圖像采用0值填充方式得到指定大小作為網絡的輸入,而不是采用resize,另外同時測試圖像的水準翻轉圖并融合二者的結果。

    4、最後通過soft-nms操作去除備援框,隻保留前100個預測框。

Experiment

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
  1. Table1是關于是否添加corner pooling的消融實驗,可以看出第二行(添加)提升效果明顯,尤其在大目标上;
  2. Table2是關于不同位置負樣本采取不同權重的損失函數的效果,第一行為無懲罰減少機制,第二行為固定半徑,第三行為采用目标計算得到的半徑值,效果提升明顯,尤其是在中、大目标上;
  3. Table3是關于corner pooling分别對左上角點預測和右下角點預測的影響。
    CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
    CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
  4. Table4是關于主幹網絡選擇的消融實驗,該實驗分别以fpn為主幹網絡+corner檢測方式,hourglass-104為主幹網絡+anchor檢測方式,hourglass-104為主幹網絡+corner檢測方式,最後說明本文組合方式效果最佳。
CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment

5. Table5将cornernet分别與RetinaNet、Cascade R-CNN、IoU-Net在高iou門檻值下進行ap對比,證明“好的檢測期的邊界框與gt更貼近”

CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
  1. Table6錯誤分析。第一行是這篇文章的算法結果;第二行是将角點預測結果用ground truth代替,可以看到提升非常大;第三行是進一步将偏置用ground truth代替,相比之下提升會小很多。這說明目前該算法的瓶頸主要在于角點預測。
CornerNet: Detecting Objects as Paired Keypoints 學習筆記OverviewCornerNetExperiment
  1. 上表Table7是connerNet和其他優秀目标檢測算法的效果對比。

參考:

Stacked Hourglass Networks - 堆疊沙漏網絡結構詳解

論文閱讀筆記五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)

簡書 CornerNet

CornerNet 算法筆記

繼續閱讀