文章目录
- 1 Max-IoU matching(YOLOv1~V3)
- 2 Multi-Anchor策略(YOLOv4)
- 3 基于宽高比的领域匹配策略(YOLOv5)
- 4 simOTA(Simple Optimal Transport Assignment)匹配策略(YOLOX, YOLOv6)
- 5 领域匹配+simOTA(YOLOv7)
- 6 TaskAlignedAssigner匹配策略(YOLOv8, YOLOv9)
- 参考资料
1 Max-IoU matching(YOLOv1~V3)
选取与gt的IOU最大的bounding box或者anchor,作为真样本,剩余的都是负样本。
- YOLOv1:grid cell不包含目标,只计算置信度误差;有目标,选取与gt最大IOU的bbox计算分类、回归误差;
- YOLOv2:5个anchor box;选择与gt最大IOU的anchor来计算分类和回归误差;
- YOLOv3:9个anchor box,3个尺度检测头,每个尺度3个anchor box;选择与gt最大IOU的anchor来计算分类和回归误差;
存在的问题:正样本太少,负样本太多。
2 Multi-Anchor策略(YOLOv4)
YOLOv4:只要anchor与gt的IOU大于某个阈值,都可以作为正样本。
注意:yolov4的GT需要利用max iou原则分配到指定的检测头上,然后再与指定检测头上的3个anchor box计算正负样本和忽略样本。不存在某个GT会分配到多个层进行预测的可能性,而是一定是某一层负责的。
3 基于宽高比的领域匹配策略(YOLOv5)
v5在v4的基础上引入自适应anchor box(Auto Learning Bounding Box Anchors)和领域正负样本分配策略
- 自适应anchor box: 训练前,针对不同的训练数据,聚类anchor box
- 基于宽高比的领域正负样本分配策略: 增加高质量正样本检测框可以显著加速收敛,v5的领域正负样本分配策略:
- 宽高匹配: 将ground truth与当前feature map中的anchor box进行比较,如果ground truth与anchor box的宽高比例都处在[1/4, 4]那么这个ground truth就能与当前featuer map相匹配。
- 领域匹配: 将当前feature map中的ground truth分配给对应的grid cell。将这个grid cell分为四个象限,针对与当前feature map匹配的ground truth,会计算该ground truth处于四个象限中的哪一个,并将邻近的两个grid cell中的检测框也作为正样本。如下图所示,若ground truth偏向于右上角的象限,就会将ground truth所在grid cell的上面和右边的grid cell中的检测框也作为正样本。
比起yolov4中一个ground truth只能匹配一个正样本,YOLOv5能够在多个grid cell中都分配到正样本,有助于训练加速和正负样本平衡。
4 simOTA(Simple Optimal Transport Assignment)匹配策略(YOLOX, YOLOv6)
YOLOX和YOLOv6都采用了anchor-free+检测头解耦为分类cls(N)、置信度obj(1)和bbox(4)三个部分。
simOTA样本匹配流程如下,假设网络最后输出的size为hxw:
- 将所有位于gt内的点标记为:in_box
- 以gt为中心,落在5x5区域内的点标记为:in_center
- in_box与in_center取并集,作为前景信息fg_mask
- 计算iou_loss矩阵: 计算gt与fg_mask中预测box的IoU,取log作为iou_loss
- 计算cls_loss矩阵: 先使用置信度矩阵乘以分类矩阵,再与gt计算BCE损失
Source: YOLOX-SimOTA图文详解
- in_box与in_center取交集,,在fg_mask中标记,作为in_box_and_center
- 计算simOTA的cost矩阵: c o s t = c l s l o s s + 3.0 ∗ i o u l o s s + 100000 ∗ ( i n b o x a n d c e n t e r ) ,其中 100000 ∗ ( i n b o x a n d c e n t e r ) cost = cls_loss + 3.0 * iou_loss + 100000 * (~in_box_and_center),其中100000 * (~in_box_and_center) cost=clsloss+3.0∗iouloss+100000∗( inboxandcenter),其中100000∗( inboxandcenter),表示给位于center外且在box内的其他点给一个非常大的loss,在最小化cost的过程中就会优先选择center内的样本。cost的大小为N(gt的数量)xM(fg_mask内点的数量)
- dynamic_k_matching:
- 针对每个gt,取iou最大的10个anchor点对应的iou并求和,将其和值向下取整得到dynamic_k;
- 针对每个gt,从cost中挑选dynamic_k个最小的loss,如果一个anchor被多个gt匹配上,则选取cost最小的作为匹配;
Source: YOLOX中的SimOTA正负样本分配策略
YOLOv5的正负样本分配策略是基于邻域匹配,并通过跨网格匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法,并不会随着网络训练的过程而调整。YOLOx使用的SimOTA能够算法动态分配正样本,进一步提高检测精度。而且比起OTA由于使用了Sinkhorn-Knopp算法导致训练时间加长,SimOTA算法使用Top-K近似策略来得到样本最佳匹配,大大加快了训练速度。
5 领域匹配+simOTA(YOLOv7)
yolov7也仍然是anchor base的目标检测算法,yolov7将yolov5和YOLOX中的正负样本分配策略进行结合,流程如下:
- yolov5:使用yolov5正负样本分配策略分配正样本。
- YOLOX:计算每个样本对每个GT的Reg+cls loss(Loss aware)
- YOLOX:使用每个GT的预测样本确定它需要分配到的正样本数(Dynamic k)
- YOLOX:为每个GT取loss最小的前dynamic k个样本作为正样本
- YOLOX:人工去掉同一个样本被分配到多个GT的正样本的情况(全局信息)
其实主要是将simOTA中的第一步“使用中心先验”替换成“yolov5中的策略”。
6 TaskAlignedAssigner匹配策略(YOLOv8, YOLOv9)
YOLOv8和v9的检测头为目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free。且不再有objectness分支,只有解耦的分类和回归的分支,并且回归分支使用了distribution focal loss中提出的积分形式表示法。
Source: YOLOV8 原理和实现全解析
TaskAlignedAtasssigner的匹配策略 :根据分类与回归的分数加权的分数去选择正样本。
t
=
s
α
+
u
β
t = s^{\alpha} + u^{\beta}
t=sα+uβ
针对每一个gt,其中s是每个点对应的gt类别的分类置信度,u是每个点对应预测的回归框与gt的IoU,两者相乘就可以衡量对齐程度alignment metrics。再直接基于alignment metrics选取topk作为正样本。
参考资料
[1] Yolov3-v5正负样本匹配机制
[2] YOLOX-SimOTA图文详解
[3] yolov7正负样本分配详解
[4] Yolov8标签匹配算法TaskAlignedAssigner原理及代码注解