目标检测认识 02 - 样本匹配发展过程

目标检测中样本匹配发展过程

为什么要进行样本匹配 ?

目标检测由于目标数量不定,想想 two-satge 首先通过选择性搜索生成大量候选框,one-stage 通过大量的 anchor 生成候选框,所以通常输出远超过目标数量的结果,然后在结果上依靠置信度、IOU 找出正确目标,那么带来的问题是如何计算损失?即假设模型输出数量 M > 真实数量 N,N 的每个目标和 M 的哪些预测计算损失?这就需要样本匹配

计算损失时,一般模型输出的样本有 3 大类:正样本、负样本、忽略样本,其中正样本用于预测目标,负样本用于协助模型训练,样本匹配的目的是区分出模型输出的这 3 类样本

区分模型输出的 3 类样本的方法,从训练前和训练时区分,分为静态、动态的,从分配的数量来说,有 one-to-one, one-to-many

静态分配

所谓静态分配,就是训练前根据预测框与 GT 框的位置确定正样本、负样本、忽略样本

模型指标Anchor描述预测框数量
FasterRCNN双 IOUAnchor-base正样本: IOU>0.7
负样本: IOU<0.3
随机选择 128 个正样本 + 128 个负样本参加训练
[[YOLOv1]]MaxIOUAnchor-base正样本:目标对应 cell 处预测的最大 IOU 框
负样本:该位置其他预测
1->1
[[YOLOv2]]MaxIOUAnchor-base正样本:站在 gt 的角度,与 gt 对应的有最大 IOU 的 anchor
负样本:该位置其他预测
1->1
[[M01 - 视觉模型 / 1 - 基础视觉任务 CNN/B - 目标检测 / RetinaNet]]IOUAnchor-base正样本:站在 anchor 的角度,其存在 gt,他们之间 IOU>0.5 即可;
负样本:站在 anchor 角度,其与任意 gt 的 IOU<0.4; 如果存在 gt 框匹配不到正样本,忽略前面 2 条规则,按 MaxIOU 判断正样本
1->n
[[YOLOv3]]MaxIOUAnchor-base正样本:站在 gt 的角度,有最大 max 的 anchor 为正样本;
负样本:站在 anchor 的角度,除正样本外,与所有 gt 的 IOU 小于阈值的 anchor ;
忽略样本:正例除外,与任意 gt 大于阈值但没被 MaxIOU 选中的 Anchor
1->1
[[YOLOv4]]IOUAnchor-base正样本:站在 gt 的角度,哪些与其的 IOU 大于阈值即可;
负样本:其余预测框
1->n
[[YOLOv5]]ShapeAnchor-base正样本:站在 gt 的角度,不管在那个 head 的 anchor (跨 head),只要其宽高比在一定范围内就是(跨 anchor)+ 该 anchor 附近的 anchor(跨 cell)
负样本:其余预测框
1->n
[[CornerNet]]位置-正样本:一个 cell 只预测一个框1->1
[[CenterNet]]位置-正样本:一个 cell 只预测一个框1->1
FCOS位置-正样本:对于每个 level,如果某个 cell 落在 gt 上,则其负责预测该 gt,也就是说一个 gt 可以被多个检测 head 预测,但是这个过程需要考虑目标的尺寸,如果其尺寸大于特征图或者在特征图上是 1 个点,则该 level 不负责该目标的预测1->n
[[SSD]]IOUAnchor-base正样本:站在 gt 的角度,与其 IOU > 阈值的 anchor ;
负样本:所有 anchor 中,没有和 gt 匹配的 anchor;如果存在 gt 框匹配不到正样本,忽略前面 2 条规则,按 MaxIOU 判断正样本
1->n
[[DSSD]]IOUAnchor-base正样本:站在 gt 的角度,与其 IOU > 阈值的 anchor ;
负样本:所有 anchor 中,没有和 gt 匹配的 anchor;如果存在 gt 框匹配不到正样本,忽略前面 2 条规则,按 MaxIOU 判断正样本
1->n
[[FPN]]双 IOU-正样本 IOU>0.7
负样本 IOU<0.3
随机选择 128 个正样本 + 128 个负样本参加训练

动态分配

所谓动态分配,根据模型实际输出,计算输出和 GT 框之间的 loss 或者 IOU,选择较小 loss 或者较大 IOU 输出框作为正样本

模型指标Abchor描述
[[YOLOv1]]MaxIOUAnchor-base正样本:目标对应 cell 处预测的最大 IOU 框
负样本:该位置其他预测
ATSSATSSAnchor-base正样本:大于统计性 IOU 阈值的 anchor
负样本:剩余 anchor
PAAPAAAnchor-base正样本:大于学习到的分数阈值的 anchor
负样本:剩余 anchor
[[YOLOF]]UniformMatcherAnchor-base正样本:站在 gt 的角度,计算与所有 anchor 的 L1 距离,保留 topK 的结果,再根据 IOU>0.5 筛选 anchor; 训练时,为了保证模型稳定,不计算 IOU>0.7 的正锚框和 IOU<0.3 的负锚框;
负样本:没有 gt 与其对应的 anchor
[[YOLOX]]动态样本匹配 (SimOTA)Anchor-free正样本:计算模型输出与 gt 之间的 IOU, 动态选取损失最小的 k 个输出
[[YOLOv6]]动态样本匹配 (SimOTA)+YOLOv5 的正样本匹配Anchor-free正样本:利用 YOLOv5 的匹配方法增加正样本数量,利用 SimOTA 动态选择样本
[[YOLOv7]]动态样本匹配 (SimOTA)+YOLOv5 的正样本匹配Anchor-base正样本:利用 YOLOv5 的匹配方法增加正样本数量,利用 SimOTA 动态选择样本
YOLOv8任务对齐标签分配 (TAL)Anchor-free根据分类与回归的分数加权的分数选择正样本
PP-YOLOE任务对齐标签分配 (TAL)Anchor-free根据分类与回归的分数加权的分数选择正样本
RT-DETR匈牙利匹配Anchor-free
YOLOv10One-to-many+one-to-oneAnchor-free训练时使用双头训练,推理时只使用 one-to-one