【目標檢測_keypoint based 方法系列】基於關鍵點的目標檢測

持續添加哦~

一、CornerNet

目前的單階段檢測因爲引入了anchor機制,獲得可以和兩階段檢測相媲美的精度的同時,有較高的效率。單階段檢測器在輸入圖像上放置了密集的 anchor ,並通過微調和迴歸 box 尺寸來得到最終的預測。

使用anchor的方法的缺點:

  • 正負樣本不均衡:大部分檢測算法的anchor數量都成千上萬,(DSSD中使用了多於40k個anchor,RetinaNet 中使用了多於100k個anchor)但是一張圖中的目標數量並沒有那麼多,這就導致正樣本數量會遠遠小於負樣本,因此有了對負樣本做欠採樣以及 focal loss等算法來解決這個問題。

  • 引入更多的超參數,比如anchor的數量、大小和寬高比等。

CornerNet 的特點:

一種新的、無anchor的單階段目標檢測方法

檢測 b-box 的左上和右下角的角點

使用單個卷積神經網絡來預測同一目標類別(category)中的所有實例的“左上”角點的和 heatmap、右下角點的 heatmap、每個檢測到角點的 embedding vector。嵌入向量用於對屬於同一目標的 corner 進行分組,也就是該網絡的訓練目標是實現對同一目標的“左上”和“右下”角點進行匹配,將兩者預測得到相同的嵌入向量。

本文的方法很大程度地簡化了網絡的輸出,並且無需設計相應的 anchor。

本文方法靈感源於Newell等人的文章(2017)中的多人姿態估計上下文中關聯嵌入方法,結構如圖1所示。

在這裏插入圖片描述

圖1 將目標檢測爲一對b-box的角點

利用卷積網絡,對所有的左上角點生成一幅熱力圖,對所有右下角點生成一幅熱力圖,並且對所有檢測到的角點生成一個嵌入式向量。訓練網絡將屬於同一目標的角點預測成相同的嵌入式向量。

文章認爲,檢測角點效果比檢測b-box中心點或region proposal 方法更好的原因有兩個:

  • b-box 的中心確定後也很難確定b-box的位置,因爲其基於目標的四個邊,而定位角點只基於兩個邊,更簡單。且使用 corner pooling使其更加簡單,因爲該pooling方法能夠對corner的先驗知識進行編碼。

  • 角點能夠提供更有效的方法來密集的離散化box空間,只需要 O(wh)O(wh) 個角點就可以表示 O(w2h2)O(w^2h^2) 個 anchor boxes。

爲了平衡正負樣本,在訓練中使用了改進的 focal loss:
在這裏插入圖片描述
爲了提高 corner point 的檢測準確性,還添加了一個和類別無關的 offset map,用來彌補下采樣過程引起的分辨率損失。 offset map 訓練過程使用了平滑的 L1 loss:
在這裏插入圖片描述
Corner Pooling:
在這裏插入圖片描述
一般情況下,物體的角點不會在物體上,我們在尋找物體的角點時,如左上角,一般會先向左看,找到最靠左的點,然後向上看,找到最靠上的點,那麼這兩個值組成的點便是左上角點;右下角同理。

在這裏插入圖片描述
在這裏插入圖片描述

二、ExtremeNet

Bottom-up Object Detection by Grouping Extreme and Center Points

論文中說,cornernet檢測的左上和右下角點雖然取得了較好的成績,但是這兩個點並不是物體上的特徵點,所以論文提出檢測物體的“最左”、“最右”、“最上”和“最下”四個點,這四個點在圖像特徵上,更有意義,網絡更好學。

Extremnet檢測思路:通過標準的關鍵點檢測網絡來檢測出四個極值點和1箇中心點,通過幾何關係對提取到的關鍵點進行分組,一組極值點(5個)對應一個檢測結果。

是的目標檢測問題轉化成了一個純粹的基於目標的外觀特徵的關鍵點估計問題,巧妙的避開了區域分類和隱含特徵的學習。

Extreme and center points

傳統標註使用矩形框標註目標,而矩形框一般會用左上角和右下角兩個點表示。

而在ExtremeNet中,使用四點標註法,即一個目標用上下左右四個方向上的極值點來表示。額外的,通過這四個點可以計算出該目標的中心座標。

關鍵點檢測:

使用fully convolutional encoder-decoder network預測一個多通道heatmap,每個通道都對應一個類別的關鍵點。

使用HourglassNetwork作爲backbone,對每張heatmap進行加權逐點邏輯迴歸,加權的目的是爲了減少ground truth周圍的虛警懲罰。

三、CenterNet

由於傳統的anchor-based方法需要預設大量的 proposal 並且需要類似於 NMS 這樣的後處理,大大增加了其處理複雜度。

目前已經出現的 anchor-free 的目標檢測方法,比如 cornernet 和 extremenet,都在檢測效率上有了一定突破,但其需要將點進行組對兒,cornernet 學習關鍵點的嵌入式表達,來把距離最近的點組對兒。extremenet 也需要對點進行組對兒。這會嚴重拉低算法的運行速度。

centernet 只檢測目標的中心點,無需後續組對兒操作。

centernet 的方法接近於 anchor-based 的單階段方法,中心點可以被看成一個形狀未知的 anchor(圖3所示),但還有一些區別:

  • centernet 在每個物體的中心位置分配 “anchor”,而非依據IoU來分配
  • 每個目標只有一個 “positive anchor”,不需要 NMS 後處理
  • centernet的輸出是四倍下采樣後的結果,一般的目標檢測器輸出的是 16 倍下采樣的結果,所以 centernet 不需要多個 anchor。

在這裏插入圖片描述

3.1 關鍵步驟:

輸入:

  • IRW×H×3I\in R^{W\times H \times 3} ,大小爲 W 和 H 的三維輸入圖像

輸出:

  • Y^[0,1]WR×HR×C\hat{Y}\in[0,1]^{\frac{W}{R}\times\frac{H}{R}\times C},大小爲 W×H×CW \times H \times C 的關鍵點熱力圖,其中,R 是輸出的特徵圖的步長,C 是關鍵點類型個數。
  • 當預測 Y^x,y,c=1\hat{Y}_{x,y,c}=1 時,表示檢測到的是關鍵點
  • 當預測 Y^x,y,c=0\hat{Y}_{x,y,c}=0 時,表示檢測到的是背景

backbone:

  • Hourglass
  • ResNet
  • DLA

3.2 關鍵點檢測網絡:

1、真實標籤怎麼得到:

  • 對類別 c 中的每個真實關鍵點 pR2p \in R^2,計算一個低分辨率(也就是下采樣4倍後的)的對應點 pˇ=pR\check{p}=\lfloor \frac{p}{R} \rfloor
  • 之後將所有真實關鍵點使用高斯核 Yxyc=exp((xpˇx)2+(ypˇy)22σp2)Y_{xyc}=exp(-\frac{(x-\check{p}_x)^2+(y-\check{p}_y)^2}{2\sigma_p^2}) 投射到熱力圖上,其中 σp\sigma_p 爲與目標大小相關的標準差。
  • 如果同一類別的兩個高斯分佈重合了,我們使用逐個像素點取最大值的方法來處理。

2、訓練目標函數:像素級邏輯迴歸的 focal loss
在這裏插入圖片描述
在這裏插入圖片描述
其中:

  • α\alphaβ\beta 分別爲focal loss 的超參數,分別設置爲2和4。
  • NN 是圖像中的關鍵點個數,使用其進行歸一化相當於將所有正例 focal loss 規範化爲1。
  • otherwise 情況其實表示 YxyzY_{xyz} 爲負樣本,也就是其值爲 (0,1) 之間,左右兩邊不包含,也就是高斯分佈上的值。

該 Focal loss 函數是針對 CenterNet 修正而來的損失函數,和 Focal Loss類似,對於easy example的中心點,適當減少其訓練比重也就是loss值.

(1Y^xyz)α(1-\hat{Y}_{xyz})^{\alpha}(Y^xyz)α(\hat{Y}_{xyz})^{\alpha} 的作用:

  • 限制 easy example 導致的梯度更新被易區分的點所主導的問題

  • Yxyz=1Y_{xyz}=1 的時候, 假如 Y^xyz\hat{Y}_{xyz} 接近1的話,說明這個是一個比較容易檢測出來的點,那麼 (1Y^xyz)α(1-\hat{Y}_{xyz})^{\alpha} 就相應比較低了。

  • Yxyz=1Y_{xyz}=1 的時候,而Y^xyz\hat{Y}_{xyz} 接近0的時候,說明這個中心點還沒有學習到,所以要加大其訓練的比重,因此 (1Y^xyz)α(1-\hat{Y}_{xyz})^{\alpha} 就會很大, α\alpha是超參數,這裏取2。

  • Yxyz=0Y_{xyz}=0 的時候,預測的 Y^xyz\hat{Y}_{xyz} 理論上也要接近於0,但如果其預測的值 Y^xyz\hat{Y}_{xyz} 接近於1的話, (Y^xyz)α(\hat{Y}_{xyz})^{\alpha} 的值就會比較大,加大損失,即增加這個未被正確預測的樣本的損失。

(1Yxyz)β(1-Y_{xyz})^{\beta} 的作用:

  • 該項是爲了平衡正負樣本(弱化了實際中心點周圍的其他負樣本的損失比重,加強了遠離實際中心點周圍的負樣本的損失比重,因爲實際的物體只有一箇中心點,其餘都是負樣本,但負樣本相較於中心點來說顯得有很多很多)
  • 該項和預測的結果沒有關係,只和距離中心點的遠近有關係,距離中心點越近,真值 YxyzY_{xyz} 越接近於1,而 (1Yxyz)β(1-Y_{xyz})^{\beta} 會越小,即離中心越近的點的損失會變小,會更加註重離中心較遠的點的情況。
  • YxyzY_{xyz} 是高斯核生成的中心點,且中心點上 Yxyz=1Y_{xyz}=1, 對於中心點周圍的點,離中心點越遠,則其值會慢慢下降爲0。當越接近於中心點時, YxyzY_{xyz} 會越大,則 (1Yxyz)β(1-Y_{xyz})^{\beta} 的值會越小,反之該值會越大。
  • 即對離中心點越近的點,假設 YxyzY_{xyz} 的值爲0.9(otherwise情況),但預測得到其爲接近於1,那顯然是不對的,應該預測爲0纔對。此時 (Y^xyz)α(\hat{Y}_{xyz})^{\alpha} 的值很大,loss會變大,但因爲其離中心很近,預測的結果接近於1也情有可原,所以用 (1Yxyz)β(1-Y_{xyz})^{\beta} 來使得loss減小一些。
  • 對於離中心點越遠的點,假設 YxyzY_{xyz} 的值爲0.1(otherwise情況),但預測得到其爲接近於1,那顯然是不對的,要用 (Y^xyz)α(\hat{Y}_{xyz})^{\alpha} 來懲罰,如果預測的接近於0,那麼差不多了,(Y^xyz)α(\hat{Y}_{xyz})^{\alpha} 值就會很小。而 (1Yxyz)β(1-Y_{xyz})^{\beta} 的值會較大,也就是使得離中心點較遠的點的損失比重較大,越近的點的損失比重越小,相當於弱化了實際中心點周圍的其他負樣本的損失比重,加強了遠離實際中心點周圍的負樣本的損失比重。

爲了彌補輸出步長所造成的離散化損失,我們對每個中心點都額外的預測了 local offset O^RWR×HR×2\hat{O}\in R^{\frac{W}{R}\times\frac{H}{R}\times 2}

所有的類別都共享相同的預測 offset,該offset是用L1 loss訓練的:
在這裏插入圖片描述
僅僅在關鍵點位置 pˇ\check{p} 上實行有監督行爲,其他位置被忽略。

3.3 目標大小的迴歸

(x1(k),y1(k),x2(k),y2(k))(x_1^{(k)},y_1^{(k)},x_2^{(k)},y_2^{(k)}) 表示類別爲 ckc_k個的第 kk 個目標的b-box,其中心點在 pk=(x1(k)+x2(k)2,y1(k)+y2(k)2)p_k=(\frac{x_1^{(k)}+x_2^{(k)}}{2},\frac{y_1^{(k)}+y_2^{(k)}}{2})

使用關鍵點估計 Y^\hat{Y} 來預測所有中心點,另外,對每個目標 kk 都回歸其目標大小 sk=(x2(k)x1(k),y2(k)y1(k))s_k=(x_2^{(k)}-x_1^{(k)}, y_2^{(k)}-y_1^{(k)})

爲了限制計算量,對所有目標類別都使用單個尺度的預測 S^RWR×HR×2\hat{S}\in R^{\frac{W}{R}\times\frac{H}{R}\times 2}

在中心點上使用和(2)相同的 L1 loss 來優化目標的尺寸:
在這裏插入圖片描述
沒有對尺度進行規範化,且直接使用原始的像素座標,直接使用常量 λsize\lambda_{size} 來平衡 loss,所以,最終的整體 loss 如下:
在這裏插入圖片描述
設定:

  • λsize=0.1\lambda_{size}=0.1λoff=1\lambda_{off}=1
  • 使用一個整體的網絡來預測關鍵點 Y^\hat{Y}、偏移 O^\hat{O}、尺寸 S^\hat{S}
  • 該網絡在每個位置一共預測 C+4C+4 個輸出(C:C個熱力圖,每個代表一個類別,4:2個 wh,2個 offset)
  • 所有的輸出共享相同的全卷積backbone網絡
  • 從backbone輸出的特徵要分別經過 3x3 卷積、Relu、1x1卷積過程
  • 圖4展示了網絡的輸出
  • 圖5是細節補充
    在這裏插入圖片描述
    在這裏插入圖片描述

3.4 從點到b-box:

推理階段,首先抽取每個類別熱力圖的峯值,檢測所有值大於或等於其相鄰8個鄰域的響應,保留前100個峯值。

P^c\hat{P}_c 表示類別 cc 中,檢測到的 nn 箇中心點 P^=(x^i,y^i)i=1n\hat{P}={(\hat{x}_i, \hat{y}_i)}_{i=1}^n

每個關鍵點是由整數座標 (xi,yi)(x_i,y_i) 給出的,將關鍵點值 Y^xiyic\hat{Y}_{x_iy_ic} 作爲檢測置信度的衡量,並且在位置上產生一個b-box:

在這裏插入圖片描述
其中:

  • (δx^i,δy^i)=O^x^i,y^i(\delta \hat{x}_i, \delta \hat{y}_i) = \hat{O}_{\hat{x}_i, \hat{y}_i} 是預測的偏移
  • (w^i,h^i)=S^x^i,y^i(\hat{w}_i,\hat{h}_i)=\hat{S}_{\hat{x}_i,\hat{y}_i} 是預測大小
  • 所有的輸出都是直接從關鍵點預測的結果得到的,沒有使用 IoU 或 NMS 等後處理
  • 峯值關鍵點提取是一種有效的NMS替代方法,可以在 device 上使用3×3 max pooling 操作高效地實現。

3.5 Centernet 特點總結

優點:

  • 設計模型的結構比較簡單,不僅對於two-stage,對於one-stage的目標檢測算法來說該網絡的模型設計也是優雅簡單的。

  • 該模型的思想不僅可以用於目標檢測,還可以用於3D檢測和人體姿態識別,雖然論文中沒有是深入探討這個,但是可以說明這個網絡的設計還是很好的,我們可以藉助這個框架去做一些其他的任務。

  • 雖然目前尚未嘗試輕量級的模型,但是可以猜到這個模型對於嵌入式端這種算力比較小的平臺還是很有優勢的。

不足:

  • 在實際訓練中,如果在圖像中,同一個類別中的某些物體的GT中心點,在下采樣時會擠到一塊,也就是兩個物體在GT中的中心點重疊了,CenterNet對於這種情況也是無能爲力的,也就是將這兩個物體的當成一個物體來訓練(因爲只有一箇中心點)。同理,在預測過程中,如果兩個同類的物體在下采樣後的中心點也重疊了,那麼CenterNet也是隻能檢測出一箇中心點,不過CenterNet對於這種情況的處理要比faster-rcnn強一些的,具體指標可以查看論文相關部分。

  • 有一個需要注意的點,CenterNet在訓練過程中,如果同一個類的不同物體的高斯分佈點互相有重疊,那麼則在重疊的範圍內選取較大的高斯點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章