SSD的損失函式設計
這篇部落格介紹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起碼有一個錨框和其匹配。
基於以上描述,匹配策略有如下兩條:
1.為Ground Truth Box匹配錨框
首先,應保證每個Ground Truth Box起碼匹配一個錨框,所以先為Ground Truth Box錨框。即:
為每一個ground truth box尋找和其有最大IOU(論文中叫jaccard overlap)的錨框,把Ground Truth Box與該錨框匹配。(不用擔心會沒有錨框覆蓋到Ground Truth Box,因為錨框的生成幾乎是逐畫素的)
2.為錨框匹配Ground Truth Box
完成規則1後,對剩餘的還沒有配對的錨框與任意一個ground truth box嘗試配對,只要兩者之間的IOU大於閾值(一般是0.5),那麼該錨框也與這個ground truth進行匹配。
按照這樣的規則匹配錨框,可能會導致某一Ground Truth Box同時匹配了多個錨框,這不要緊;我們只要保證錨框只匹配一個Ground Truth Box即可(舉一個極端例子,如果每個錨框都能和所有Ground Truth Box匹配,那我們就不用訓練了)。
3.匹配結果思考
1.SSD會生成大量的錨框(遍佈於整張影像),而Ground Truth Box只佔據了影像的很小一部分割槽域,這注定了絕大部分錨框都會與背景框匹配。這樣的錨框被稱作負例(negative examples)。
2.如果某個Ground Truth Box A所對應最大IOU的錨框小於閾值,並且所匹配的錨框卻與另外一個Ground Truth Box B的IOU大於閾值,那麼該錨框應該選A,因為首先要確保每個ground truth一定有一個prior bbox與之匹配。
4.示例
影像中有7個紅色的框代表先驗框,黃色的是ground truths,在這幅影像中有三個真實的目標。按照前面列出的步驟將生成以下匹配項:
二.損失函式
1.損失函式
SSD將總體的目標損失函式定義為 定位損失(loc)和置信度損失(conf)的加權和,見公式(1):
其中N是匹配到GT(Ground Truth)的prior bbox數量,如果N=0,則將損失設為0;而 α 引數用於調整confidence loss和location loss之間的比例,預設 α=1。
2.confidence loss
confidence loss是在多類別置信度©上的softmax loss。其中i指代搜尋框序號,j指代真實框序號,p指代類別序號,p=0表示背景。其中
x
i
j
P
x^P_{ij}
xijP中取i表示第i個錨框匹配到第 j 個GT box,而這個GT box的類別為 p 。
C
i
P
C^P_i
CiP表示第i個搜尋框對應類別p的預測概率。此處有一點需要關注,公式前半部分是正樣本(Pos)的損失,即分類為某個類別的損失(不包括背景),後半部分是負樣本(Neg)的損失,也就是類別為背景的損失。
3.location loss
而location loss(位置迴歸)是典型的
s
m
o
o
t
h
L
1
smooth _{L1}
smoothL1 loss。
其中,l為預測框,g為ground truth。(cx,xy)為補償(regress to offsets)後的預設框d的中心,(w,h)為預設框的寬和高。
關於為什麼要使用
s
m
o
o
t
h
L
1
smooth _{L1}
smoothL1 loss,強烈建議閱讀知乎中點贊最高的回答,清晰易懂,能學到很多!
https://www.zhihu.com/question/58200555
三.難負例挖掘(Hard negative mining)
值得注意的是,一般情況下negative prior bboxes數量 >> positive prior bboxes數量,直接訓練會導致網路過於重視負樣本,預測效果很差。為了保證正負樣本儘量平衡,我們這裡使用SSD使用的線上難例挖掘策略(hard negative mining),即依據confidience loss對屬於負樣本的prior bbox進行排序,只挑選其中confidience loss高的bbox進行訓練,將正負樣本的比例控制在positive:negative=1:3。其核心作用就是隻選擇負樣本中容易被分錯類的困難負樣本來進行網路訓練,來保證正負樣本的平衡和訓練的有效性。
舉個例子:假設在這 441 個 prior bbox 裡,經過匹配後得到正樣本先驗框P個,負樣本先驗框 441−P 個。將負樣本prior bbox按照prediction loss從大到小順序排列後選擇最高的M個prior bbox。這個M需要根據我們設定的正負樣本的比例確定,比如我們約定正負樣本比例為1:3時。我們就取M=3P,這M個loss最大的負樣本難例將會被作為真正參與計算loss的prior bboxes,其餘的負樣本將不會參與分類損失的loss計算。
參考:
https://datawhalechina.github.io/dive-into-cv-pytorch/#/chapter03_object_detection_introduction/3_5
相關文章
- 損失函式函式
- 3D高斯損失函式(1)單純損失函式3D函式
- Pytorch中的損失函式PyTorch函式
- DDMP中的損失函式函式
- 例項解釋NLLLoss損失函式與CrossEntropyLoss損失函式的關係函式ROS
- 損失函式綜述函式
- Triplet Loss 損失函式函式
- Pytorch 常用損失函式PyTorch函式
- PyTorch:損失函式loss functionPyTorch函式Function
- TensorFlow損失函式專題函式
- 無需手工設計,從零開始搜尋損失函式函式
- 詳解常見的損失函式函式
- 談談交叉熵損失函式熵函式
- 邏輯迴歸 損失函式邏輯迴歸函式
- 瞭解GAN背後的設計,訓練,損失函式和演算法函式演算法
- 聊聊損失函式1. 噪聲魯棒損失函式簡析 & 程式碼實現函式
- 2.3邏輯迴歸損失函式邏輯迴歸函式
- 理解神經網路的不同損失函式神經網路函式
- TensorFlow筆記-06-神經網路優化-損失函式,自定義損失函式,交叉熵筆記神經網路優化函式熵
- 邏輯迴歸損失函式(cost function)邏輯迴歸函式Function
- 圖示Softmax及交叉熵損失函式熵函式
- 焦點損失函式 Focal Loss 與 GHM函式
- SSD-函式用法函式
- 邏輯迴歸:損失函式與梯度下降邏輯迴歸函式梯度
- 人臉識別損失函式疏理與分析函式
- 3D高斯損失函式(2)新增BA最佳化和結構損失3D函式
- 一種基於均值不等式的Listwise損失函式函式
- tensorflow2 自定義損失函式使用的隱藏坑函式
- 換個角度看GAN:另一種損失函式函式
- 神經網路基礎部件-損失函式詳解神經網路函式
- 損失函式:最小二乘法與極大似然估計法函式
- 深度人臉識別中不同損失函式的效能對比函式
- 梯度提升二三事:怎麼來自定義損失函式?梯度函式
- 機器學習者都應該知道的五種損失函式!機器學習函式
- 函式設計函式
- 【機器學習基礎】常見損失函式總結機器學習函式
- 函式程式設計函式程式設計
- 損失函式是學習的指揮棒——記一次工作實踐函式