分成型网站建设郑州百度推广外包
一般把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机制
- 对于每一个anchor,与所有gt的最大IOU 小于 0.3,视为负样本,也就是背景0类
- 对任何一个gt,与其最大的IOU的anchor视为正样本
- 对任意一个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机制
- 首先通过GT框的中心落点选出对应的grid cell
- 然后计算GT框与该grid cell中所有anchors的IoU
选择其中IoU最大的anchor做为positive - 计算GT与该grid cell预测的Proposal的IoU
IoU大于0.6的proposal对应的anchor为ignore - 剩下的anchor为negative
YOLOv3 中label assignment机制
- 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。 - 举例对于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) - 那么具体的label assignment过程就是那么现在有一个gt,它在13x13尺度特征图下,其gt中心点左上角为原点,对应着该尺度下、该原点的3个先验框,将gt与这3个先验框(anchors)分别计算iou,并分别在26x26 feature map、52x52 feature map下执行相同操作,得到与gt最大iou的那个anchor作为正样本,小于定阈值的作为负样本,大于设定阈值但不是最大iou的为忽略样本。
如下图所示!
- 可以看到,最左边小汽车在13*13尺度下的中心坐标为[4.82,5.81,1.9,2.7],分别对应中心点x、y,宽高w、h。
- 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个真实目标的图像时:
-
首先,获得第m个目标在所有特征层的先验框,在每一特征层上利用L2L_2L2距离选择k个距离最近的先验框作为候选正样本;
-
其次,计算这些候选正样本,一共有k∗Lk*Lk∗L个正样本,L是特征层的数目,与真实框的IoU 值,将这些候选正样本的IoU的均值mgm_gmg与方差vgv_gvg进行求和,获得最终的IoU 阈值tg=mg+vgt_g=m_g+v_gtg=mg+vg;
-
再次,将候选正样本的IoU 值与阈值进行比较,选择IoU 值大于阈值的候选正样本作为正样本,否则为负样本;
-
重复上述步骤,直到找到所有真实目标的正负样本,最后,输出正负样本进行网络的回归训练。