算法探究-3.centerNet(原理講解)


centerNet的 創新點:

這是一種不需要使用anchor的網絡結構,網絡的輸出使用的由3個head層所決定,第一個輸出類別數,第二個輸出中心點位置,第三個輸出偏置項

(hm): Sequential(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 80, kernel_size=(1, 1), stride=(1, 1))
)
(wh): Sequential(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 2, kernel_size=(1, 1), stride=(1, 1))
)
(reg): Sequential(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 2, kernel_size=(1, 1), stride=(1, 1))
)

我們先放置一張檢測結果來進行演示

假設輸入一張圖的大小是640x640, 下采樣的比例是4的話,那么卷積圖的尺度是160x160

損失函數談論

中心點預測損失函數 

這里采用的也是focal loss的思想

第一種情況: 當是目標物體時,當[公式] 接近1的話,這個物體容易被識別出來,即(1-[公式] )^a的值越小,即損失值也越小,使得權重偏向於更難訓練的目標

第二種情況: 1.當不是目標物體時,假如此時的概率值是0.9,因為這個時候的概率值應該是0才對,我們使用([公式] )^a進行懲罰,但是由於可能是中心點附件的位置,所以使用(1-Yxyc)^P 進行安慰一下

          2.當不是目標物體時,假如此時的概率值是0.1, 對於([公式] )^a進行獎勵,使用(1-yxyc)^P進行懲罰,即離的越遠,損失函數越大,離的越近,損失函數越小,這相當於弱化了實際中心點其他負樣本的損失比重,相當於處理正負樣本不平衡。

目標預測偏置損失函數

由於中心點直接采用的是特征圖的中心點,因此在實際的縮放過程中,應該是需要有關於中心點位置的偏移量

 

 

 假設我們有一張640和320的圖片,resize成512,512, 由於網絡下采樣的比例是4,因此縮放為128, 128,如果此時實際的中心是[98.97667,2.3566666],那么對應位置上的中心點的位置是98, 2,  由此可知,此時的偏移量應該是0.97667, 0.3566666,這里使用的就是L1 loss, 這個式子中 [公式] 是我們預測出來的偏置,而 [公式] 則是在訓練過程中提前計算出來的數值

目標預測長寬損失函數

為了減少回歸的難度,這里使用 [公式] 作為預測值,使用L1損失函數,與之前的 [公式] 損失一樣:

 

 

總的損失函數表達式

[公式]

在論文中 [公式] ,然后 [公式] ,論文中所使用的backbone都有三個head layer,分別產生[1,80,128,128]、[1,2,128,128]、[1,2,128,128],也就是每個坐標點產生 [公式] 個數據,分別是類別以及、長寬、以及偏置。

 

推理階段:

在一階和二階檢測識別網絡中,由於存在大量的anchor,因此很有可能存在一個關鍵點,有多個大於閾值的檢測結果,但是這里我們一個特征點只對應一個檢測目標,因此我們使用3x3的maxPool,判斷當前的點是否比周圍其他8個點都大,從中挑選出大於閾值的前100個點,作為最后的檢測結果

最終的檢測結果 閾值大於0.3的結果

 

不添加閾值的,前100個結果

 

 熱力圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM