FasterRcnn,Yolov2,Yolov3中的Label Assignment机制 和 ATSS

一般把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的前景概率和偏移量。
FasterRcnn,Yolov2,Yolov3中的Label Assignment机制 和 ATSS_第1张图片

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的为忽略样本。
    如下图所示!
    FasterRcnn,Yolov2,Yolov3中的Label Assignment机制 和 ATSS_第2张图片
    FasterRcnn,Yolov2,Yolov3中的Label Assignment机制 和 ATSS_第3张图片
  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的流程图,来自论文地址

FasterRcnn,Yolov2,Yolov3中的Label Assignment机制 和 ATSS_第4张图片

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

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

  2. 其次,计算这些候选正样本,一共有 k ∗ L k*L kL个正样本,L是特征层的数目,与真实框的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

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

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

你可能感兴趣的:(Deep,Learning,深度学习,计算机视觉)