SSD的損失函式設計

2021-10-12 16:31:22 字數 2703 閱讀 7310

這篇部落格介紹ssd的損失函式設計。想要理解損失函式,需要從錨框與ground truth box 的匹配策略講起,此外,本文還闡述了ssd中描述的難例挖掘(hard negative mining)。 我們先從ssd中的匹配策略說起:

ssd會生成很多錨框,然後對比ground truth boxes 進行微調。相比於ground truth box, 錨框的數量是很巨大的。因此,怎樣進行錨框和ground truth box的匹配是乙個需要做好的精細活。

匹配的大體思路是把乙個錨框和它重疊程度最大的ground truth box進行匹配;如果沒有乙個ground truth box能和某個錨框匹配,那麼就把這個錨框和背景框匹配。此外,ssd中還要求每乙個ground truth box起碼有乙個錨框和其匹配。

基於以上描述,匹配策略有如下兩條:

首先,應保證每個ground truth box起碼匹配乙個錨框,所以先為ground truth box錨框。即:

為每乙個ground truth box尋找和其有最大iou(**中叫jaccard overlap)的錨框,把ground truth box與該錨框匹配。(不用擔心會沒有錨框覆蓋到ground truth box,因為錨框的生成幾乎是逐畫素的)

完成規則1後,對剩餘的還沒有配對的錨框與任意乙個ground truth box嘗試配對,只要兩者之間的iou大於閾值(一般是0.5),那麼該錨框也與這個ground truth進行匹配。

按照這樣的規則匹配錨框,可能會導致某一ground truth box同時匹配了多個錨框,這不要緊;我們只要保證錨框只匹配乙個ground truth box即可(舉乙個極端例子,如果每個錨框都能和所有ground truth box匹配,那我們就不用訓練了)。

1.ssd會生成大量的錨框(遍布於整張影象),而ground truth box只佔據了影象的很小一部分區域,這注定了絕大部分錨框都會與背景框匹配。這樣的錨框被稱作負例(negative examples)。

2.如果某個ground truth box a所對應最大iou的錨框小於閾值,並且所匹配的錨框卻與另外乙個ground truth box b的iou大於閾值,那麼該錨框應該選a,因為首先要確保每個ground truth一定有乙個prior bbox與之匹配。

影象中有7個紅色的框代表先驗框,黃色的是ground truths,在這幅影象中有三個真實的目標。按照前面列出的步驟將生成以下匹配項:

ssd將總體的目標損失函式定義為 定位損失(loc)和置信度損失(conf)的加權和,見公式(1):

其中n是匹配到gt(ground truth)的prior bbox數量,如果n=0,則將損失設為0;而 α 引數用於調整confidence loss和location loss之間的比例,預設 α=1。

再展示一張,給你乙個感性的認識:

來自:i jp

x^p_

xijp

​中取i表示第i個錨框匹配到第 j 個gt box,而這個gt box的類別為 p 。cip

c^p_i

cip​

表示第i個搜尋框對應類別p的**概率。此處有一點需要關注,公式前半部分是正樣本(pos)的損失,即分類為某個類別的損失(不包括背景),後半部分是負樣本(neg)的損失,也就是類別為背景的損失。

而location loss(位置回歸)是典型的smo

其中,l為**框,g為ground truth。(cx,xy)為補償(regress to offsets)後的預設框d的中心,(w,h)為預設框的寬和高。

使用s mo

othl

1smooth _

smooth

l1​ loss是為了防止在訓練早期出現梯度**。因為在訓練早期的時候,錨框和ground truth box 的偏差是很大的(即i-g會很大),這時候使用l

2l_2

l2​損失函式,損失的梯度會很大很大,造成訓練不穩定。至於smo

othl

1smooth _

smooth

l1​的表示式和詳細的說明,強烈建議閱讀知乎中點贊最高的回答,清晰易懂,能學到很多!

舉個例子:假設在這 441 個 prior bbox 裡,經過匹配後得到正樣本先驗框p個,負樣本先驗框 441−p 個。將負樣本prior bbox按照prediction loss從大到小順序排列後選擇最高的m個prior bbox。這個m需要根據我們設定的正負樣本的比例確定,比如我們約定正負樣本比例為1:3時。我們就取m=3p,這m個loss最大的負樣本難例將會被作為真正參與計算loss的prior bboxes,其餘的負樣本將不會參與分類損失的loss計算。

參考:

損失函式 損失函式 Hinge

本文討論hinge損失函式,該函式是機器學習中常用的損失函式之一。在機器學習中,hinge loss是一種損失函式,它通常用於 maximum margin 的分類任務中,如支援向量機。數學表示式為 其中 表示 輸出,通常都是軟結果 就是說輸出不是0,1這種,可能是0.87。表示正確的類別。其函式影...

gan網路損失函式 GAN的損失函式

理解生成對抗網路的關鍵在於理解gan的損失函式 js散度 gan實際是通過對先驗分布施加乙個運算g,來擬合乙個新的分布 如果從傳統的判別式網路的思路出發,只要選定合適的loss,就可以使生成分布和真實分布之間的距離盡可能逼近 kl散度經常用來衡量分布之間距離 但kl散度是不對稱的。不對稱意味著,對於...

常見損失函式 損失函式選擇方法

神經網路的學習通過某個指標表示現在的狀態,然後以這個指標為基準,尋找最優權重引數,這個指標就是損失函式 loss function 如上介紹,神經網路損失函式 loss function 也叫目標函式 objective function 的作用 衡量神經網路的輸出與預期值之間的距離,以便控制 調節...