赞
踩
使用 Selective Search 的方法进行 proposal 生成,得到约 2k proposal:
难例挖掘是在干什么(hard negative mining,难负样本挖掘):
如何进行难例挖掘:
Faster RCNN 涉及到了两次正负样本的划分
检测网络的正负样本划分:
RPN 网络的正负样本划分:
缺点:IoU 阈值需要人工选择
ATSS 如何划分正负样本:
上面为什么使用 anchor 和 object 的中心点距离来选择候选框?
为什么要使用均值和标准差这些统计结果来非固定的阈值?
这里使用的是 k × l k\times l k×l 个 anchor 的 IoU 的统计信息,也可以看做是选择了 level。
本文的阈值是一个统计结果,如图 3(a) 有一个高的阈值,这是因为这里的候选框质量都很高,如图3(b) 有一个低的阈值,说明这里的框的质量都不高,如果使用高阈值的话,会把绝大部分的框都滤掉,不合适,所以使用统计的量作为阈值是一个可取的方式。
RetinaNet 使用 IoU 来实现,FCOS 根据每个点是否在 gt box 内部来确定其正负。
这些方法忽略了一个问题:不同大小、形状、遮挡程度的目标,其 positive/negative 的判定条件应该是不同的。
所以就有一些方法使用动态的分配方法,来实现 label assignment。
作者认为,独立的给每个 gt 分配 pos/neg 不是最优的方法,缺失了上下文信息,当处理那些模棱两可的 anchor 时(如图 1 中的红色点,一个点处于多个 gt 中),上面的方法是靠手工的特征来选定属于哪个 gt 的(如 max-IoU、min-Area 等)。
CNN 的方法中,其实是 one-to-many 的形式,也就是一个 gt 会对应多个 anchor。
本文作者为了从 global 的层面来实现 CNN 中的 one-to-many assignment,将 label assignment 问题变成了一个 Optimal Transport(OT)问题(线性规划的一个特殊形式)。
OT 是这样的一个问题:
OTA 的过程如下:
SimOTA 是 YOLOX 中使用的 label assignment 的方式。都是旷世提出的方法。
在 OTA 中,总结了一个好的 label assignment 的方法一般有四个优点,且 OTA 也都满足了:
OTA 将 label assignment 问题从 global 层面出发并看成了一个最优传输的问题,但 OTA 有一个问题,它需要使用 Sinkhorn-Knopp algorithm 来优化,这会增加 25% 的训练时间,假设使用 300 epoch,那增加的时长是不容小觑的。
所以孙剑等人又提出了 SimOTA,将 OTA 的优化过程简化了——dynamic top-k strategy,使用该优化策略得到一个大概的解决方案。
SimOTA 是如何简化的?
SimOTA 的优势:
FCOS 中,是以 anchor point 作为特征点,将每个点当做训练样本,使用点是否在框内来区域前景、背景点
缺点:需要设定阈值参数,且这些确定的规则虽然对大多数目标适用,但对一些 outer 的目标是不使用的,所以,对不同的目标应该用不同的规则。
贡献:提出了让网络自主学习 anchor 正负的方法,首先提出了一种与类别相关且对不同位置使用不同权重的 label assign 方法,能够同时优化空间和尺度的 label assignment。具体来说,就是引入了两个加权系数:① Center weighting 用于学习不同类别的先验,让每个类别有自己的正样本采样方式;② confidence weighting 用于学习每个位置的前景权重和背景权重
现有的标签分配方法的不足:
其他方法是怎么解决上述问题的:
其他方法的缺点:
AutoAssign 的做法:AutoAssign 的正负样本分配,可以看做把处于目标上的样本点看做正样本,把虽然在 bbox 内但不属于目标本身的样本点看做负样本(AutoAssign 认为在真实目标上采样,肯定比在背景上采样效果更好)。
AutoAssign 这样做的优势:让标签的分配依赖于数据先验的同时,也能对不同的类别进行不同的自适应,避免了人为选定参数,如 IoU 阈值、anchor 分布、top-k 等。
AutoAssign 的两个特点:
将每个尺度的每个位置平等看待,不直接划分正负样本:AutoAssign 的框架是建立在 FCOS 之上的,对每个 location 都平等对待,每个 location 都有正样本属性和负样本属性(即体现在原文中的w+ 和w-)。
也就是说,在优化的过程中,有些样本会同时受到来自它为正样本的监督和负样本的监督,两者利用 w + w^+ w+ 和 w − w^- w− 来平衡配比,此外,不在任何 gt 框里的 location 其正样本属性 w+ 必然为0,也就是那些位置必然是background。
联合优化分类和回归(将回归函数也处理成了似然形式): L i ( θ ) = L i c l s ( θ ) + λ L i l o c ( θ ) = − l o g ( P i ( θ ) ) L_i(\theta) = L_i^{cls}(\theta)+\lambda L_i^{loc}(\theta) =-log(P_i(\theta)) Li(θ)=Licls(θ)+λLiloc(θ)=−log(Pi(θ))
加权机制:
从 label assignment 的角度来看,AutoAssign 究竟做了什么:
1、YOLOv2-v3 中引入了 anchor:一个 gt 由一个特征层中的一个 anchor 来负责
2、YOLOv4:一个 gt 由一个特征层中的多个 anchor 来负责(一个 gt 可以有 [0, 3] 个 anchors)
在训练中,若只取一个 IoU 最大为正样本,则可能导致正样本太少,而负样本太多的正负样本不均衡问题,这样会大大降低模型的精确度。
YOLOv4 如何选择由哪一层来负责该 gt 呢:需要利用 max iou 原则,将 gt 分配到和其 IoU 最大的 anchor 对应的层上去,然后在对应的层上单独计算正负样本和忽略样本。不存在某个 gt 会分配到多个层进行预测的可能性,而是一定是某一层负责的。
YOLOv4 如何对负责 gt 的层上的 anchor 进行正负分配: 采用 multi anchor 策略,即只要大于 IoU 阈值的 anchor box,都统统视作正样本(一层上最多有三个 anchor,即最多有 3 个正样本)。
那些原本在 YOLOv3 中会被忽略掉的样本,在 YOLOv4 中则统统成为了正样本,这样 YOLOv4 的正样本会多于 YOLOv3,对性能的提升也有一些帮助。
3、YOLOv5:anchor-based ,一个 gt 由多个特征层中的多个 grid 来负责(一个 gt 可以有 [0, 27] 个 anchors 负责)
4、YOLOX:
anchor free。
simOTA 能够做到自动的分析每个 gt 要拥有多少个正样本。
能自动决定每个 gt 要从哪个特征图来检测。
5、YOLOv6:
第一版使用 simOTA
论文版本使用 TAL
6、YOLOv7:
YOLOv7 也仍然是 anchor base 的目标检测算法,YOLOv7 将 YOLOv5 和 YOLOX中的正负样本分配策略进行结合,流程如下:
YOLOv5:
YOLOX:SimOTA
其实主要是将 SimOTA 中的第一步 「使用中心先验」替换成「YOLOv5」中的策略。相比只使用 YOLOv5,YOLOv7 加入了 loss aware,利于当前模型的表现,能够再进行一次精筛。而融合策略相较于只使用 YOLOX 中 SimOTA,能够提供更精确的先验知识。
7、YOLOv8
TAL 具体是怎么做的:
Centernet 的正负样本判定很简单,将目标检测建模成了一个基于关键点检测的结构,当 gt 中心落在哪个位置,那个位置就是正样本,其余位置都是负样本。
由于这样正负样本极度不平衡,所以,Loss 上做了很大的文章,参考 Focal loss 构建了属于自己的损失函数。
DETR 是一个端到端的检测器,输入一张图,输出直接是预测结果,不需要 NMS 等后处理
DETR 设置了 100 个 object query,设置了 100 个 gt(不够的话用 ϕ \phi ϕ 填充):
DETR 使用二分匹配(匈牙利算法来实现)来实现对预测框和真实框的一对一匹配,注意这里每个 gt 只会被分配到一个 object query, 一对一的匹配策略决定了 DETR 不需要后处理 NMS。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。