代码编织梦想

写在前面

今儿答辩完了大创,忽然意识到自己大学生活中两次大创经历给我带来了很多学习技术的机会,也是把我引入目标检测的坑,那就跳进去再跳出来吧,深挖目标检测。看到Openmmlab发的文章瞬间提起了兴趣,想着阅读一下做一些笔记。

正文开始

文章主要说label assignment,那就回顾一下几个经典的目标检测框架的label assignment的方法吧。

label assignment

Label Assignment主要是指检测器(object detector)在训练阶段区分正负样本,并给feature map的每个位置赋予合适的学习目标的过程。一个dense object detection model 可能有成千上万个anchor,而图片里的target通常只有几个几十个。在训练model的时候,需要匹配target和anchor,告诉网络哪个anchor要去预测哪个target,这个过程就是label assignement。

RetinaNet

RetinaNet的标签分配规则和Faster rcnn基本一致,只是修改了IoU阈值。对于单张图片,首先计算这张图片的所有Anchor与这张图标注的所有objects的iou。对每个Anchor,先取IoU最大的object的回归标签作为其回归标签。然后,根据最大IoU的值进行class标签的分配。对于IoU小于0.4的Anchor,其标签置为0,代表负样本Anchor;对于最大IoU大于0.5的Anchor,其标签置为最大IoU对应的obejct的类标签+1(因为处理数据集时所有的object类index都是从0开始的,所以这里要+1),代表正样本Anchor。剩下的Anchor样本即IoU在0.4-0.5之间的Anchor,其类标签置为-1,代表被忽略的Anchor,这部分Anchor无论是在focal loss还是在smooth l1 loss中都不参与loss计算。

FCOS

FCOS 根据目标中心区域和目标的尺度确定正负样本。在FCOS中,如果位置(x,y)落入任何真实框就认为其是一个正样本,它的类别标记为这个真实边框的类别。但这样会带来一个问题,如果标注的真实边框重叠,位置(x,y)映射到原图中落到多个真实边框,这个位置被认为时模糊样本,后续会采用多级预测的方式解决模糊样本的问题,就是在不同级别的特征层检测不同尺寸的目标。

ATSS

One Stage基于锚点和基于中心的无锚点探测器之间的本质区别实际上是正训练样本和负训练样本的定义。 这表明在训练对象检测器的过程中如何选择正样本和负样本至关重要。受此启发,作者深入研究了这一基本问题,并提出了自适应训练样本选择方法,该方法根据目标的统计特征(方差和均值)自动划分正训练样本和负训练样本,弥合了基于锚的探测器与无锚探测器之间的差距。
ATSS自适应举例
均值mg表示预设的anchor与GT的匹配程度,均值高则应当提高阈值来调整正样本,均值低则应当降低阈值来调整正样本。标准差vg表示适合GT的FPN层数,标准差高则表示高质量的anchor box集中在一个层中,应将阈值加上标准差来过滤其他层的anchor box,低则表示多个层都适合该GT,将阈值加上标准差来选择合适的层的anchor box,均值和标准差结合作为IoU阈值能够很好地自动选择对应的特征层上合适的anchor box。
1.对于每个输出的检测层,选计算每个anchor的中心点和目标的中心点的L2距离,选取K(mmdetection的topK是9)个anchor中心点离目标中心点最近的anchor为候选正样本(candidate positive samples)。
2.计算每个候选正样本和groundtruth之间的IOU,计算这组IOU的均值和方差,根据方差和均值,设置选取正样本的阈值:t=m+g ;m为均值,g为方差。
3.根据每一层的t从其候选正样本中选出真正需要加入训练的正样本,然后进行训练。

AutoAssign

AutoAssign在FCOS的基础上,通过引入ImpObj、Center Weighting和Confidence Weighting三个分支,将FCOS中根据空间和尺度定义正负样本的方式和center-ness分支都去掉,将label assign做的更加彻底,完完全全通过CNN学习自适应的label assign方式。

One-to-one label assignment

DETR

DETR设计一组学习的位置嵌入,表示图像中的位置。然后通过一对一的匹配对这些查询进行优化,形成一个端到端的pipeline。DETR最后预测和GT进行匈牙利匹配,例如coco上设置N=100个预测框与真值匹配。

Sparse R-CNN

沿着目标检测领域中Dense和Dense-to-Sparse的框架,Sparse R-CNN建立了一种彻底的Sparse框架, 脱离anchor box,reference point,Region Proposal Network(RPN)等概念,无需Non-Maximum Suppression(NMS)后处理。
sparse rcnn
sparse体现在box candidates来源于可学习的proposal boxes对数据集的统计值。而统计值提取到的roi feature不利于分类和定位的优化,因此再插入一组可学习的proposal features与roi features交互。
proposal features与roi features交互

One-to-many label assignment

单阶段检测器,如RetinaNet和FCOS,使用密集分布的查询进行回归和分类。同样的方法也适用于多阶段模型的区域建议网络(RPN)。一对多分配是这些传统检测器的常见做法。尽管快速发展的一对多分配(例如基于iou、基于中心)从静态标签分配到动态标签分配,这些策略长期批判GT与多个查询配对,因为需要额外的后处理来删除重复预测推理,阻止了端到端预测。

Dense Queries with One-to-One Assignment

DDQ FCN

DDQ FCN
提出金字塔洗牌来补偿不同级别的查询交互,其中跨相邻级别的S通道被打乱成一个新的特征金字塔。
pyramid shuffle
根据每个特征级别的分类分数选择前1000个预测,然后应用一个阈值为0.7的类无关的NMS,以确保不同数据集之间的差异性和通用性。

参考文献

一文看懂label assignment
RetinaNet标签分配参考
DETR

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/npu_yuanfang/article/details/131011653