目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用
如何定義正負樣本,和正負樣本在學習過程中loss計算起的作用
- 正負樣本定義
- 分類和回歸head如何學習和利用劃分后的正負樣本(loss如何計算)
- 正負樣本在分類中loss計算的處理
- 正樣本在bbox 回歸中的loss計算
在目標檢測中,經常說起正負樣本。本文仔細說一下,如何定義正負樣本;定義正負樣本之后,在loss計算中,正負樣本分別參與到classification head和regression head中,是如何使用正負樣本信息進行監督學習的。loss如何從正負樣本中,直接得到這兩類樣本對不同任務的損失函數和梯度更新。
正負樣本定義
在ROI RPN過程中,整個圖像中,正樣本的區域少,大部分是負樣本,因此,要處理好正負樣本不平衡問題,網絡提取特征,feature中的絕大多數都是negative,只有和ground truth,iou較高的區域,才被assign為positive sample。因此,2000個proposal,幾十個是positive,大多數是negative,極度不平衡。此時,就有一些正負樣本采樣的方法,提出來。anchor 和gt的最大iou,大于某個a閾值,為positive,anchor 和gt的最大iou 小于 某個b閾值,為negative。對于沒有被分配到anchor的gt,分配任何一個與他iou 大于某個c閾值的gt。確保每個gt都有一個或多個anchor對應。其他的是ignore。
positive,negative,比例1:3。這是roi的選擇,rpn階段,同理,rcnn階段,再進行樣本采樣。 然后,再進行特征提取,做classification和regression。讓模型學到有用的特征。
都會在loss里, 進行處理。負樣本,直接在loss里面。如果負樣本太多,雖然大多數容易分對,但是對loss的貢獻很大,導致正樣本難以處理。
對于目標檢測算法,主要需要關注的是對應著真實物體的正樣本,在訓練時會根據其loss來調整網絡參數。相比之下,負樣本對應著圖像的背景,如果有大量的負樣本參與訓練,則會淹沒正樣本的損失,從而降低網絡收斂的效率與檢測精度。
回歸方式:從點回歸,還是anchor回歸。anchor free, anchor based問題的一些區別:正負樣本定義;2.回歸分支中從point回歸還是從anchor回歸。從point回歸就是指的每個點預測距離4條邊的距離模式,而從anchor回歸是指的retinanet那種基于anchor回歸的模式。 說明正負樣本定義的不同是決定anchor-base和anchor-free的本質區別。
RetinaNet 特點:(1) 多尺度預測輸出;(2) 采用FPN結構進行多層特征圖融合。 網絡進行多尺度預測,尺度一共是5個,每個尺度共享同一個head結構,但是分類和回歸分支是不共享權重的。
在loss里面,調節,最著名的是focal loss。對預測概率高的,減少loss,對概率低的,增加loss。抑制簡單樣本對loss的貢獻,加大難樣本對loss的貢獻。難易樣本主要是通過調節loss處理。難分,易分。
分類和回歸head如何學習和利用劃分后的正負樣本(loss如何計算)
正負樣本在分類中loss計算的處理
- 只有正負樣本,參與到classification的loss計算中。用來監督classification head對正樣本,預測的類別為1,one-hot編碼下的位置為1,其余負樣本為0。由于ignore的是目標的邊緣和背景區域,難以學習和判斷,直接忽略掉,不進行loss的計算。只需要將正樣本,判斷為對應target;負樣本, 全部判斷為0就行。
RetinaNet FPN 這個結構,對label的編碼,是包含在正負樣本定義中的。
所有的anchor,計算和gt box的iou。如果與某個anchor與 gt box 的iou,大于0.5, 為正樣本1,
如果anchor 的最大iou,小于0.4,為負樣本,0。
如果anchor與gt的iou>0.4, <0.5,分配為ignore樣本,忽略樣本,-1。
一共9個anchor,分別是1:2, 2:1, 1:1, aspect ratio為1, 2^(1/3), 2^(2/3)
分類:
classification: focal loss, ignore cases where cls_tgt == -1,只負責0,1正負樣本的回歸。
pos_neg = cls_targets > -1
給正樣本打標簽的時候,是將1給到指定的那個class下,為1,其他為0。也就是一個grid位置下的相同形狀anchor,只有第i個類別的target為1,其他為0。
(num_classes, num_anchors, fmh, fmw) (4, num_anchors, fmh, fmw)Classification targets are defined as- 1 if IoU with the anchor box in [0.5, 1.0] (positive label)- -1 if IoU with the anchor box in [0.4, 0.5] (to be ignored in the loss)- 0 if IoU with the anchor box in [0.0, 0.4] (negative label)
正樣本在bbox 回歸中的loss計算
- Bounding Box的回歸,只負責處理positive正樣本的區域。regression head中,只對劃分成正樣本的,anchor box,進行 xywh的loss計算。只有正樣本,包含了所負責的檢測的目標,所以只需要將正樣本的anchor回歸做好,就能減少bbox 的regression loss。
回歸的target為:只負責1,pos樣本,也就是正樣本anchor的回歸。
regression: include all anchor boxes where any class is positive
pos_loc = cls_targets > 0 tx = (x - anchor_x) / anchor_wty = (y - anchor_y) / anchor_htw = log(w / anchor_w)th = log(h / anchor_h)
Classification targets are defined as- 1 if IoU with the anchor box in [0.5, 1.0] (positive label)- -1 if IoU with the anchor box in [0.4, 0.5] (to be ignored in the loss)- 0 if IoU with the anchor box in [0.0, 0.4] (negative label)
兩個gt box,分別是兩類,分別為 類別1,2。則編碼出來的,是與其 iou最大的anchor box,其負責這一類的分類與回歸。例如:第i個anchor,負責第1類,則[0, 1, 0] one hot 編碼。 第j個anchor 負責第2類,則[0, 0, 1]。只需要對應的[第i類,第幾個anchor,anchor的grid的位置h,anchor所在的grid位置w]=1。
計算loss的時候,只需要負責處理target為0,1樣本,忽略掉ignore樣本。
由于RetinaNet采用了Focal Loss進行正負樣本的平衡,所以沒有使用采樣的方法,來平衡樣本。
min_pos_iou=0,可以保證每個GT一定有對應的anchor負責預測。0.4以下是負樣本,0.5以上且是最大Iou的anchor是正樣本0.4~0.5之間的anchor是忽略樣本。其不需要正負樣本采樣器,因為其是通過平衡分類loss來解決的。
如果有用,記得點贊👍加收藏哦。!!!!
總結
以上是生活随笔為你收集整理的目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 亮开头成语有哪些啊?
- 下一篇: 500买猪,600卖出,700买回,80