看了一堆YOLOV5相關(guān)的博客潦蝇,很少有講關(guān)于YOLOV5訓(xùn)練過程中的正負(fù)標(biāo)簽分配法則的,接下來讓我簡單闡述一下YOLOV5在訓(xùn)練過程中是如何對標(biāo)簽進(jìn)行分配的深寥。
- 跨anchor預(yù)測
假設(shè)一個GT框落在了某個預(yù)測分支的某個網(wǎng)格內(nèi)攘乒,該網(wǎng)格具有3種不同大小anchor,若GT可以和這3種anchor中的多種anchor匹配惋鹅,則這些匹配的anchor都可以來預(yù)測該GT框则酝,即一個GT框可以使用多種anchor來預(yù)測。
具體方法:
不同于IOU匹配负饲,yolov5采用基于寬高比例的匹配策略堤魁,GT的寬高與anchors的寬高對應(yīng)相除得到ratio1,anchors的寬高與GT的寬高對應(yīng)相除得到ratio2返十,取ratio1和ratio2的最大值作為最后的寬高比妥泉,該寬高比和設(shè)定閾值(默認(rèn)為4)比較,小于設(shè)定閾值的anchor則為匹配到的anchor洞坑。
anchor_boxes=torch.tensor([[1.25000, 1.62500],[2.00000, 3.75000],[4.12500, 2.87500]]) #[長盲链,寬]
gt_box=torch.tensor([5,4])
ratio1=gt_box/anchor_boxes
ratio2=anchor_boxes/gt_box
ratio=torch.max(ratio1, ratio2).max(1)[0]
print(ratio)
anchor_t=4
res=ratio<anchor_t
print(res)
結(jié)果:
tensor([4.0000, 2.5000, 1.3913])
tensor([False, True, True])
- 跨grid預(yù)測
假設(shè)一個GT框落在了某個預(yù)測分支的某個網(wǎng)格內(nèi),則該網(wǎng)格有左迟杂、上刽沾、右、下4個鄰域網(wǎng)格排拷,根據(jù)GT框的中心位置侧漓,將最近的2個鄰域網(wǎng)格也作為預(yù)測網(wǎng)格,也即一個GT框可以由3個網(wǎng)格來預(yù)測监氢。
- 跨分支預(yù)測
假設(shè)一個GT框可以和2個甚至3個預(yù)測分支上的anchor匹配布蔗,則這2個或3個預(yù)測分支都可以預(yù)測該GT框。即一個GT框可以在3個預(yù)測分支上匹配正樣本浪腐,在每一個分支上重復(fù)anchor匹配和grid匹配的步驟纵揍,最終可以得到某個GT 匹配到的所有正樣本。