FasterRcnn,Yolo的 Label Assignment机制,以及ATSS,OTA

一般把anchor到gt之间如何匹配的方法称为label assignment,也就是给预设的anchor打上正负样本等标签,方便我们后续进一步回归。
其实RPN和Yolo有各自的label assignment方法,

在Faster rcnn,yolo,RetinaNet中,基本都是根据anchor和gt的iou,然后定义阈值去进行label的分配。
例如,在Faster rcnn 的RPN阶段,假设backbone得到的feature map是HW,那么一共会有HW*9个anchors,然后通过分类和回归网络得到每一个anchor的前景概率和偏移量。
在这里插入图片描述

RPN分类和回归网络为了得到的是模型的预测值,为了计算这个预测损失,我们需要真正的类别和预测值的偏移量,具体指的是,anchor是否对应着真实物体 GT,anchor相对于它对应的gt的偏移量。
总体就是
生成anchor —> anchor和gt匹配 —> anchor筛选 —> 求解偏移量

Faster rcnn中label assignment机制

  1. 对于每一个anchor,与所有gt的最大IOU 小于 0.3,视为负样本,也就是背景0类
  2. 对任何一个gt,与其最大的IOU的anchor视为正样本
  3. 对任意一个anchor,与所有标签的最大IOU大于0.7,视为正样本。

条件2覆盖了1,条件3是对2的补充。
另外faster rcnn里面应该GT可以有多个anchors,而一个anchor只对应一个GT。

RetinaNet 中label assignment机制

  • IoU低于0.4为negative,高于0.5为positive,其他为ignore

Yolov2 中label assignment机制

  1. 首先通过GT框的中心落点选出对应的grid cell
  2. 然后计算GT框与该grid cell中所有anchors的IoU
    选择其中IoU最大的anchor做为positive
  3. 计算GT与该grid cell预测的Proposal的IoU
    IoU大于0.6的proposal对应的anchor为ignore
  4. 剩下的anchor为negative

YOLOv3 中label assignment机制

  1. yolov3输出了三个feature map 13x13,26x26,52x52。anchors设置了9种形状,
    (10×13),(16×30),(33×23),(30×61),(62×45),(59× 119), (116 ×90), (156 × 198),(373 × 326) ,顺序为w × h,注意anchors是在原图基础上设置的!
    其中大的anchor对应小的feature map。
  2. 举例对于13x13的feature map来说,先验框由416x416尺度下的 (116 × 90), (156 ×
    198),(373 × 326) 缩小32倍,变成 (3.625× 2.8125), (4.875× 6.1875),(11.6563×
    10.1875),其共有13x13个grid cell,则这每个169个grid cell都会被分配3个13*13尺度下的
    先验框(anchors)
  3. 那么具体的label assignment过程就是那么现在有一个gt,它在13x13尺度特征图下,其gt中心点左上角为原点,对应着该尺度下、该原点的3个先验框,将gt与这3个先验框(anchors)分别计算iou,并分别在26x26 feature map、52x52 feature map下执行相同操作,得到与gt最大iou的那个anchor作为正样本,小于定阈值的作为负样本,大于设定阈值但不是最大iou的为忽略样本。
    如下图所示!
    在这里插入图片描述
    在这里插入图片描述
  4. 可以看到,最左边小汽车在13*13尺度下的中心坐标为[4.82,5.81,1.9,2.7],分别对应中心点x、y,宽高w、h。
  5. yolov3中的build_targets函数的目的就是找出与该gt最匹配的anchor,并且返回
    return tcls, tbox, indices, anch
    其中tbox(该gt中心点相对于该先验框锚点的偏移量,为0.82,0.81,以及该gt在该尺度下的宽、高,为1.9,2.7);
    tcls(该gt所属类别,为汽车类别);
    indices(与gt匹配的anchor的x,y坐标,为4,5);
    anch(与gt匹配的anchor的宽高,为2.2, 2.2)。

FCOS 中label assignment机制

没有anchor
对于每一层feature map,将其中每个grid cell对应回原图,对应回去之后如果落在某个GT框内,则该grid cell为positive,如果同时落在多个GT框内,选择面积小的GT框与该grid cell对应
其余grid cell为negative
没有ignore


TopK Label Assignment 策略

在assign anchor label的时候,对于每个GT,我们都找到与它的iou的TopK个anchors,并且把他们当成正样本,这样做的好处很明显:对于小物体GT,可能和它匹配的anchor很少,这个时候如果还根据IoU来找正样本的anchor,那么可能大GT被分配了很多anchor来训练,而小GT被assign到的anchor数就比较少。**我们保证了不同大小的物体都能够得到一定的anchor进行训练。**不至于像Faster Rcnn里面那样,GT样本分配到的anchors完全不均匀。

Adaptive Training Samples Selection (ATSS)

ATSS综合了FCOS和RetinaNet。
主要就是在每个 FPN 层选取离 GT 框中心点最近的 k 个 anchor,之后对所有选取的 anchor 与 GT 计算 IOU,同时计算 IOU 均值m和方差v;最后保留 IOU 大于均值加方差(m+v) 并且中心点在 GT之内的 anchor 作为正样本。

下面是ATSS的流程图,来自论文地址

在这里插入图片描述

训练过程中,当输入1 张包含G个真实目标的图像时:

  1. 首先,获得第m个GT在所有特征层的先验框,在每一特征层上利用 L 2 L_2 L2距离选择k个距离最近的先验框作为候选正样本,这样一来每个GT有 k ∗ L k*L kL个正样本,L是特征层的数目

  2. 依次计算k*L个anchors 与 第m个GT之间的IOU,然后计算这些IoU的均值 m g m_g mg与方差 v g v_g vg,并且进行求和获得最终的IoU 阈值 t g = m g + v g t_g=m_g+v_g tg=mg+vg
    注:均值代表各层anchors对GT的匹配程度,当均值高时证明各层的检测框质量都很高,需需要高iou阈值。方差代表某一层对目标的(尺度)匹配程度,方差高代表只有部分层适合该目标的尺度,因此需要提高阈值来筛选出来特定层的检测框。使用均值+方差求和作为阈值,可以自动提取不同层上合适尺度的检测框。

  3. 将候选正样本的IoU 值与阈值进行比较,选择IoU 值大于阈值的候选正样本作为正样本,否则为负样本;

  4. 重复上述步骤,直到找到所有真实目标的正负样本,最后,输出正负样本进行网络的回归训练。

Optimal Transport Algorithm(OTA)

ATSS 过程中,对于相同的一张图片, GTBox 和 Anchor 不会发生改变,这就意味着在 Label Assignment 过程中, 正负样本的分布不会随着网络的学习过程而发生变化。换句话说,ATSS 本质上仍然是静态的,相同的 GT 不会随着训练的进行而赋给不同的 Anchors。
我们可以将Loss关联到label assignment中,利用 Loss 作为度量某个 Anchor 作为某个 GT 正样本的好坏。

原版的OTA主要分两个步骤:

  • 对每个 gt 建立 Positive Anchor Bag:论文把 FPN 所有 Pixel都放入了 Bag 中(在之后 Cost 计算中加上 gt 与 Anchor 的中心距离 Cost 以引入 Center Prior)
  • 在 Bag 内利用 Quality Score 筛选最终正样本:这里首先把 Label Assignment 看成是Optimal Transport 问题,我们的 N 个 GTbox 看成是 N 个suppliers供给者,Positive Anchor Bag 中的 M 个 Anchor 是 M 个demander需求者,那么如何将每个供需两者建立联系?

Center prior

我们可以发现,OTA是从全局角度去寻找与gt最匹配的anchor,理论上可以选择任意一个anchor作为gt的正样本,但是作者为了让OTA更关注潜在的正样本区域,来稳定训练。引入了一个先验,称为Center prior。
因此对于每个gt ,从每个FPN特征图中选择最近距离gt中心最近的 r 2 r^2 r2个anchor作为正样本,对于其他anchor,其cost matrix 对应项会增加一个常数cost,以此减小它们被选作正样本anchor的概率,r是人工选择的。
在这里插入图片描述

  • 小的 r 表示只有很少的 anchor 会被分配为正,能够让网络更关注有用的信息
  • 大的 r 表示会有更多的 anchor 会被分配为正,但会给网络带来一些不稳定因素
  • 当 r 分别为 3/5/7 时,对应的 anchor 分别为 45/125/245(anchor 数量= r 2 ∗ F P N r^2*FPN r2FPN个数)
  • OTA 对 r 的大小是很敏感的。当 r=5 时,表现较好。

Dynamic k Estimation

一个gt对应的anchor数目有多个因素决定,作者提出一个基于IoU的方法来估算每个gt对应的anchor个数,即:
选择和gt的IoU最大的前Q个anchor,将这些IoU相加,用作估计这个gt需要的anchor个数。

我们先看看Center Prior 和 Top k Estimat在OTA里面的位置,在第3步的时候,给每个supplier也就是gt确定需要选择k个anchors,在第8步的时候新计算了一个Center Prior cost,在第10 步的时候将Center Prior cost加入到了gt对anchor的分配cost中。

在这里插入图片描述

  1. 定义每个 Demander 与 Supplier 的 Pairwise Cost,假设n是anchor总数,每个gt负责的anchor数目是k,gt一共有m个。这个正样本cost是分类loss和回归loss的加权和。
    分配给一个anchor一个正标签的cost是,i取0到m,j取0到n;cos矩阵为mxn;
    在这里插入图片描述
    分配个一个anchor一个背景标签的cost是
    在这里插入图片描述
    在算法步骤的第11步中,将两种cost给concat起来,得到cost矩阵的shape是(m+1) x n.
    我们还需要给anchor分配负标签,作者将背景background设置为背景的supplier,背景supplier负责的anchor总数是n - m x k,假设 s i s_i si 是每个gt需要的样本个数。那么有如下公式,其中m+1表示背景。
    在这里插入图片描述
    有了Cost、Supplier、Demanders后,最优传递方案可以使用 Sinkhorn-Knopp Iteration 方法解该 OT 问题来得到,如算法流程图第13,14步骤,
    具体图示见下图 中的 cost matrix,每行为一个 gt,每个 gt 会分别计算其和每个 anchor 的花费,组成最终的 cost matrix。通过求cost matrix最小化时候i 和 j 的对应值可以得到分配方案。
    得到了最优方案之后,可以通过把每个 anchor 分配到能给他供货最多(即提供 label 数量最多)的 gt 上去来实现最优 label assignment。
    OT 的计算只需要矩阵乘法,可以使用 GPU 来加速,提高了约 20% 的训练时间,在测试时候是无多消耗的。

OTA 的结构如下:
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值