YOLOV8和YOLOV5对比 | 你好陌生人
Tell
Anything can I help you ?
Menu
The menu of my blog
log out
log out

YOLOV8和YOLOV5对比

YOLOV8和YOLOV5对比

正负样本匹配策略

yolov5

yolov5:采用anchor-base策略

1.跨anchor预测

在yolov3中一个GT只能由一个anchor负责预测具体是哪个anchor是看哪个anchor与这个GT的IOU最大。
在yolov5中一个GT可以由多个anchor负责预测,具体方法如下:
$
\frac {GT宽高}{anchors宽高}=ration_1
$

$
\frac {anchors宽高}{GT宽高}=ration_2
$
取ratio1和ratio2的最大值作为最后的宽高比,该宽高比和设定阈值(默认为4)比较,小于设定阈值的anchor则为匹配到的anchor。
给出一位老哥的代码比较能直观的理解这个

1
2
3
4
5
6
7
8
9
10
11
12
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
#这里的max最后取[0]代表着取值[1]是索引
ratio=torch.max(ratio1, ratio2).max(1)[0]
print(ratio)

anchor_t=4
res=ratio<anchor_t
print(res)

2.跨grid预测

在v5之前的yolo都是假设GT落入某个预测分支的某个网格(预测分支在这里的意思就是yolo的三个检测头),该网格有左、上、右、下4个邻域网格,根据GT框的中心位置,将最近的2个邻域网格也作为预测网格,也即一个GT框可以由3个网格来预测。
(偷个别人的例子)
计算例子:
GT box中心点处于grid1中,grid1被选中,为了增加增样本,grid1的上下左右grid为候选网格,因为GT中心点更靠近grid2和grid3,grid2和grid3也作为匹配到的网格,根据上步的anchor匹配结果,GT与anchor2、anchor3相匹配,因此GT在当前层匹配到的正样本有6个,分别为:grid1_anchor2,grid1_anchor3,grid2_anchor2,grid2_anchor3,grid3_anchor2,grid3_anchor3。

3.跨分支预测

原先一个GT只能由一个分支进行预测,现在我们在每个分支上进行anchor的匹配和grid的匹配,只要满足上述的条件即为正样本。
详细的匹配策略可以根据这位大佬的debug一步步进行
[大佬教程]:https://blog.csdn.net/u013066730/article/details/126969286

yolov8

yolov8采用的是anchor-free,其核心思路就是每个grid作为一个anchor,
$$
\text { alignmetric }=s^\alpha +u^\beta
$$
其中,s 是预测类别分值,u 是预测框和真实框的ciou值,另外两个就是权重超参数了对于每个真实框,然后直接对align_metric匹配程度排序,选取topK个预测框作为正样本。