1. 程式人生 > >CornerNet:Detecting Objects as Paired Keypoints論文筆記

CornerNet:Detecting Objects as Paired Keypoints論文筆記

1、CornerNet是密歇根大學Hei Law等人發表的ECCV2018的論文。主要實現目標檢測。

這篇論文的主要是對Two-stage目標檢測的Region Proposal階段需要提取的anchor boxes上提出了一些觀點。認為目前的boxes上的演算法有如下drawbacks:

  • 需要選取大量的anchor box來保證有足夠的與gt滿足overlap閾值的anchor box。因為anchor box數量大,相應的就造成正負樣本的不均衡。
  • anchor boxes的使用引入了許多的超參。include how many boxes, what sizes, and  what aspect ratios。影響模型的訓練和推斷速率。

2、論文的關鍵點

  • 論文就提出one-stage的檢測方法,捨棄傳統的anchor boxes思路,提出CornerNet模型來預測目標邊界框左上角和右下角一對頂點。使用單一卷積模型來生成熱點圖(heatmap)和連線向量(embedding vector)。連線向量是用來group a pair of corners that belong to the same object。
  • Corner pooling:是論文提出的一個novel component。可以幫助卷積網路更好的定位bounding boxes的corner,相當於是為了更好的計算出corner位置而提出的一個自己的方法。
  • 使用了Focal loss,動態的去調整每個anchor box的權值,能對正負樣本有一個很好的權衡作用。是模型在訓練時可以更好的專注難分類的樣本。

 

這裡有一個作者對原始位置檢測和論文提出的位置檢測方法的對比  [這個地方有些疑惑]:

  • 首先,對於原來的box,需要得到box center的位置,而這個位置的獲取,依賴於all sides of the object,而論文的方法定位一個corner只需要2 sides,因此會更加容易,加上corner pooling後會更加容易。
  • 其次,corners provide a more efficient way of densely discretizing the space of boxes:we just need O(wh) corners to  represent O(w^2h^2
    )  possible anchor boxes。

3、CornerNet details and loss

detecting Corners:

  • backbone:使用的是hourglass network,hourglass network為沙漏型網路,論文中使用了兩個hourglass module來作為backbone。
  • 在backbone後跟著兩個prediction modules,one for top-left corners, the other for bottom-right corners,每個module都有自己的corner pooling module來對prediction module出來的結果進行pool,最終輸出heatmaps, embeddings, offsets。
  • 預測時有兩個heatmap sets,分別是對top-left corners和bottom-right corners的。每個heatmap的輸出大小為HxWxC,C為num_channel,是類別數,不包括背景類。每一個channel的heapmap都是一個binary mask indicating the locations of the corners for a class。
  • 對於每一個corner,一個gt corner只會對應於一個positive location,而其餘的是negative location,對於a pair of false corner detections,如果他們與各自的gt location很接近,那麼也可以產生一個比較好的box能與gt有較高的IoU,這樣的話。因此論文選擇在gt corner的一個radius內,負樣本的loss會在這個範圍內有一個衰減的計算。最終在radius邊緣時,此時的負樣本對loss的貢獻則為0。上述radius是由目標的size來決定(一對使用radius的corner點,可以產生IoU達到閾值0.7的bounding box)。

        

  • 此處的focal loss為:其中N為一個image中的目標數,p_{cij}是predicted heatmap上位置(i, j)的的score,y_{cij}就是gt heatmap augmented with the unnormalized Gaussians。[此處個人理解是,在對於位置的迴歸來說,原始的two-stage的網路都是對正樣本anchor box位置進行一個與gt的距離計算作為loss,loss減少,使anchor box和gt的位置座標拉近,而這裡,是對其進行一個是不是的計算,將gt的corner位置作為我的理想predicted location,來計算loss,是在gt corner位置上的score可以儘可能接近1。而本應該其他位置全為負樣本,即y_{cij}為0,來作為一個負樣本計算的,但是考慮到上述的一個radius內的情況,我們另在此radius範圍內的y_{cij}符合一個高斯分佈來衰減,從而使loss的設計更加符合真實的情況]

       

  • 許多網路會使用下采樣層來將全域性資訊聚集起來同時減少了記憶體需要。這樣就使得輸出的size比原始image size小,因此,a location(x, y) in the image is mapped to  the location (\left \lfloor \frac{x}{n} \right \rfloor\left \lfloor \frac{y}{n} \right \rfloor) in the heatmap where n is the downsampling factor。當我們從heatmap映射回原始的image的時候,會損失一些精度,這個就會對一些小bbox與其的gt的IoU造成影響。故在這裡提出了一個方法來解決這個問題(這個是在映射回原圖之前的調整):

      

 

Grouping Corners:

這部分主要是對top-left和bottom-right的匹配過程的loss優化,來絕對一對corner是否屬於一個bounding box。這個是對每一個detected corner產生一個embedding vector,這個embedding vector是用來進行一個相互之間的embedding vector相似性計算,所以其真實值就可以忽略掉。

下面的L_{pull}就是N個object的所有predicted corner之間的相似度計算。而L_{push}是令不同目標之間的corner相似度儘可能要小。

     

Corner Pooling:

corner pooling是paper自己提出來的為了適應corner選取的一個pool方法。corner pooling最終來預測heatmaps, embedding, offsets。

其核心思想就是如fig6,例是一個top-left corner pooling,首先在選取的從右至左的資料中,在從右到左的推進方向,都令其輸出為右到目前位置的最大值。第二個從下至上的也是一樣的操作。最終進行一個畫素的求和。[這部分是在三個預測值之前的部分,所以我理解這部分的操作可能是如果在這個範圍內有目標的話,那麼這樣的操作會令top-left值比較大,於是就可以理解成為了一個可能的top-left 預測點。]

      

        

最終loss:

   

 

4、experiments details

在test的時候,使用simple post-processing algorithm來產生bounding boxes from heatmaps, embeddings and offsets。首先對corner heatmaps使用3x3的max pooling layer來進行NMS的處理。然後挑選top-100的top-left和top-100的bottm-right corners from heatmaps。

Ablation result: