lvc|一种简单的小样本目标检测方法(代码片段)

极智视界 极智视界     2022-12-07     566

关键词:

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

  大家好,我是极智视界,本文解读一下 Label, Verify, Correct (LVC):一种简单的小样本目标检测方法

  本文的目标是小样本目标检测 (FSOD),即在给定少量训练实例的情况下,就将一个目标检测器扩展到一个新类别的检测上。作者引入了一种简单的伪标注方法,从训练集中提取高质量的伪标注,对于每一个新类别,大大增加了训练的数据量,减少了类别的不平衡,另外还会查找以前未标注的实例。用模型预测进行训练会产生次优的性能,作者提出了两种新的方法来提高伪标注过程的准确性:(1) 引入了一种验证技术来删除具有不正确类标签的候选检测;(2) 训练一个专门的模型来纠正质量差的 bounding box。在这两个新的步骤之后,获得了一大组高质量的伪标注,这些伪标注允许最终检测器进行端到端的训练。此外,还证明了该方法保持了基类的性能,以及 FSOD 中简单扩充的效果。当在 PASCAL VOC 和 MS-COCO 上进行 benchmarking 测试时,与现有方法相比,本文的方法达到了最好 或 第二好的性能。

  论文地址:https://arxiv.org/abs/2112.05749

  代码地址:https://github.com/prannaykaul/lvc.git

文章目录

1. 简介

  目标检测是指在图像中是否包含特定类别的目标,若包含 则对其进行定位的任务。近年来,依赖于对一组预定义的目标类别的训练计算模型 以及 大量的人工标注标签的数据集 (例如 MS-COCO 和 PASCAL VOC),促使目标检测取得了巨大的成功。然而,这种训练范式对于模型具有一定的限制,限制模型只能在一个封闭的、小的类别集合上表现良好,而这也只是因为这些类别有大量的训练数据可用。

  与此相反,人类可以不断地扩展他们的词汇量,即使只是观察几个例子,也能够学会检测更加多的类别。这也是现代计算机视觉系统所需要的能力,而小样本目标检测就是在做这个事情。本文工作的目标是:给定一个现有的目标检测器,该检测器已经针对某些类别 (称为基类) 的大量数据进行了训练,咱们希望学习仅仅使用少数标注来检测新类别,例如每个类别 1-30 张图片,同时还能够保持原始基类上的检测性能。

  在本文中,作者仔细研究了 two-stage 检测器 Faster R-CNN,并指出了限制其在 FSOD 上性能的两个关键因素。(1) 基于基类的训练导致了一种 “监督崩溃” 的情况;该模型经过自然训练,可以检测来自新类别的实例,因为它们没有被标注为背景;(2) FSOD 问题涉及到需要从极不平衡的数据中进行学习,每个新的类别只有 K 个实例 (K <= 30) 可以用于训练,因此基类的训练样本数量远远大于新类的训练样本数量。一个模型只是进行了少量新实例的样本叠加,自然缺乏泛化能力。

  作者采用了一种简单的伪标注技术,如图1,并解决了限制性能的两个因素:作者展示了区域建议网络 (RPN) 可以被修改以成功地为新类别提出区域建议,并使用少量新数据训练的检测器在大型训练数据集的图像上标记这些区域,为每个类别产生一组候选检测。本文方法的新颖之处在于用于提高该候选集精度的两个步骤:(1) 首先建立一个新类别的分类器,使用自监督训练的网络中的特征来对候选检测进行优化 (如图1 中间);(2) 其次,训练了一个专门的 box 回归器,以提高验证候选 bounding box 的质量 (如图1 右边)。这两个步骤一起为新类别产生了大量的高精度伪标注,减弱了训练数据中的类别不平衡问题。这使得检测器可以使用新类别的伪标注和基类的原始 tround truth 标注进行端到端的训练,同时避免了检测器特征的 “监督崩溃” 的影响。

  总结起来,作者的贡献如下:(1) 仔细研究了现代 two-stage 目标检测器 如 Faster R-CNN 的小样本目标检测问题,并明确了 “监督崩溃” 问题;(2) 提出了一种新的伪标注验证和矫正过程,它显著地提高了伪标注的精度,包括类标签和 bounding box 坐标;(3) 分析了数据增强的几个关键因素,并进行了彻底的消融实验来验证它们的必要性;(4) 通过伪标签和积极的数据增强的结合,使用标准 Faster R-CNN,在具有挑战性的 MS-COCO benckmark 和 PASCAL VOC benchmark 上获得了最好的 或 具有可比性的性能。


2. 背景和监督崩溃

2.1 问题定义

  本文中,考虑了与 TFA 中相同的问题设置,具体来说,假设给定了一个图像数据集D 和 两个标注数据集。首先是 Ybase - 对一组基类 Cbase 进行了详尽的标注。然后是 Ynovel^k - 在一组新类别 Cnovel 上只有 K 个注释。需要注意的是,基类的标注是详尽无遗的,而对于新类,大多数实例都没有标注,在小样本任务中,只为图像数据集 D 提供了 K 个注释。

2.2 训练策略

  首先描述了一个 baseline two-stage 检测器来解决小样本目标检测问题,参考 TFA。一般来说,一个 Faster R-CNN 检测器可以描述为:

  其中,每个输入图像由一组操作依次处理:图像编码器 (ΦENC)、区域建议网络 (ΦRPN)、感兴趣区域特征模型 (ΦROI) 以及 RoI特征上的分类层 (ΦCLS),映射到一组 bounding box 和 类。注意这里的每个模块包含的卷积层 或 MLP层的数量与标准 Faster R-CNN 中的相同。

  训练小样本目标检测器涉及两个阶段的训练过程,如下:

Base Training 指仅使用基类注释的 Faster R-CNN 模型的标准训练 Ybase,在这个过程中,不进行其他的修改。

Novel Training 需要扩展基本检测器,使其能够额外的检测来自新类的实例。在最近的工作中,这通常是通过只在新类和基类数据上训练 (相对较少) 的层来完成的,检测器没有在新类数据上进行端到端的训练。例如,在 TFA 中,只在新类数据上训练尽可能少的参数。

  这样的两阶段训练策略自然会导致两个问题:(1) 在基类上训练的 RPN 是否具有泛化能力,即是否可以为新类别的实例提出建议区域?(2) 仅在基类上训练的特征 实际上的泛化能力如何,换句话说,RoI 特征在分类新类时是否具有判别性?作者的目标是在 MS-COCO 30-shot 目标检测 benchmark 上回答这两个问题。具体来说,遵循 TFA 中相同的数据划分:60个类别被视为基类,20个类别被视为新类。

2.2.1 RPNs 的通用性

  在标准的 two-stage 目标检测器中,由于分类和 bounding box 回归只作用于所提出的区域,因此 RPN 被认为是高性能检测的必要条件。这里,咱们的目标是基于对新类的召回率来评估 FSOD 的 RPN 的质量。具体来说,考虑了以下三个设置:(1) 首先,为了了解在 60 个基类上训练的 RPN 是否可以直接提出新的目标实例,评估了来自基本检测器的 RPN 的召回率;(2) 其次,在基类和新类数据上对 RPN 进行了微调 (由 2 个卷积层组成);(3) 第三,理想的 RPN,它继承自对所有类别的详尽数据进行训练的现成的 Faster R-CNN。

Discussion 表1给出了从基本检测器的RPN 和 从新类中召回实例的理想RPN 之间的巨大性能差距。然而,在少数几个实例 (K=30) 上,对 RPN 的具体参数进行精细微调,不仅平均召回率显著提高,最小类召回率也显著提高,在很大程度上弥补了与理想RPN之间的平均召回率差距。

2.2.2 基于基类特征的可迁移性

  这里的目标是测试在基类上训练的视觉特征的可迁移性,具体来说,在新的训练中,保持编码器固定,并在后续的新类训练中对模块的单个或组合进行精细微调。

Discussion 如表2所示,将 TFA 与微调更多层进行对比,这往往是有益的,但它仍然大大低于理想的 Faster R-CNN。为了消除由于数据标注不足而引起的影响,将 TFA 和 Oracle 测试进行对比,该测试使用所有类别的详尽数据微调最终的分类器。然而,该结果仍然在很大程度上低于理想的 Faster R-CNN,这表明特征编码器严重偏向基类,并且几乎不包含用于从新类中分类实例提取的判别信息。这可能是意料之中的,因为这些类别在基类训练过程中被视为背景。

  这些实验证明了 FSOD 检测器中存在的 “监督崩溃” 问题。注意到 “监督崩溃” 表现在两个方面:(1) 由于类混淆和 bounding box回归差 (检测精度差),会出现许多误报;(2) 尽管 RPN 有所改进 (检测召回率低),但仍有许多误报 或 漏检。

2.2.3 小结

  经过仔细评估,得出以下两个结论:(1) 更新 RPN 的所有参数对于提高新类的召回率是必要的;(2) 基于基类训练的特征对新类的识别能力不足,导致性能严重下降,因此在 RoI 特征模块中更新所有参数,以补充分类层。这两个选择构成了新的训练过程,产生了更加强大的 baseline 检测器。这可以充分缓解 “监督崩溃”,以便 baseline 检测器可以用作咱们的伪标注方法的起点。


3. 方法

  针对 “监督崩溃” 问题,采用了一种简单的伪标注方法来挖掘新类的实例,有效地扩展了它们的标注集。然而,从检测器中提取的伪标注 (经过新类训练) 是不可靠的,会带来大量的假阳性。这里作者提出了一种方法来提高这些候选伪标注的精度,通过自动过滤掉具有不正确类标签的候选,并为剩余的那些改进 bounding box 坐标。这样的方法产生了大量的新类的高精度伪标注数据集,允许最终的检测器在基类和新类数据上进行端到端的训练。

3.1 候选来源

  这里的目标是生成一组候选检测,它们可能是新类的有效伪标注。具体来说,来自新类训练的检测器用于对训练图像进行推理,以生成一组候选检测,每个检测器包含一个类标签和预测的 bounding box 坐标 (如图1 左边)。通过采用具有高置信度得分的新类检测 将这个集合的大小限制为 1000 个。正如之前评估所证明的,来自新类训练的检测器不能很好地检测来自新类的实例,从而在候选集中留下了大量不正确的预测,要么是错误的分类,要么是不精确的 bounding box 坐标。现在的问题变成了:咱们如何才能提高这个列表的精度?

3.2 标签验证

  从 Chum等人的关于查询扩展的工作中获得了灵感,它采用空间验证,在检索期间接受或拒绝新实例。这里的目标是验证每个候选检测的预测类别标签。具体来说,考虑用非常有限的少量标注来构建一个新类的分类器。仅使用少量标注构建分类器显然不是一件简单的任务,因为它通常需要高质量的特征表示。在这里,作者借鉴了最近发展起来的自监督模型,如 MoCo、SwAV、DINO,并利用这些模型产生的高质量特征构建了 kNN 分类器。在实践中,使用了 ViT 模型输出的 CLS token,并使用自监督 DINO 进行训练,其中 NN 的性能被证明是非常强的。

  为了执行标签验证,首先使用自监督模型为每个给定的新类 ground truth 计算特征,这些特征作为 kNN 分类器的训练数据。类似的,使用相同的自监督模型为候选检测集合中的每个位置计算特征。具体来说,为了计算给定标注/候选检测的特征,首先使用 bounding box 对相关图像进行裁剪,然后调整裁剪的大小 并将其作为输入传递给自监督模型。

  采用一个简单的验证策略:如果 kNN 分类器使用余弦相似度预测出的标签 与 检测器预测的类别标签相同,则接受/验证 给定的候选检测。通过这样的一个验证步骤,得到了一组对分类标签具有高精度的验证候选检测。

3.3 Box 验证

  除了验证分类标签之外,还考虑对验证集中所有剩余候选的 bounding box 进行细化。从 Cascade R-CNN 中汲取灵感,构建了一个单独的模型,其中包含三个与模型无关的回归器,它们逐渐生成更加高质量的 bounding boxes,每个模型只处理与 ground truth 相似的 IOU 的 boxes。具体来说,在新类的训练过程中,使用不同的 IoU 阈值将 RPN 分成三个部分,并通过相应的回归器传递 RoI 特征。例如,IoU > 0.3 boxes 的所有池化特征传递给第一个回归器,IoU > 0.5 boxes 的所有池化特征传递给第二个回归器,IoU > 0.7 boxes 的所有池化特征传递给第三个回归器。一旦训练好了,验证集的 bounding boxes 就可以通过连续的三个回归器输入它们的 RoI 特征来进行修正。咱们现在拥有大量的以前未标注的新实例,具有高精度的类标签和高质量的 bounding boxes。这个经过验证和校正的集合,随后被用作伪标注来重新在基类和新类实例上端到端地训练咱们的检测器。


4. 实验

  表3展示了 MS-COCO 30-shot 任务上新类的小样本目标检测的性能。

  表4展示了伪标注方法的消融实验结果数据。

  表5展示了在 MS-COCO benchmark 上各小样本目标检测方法的性能。

  表6展示了在 PASCAL VOC benchmark 上三个拆分结构中的小样本目标检测的性能。

  图2中,在伪标注过程的每个步骤之后展示了定性结果。

  图3中,使用更加严格的 IoU=0.75 在 K=30 的 MS-COCO benchmark 上显示了一些新类的 precision-recall 曲线。


5. 总结

  本文通过对伪标注的训练来解决小样本目标检测问题。提出了两种新的方法来提高伪标注过程的精度:(1) 使用给定的 K 个小样本标注构造分类器验证来自 baseline 检测器的类别标记;(2) 训练一个专门的 box 校正模型,极大地提高了伪标注 bounding box 坐标的精度。该方法通过精确的 bounding boxes 生成大量高精度的伪标注,消除了 FSOD 中类别不平衡的问题,这使得本文的检测器能够端到端地重新进行训练,减少识别误检/漏检问题。


6. 参考

  [1] Label, Verify, Correct: A Simple Few Shot Objection Detection Method.


  好了,以上解读了 一种简单的小样本目标检测方法 LVC。希望我的分享能对你的学习有一点帮助。


 【极智视界】

《LVC | 一种简单的小样本目标检测方法》


搜索关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

一种关注于重要样本的目标检测方法!

...性,不能被简单地同等对待。这次介绍的论文提出了一种重要样本的关注机制,在训练过程中帮助模型 查看详情

货品目标检测样本制作方法(代码片段)

...什么类别的货品,也就是目标检测算法。该方法所需数据样本为标记了位置的货品图片,如下所示。为了制作该图片,设计方法如下:1、拍摄该样品360度的视频2、将视频抓帧3、将图片通过opencv拼装成样本拍摄视频如下并抓帧的... 查看详情

目标检测yolo+dota:小样本检测策略(代码片段)

...;发现准确率还是非常低的。在网上冲浪时,我发现了一种小样本检测策略:那就是把大分辨率的图片分割成小块进行训练,然后再输入大图进行检测。那么本篇博文就使用DOTA数据集来验证一下这种思路是否可行。主... 查看详情

目标检测yolov5跑xview数据集/小样本检测策略实验(代码片段)

...法。此篇就使用YOLOv5来试跑xView数据集,并对一些小样本检测的策略进行消融实验。xView数据集下载:https://github.com/zstar1003/Dataset数据预处理在YOLOv5的xView.yaml文件中,提供 查看详情

睿智的目标检测61——tensorflow2focalloss详解与在yolov4当中的实现(代码片段)

...上咯。其实和Keras的一摸一样00。什么是FocalLossFocalLoss是一种Loss计算方案。其具有两个重要的特点。1、控制正负样本的权重2、控制容易分类和难分类样本的权重正负样本的概念如下:目标检测本质上是进行密集采样,在... 查看详情

优化目标检测方案

...虑新增样本的diversity以及context,比如这篇文章就是很好的小目标检测中的数据扩增方法;(2)改进网络结构:神经网络结构设计,决定了从数据集到检测结果之间映射的假设空间。正如 @wen Hedes和 @chenyh 提到的Anc... 查看详情

基于区域的目标检测(代码片段)

...的边界框识别出边界框内的物体的类别Sliding-windowdetectors一种暴力的目标检测方法就是使用滑动窗口,从左到右,从上到下扫描图片,然后用分类器识别窗口中的目标.为了检测出不同的目标,或者同一目标但大小不同,必须使用不同大... 查看详情

机器视觉中的目标检测

...们繁琐的公式,看了对目标检测的基本理解。这里做一个简单的总结,目标检测的框架一般是下图这样的: 目标检测分为以下几个步骤:1、训练分类器所需样本的创建训练样本一般包括正样本和负样本,正样本是指第一帧... 查看详情

目标检测精度计算工具(代码片段)

...,可以先看一下github上的,然后下面是我选择的一种方法。因为github没有给具体的转换脚本,所以后续可以用我这种方法。第一个主要步骤是选择GT和img我这里用的xml格式的标注文件,我试过 查看详情

如何利用opencv进行样本训练

...sted分类器。分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器,这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目... 查看详情

简单高效性能好setfit:无需prompts的高效小样本学习(代码片段)

...签的数据)已成为比较普遍的解决方案。SetFit:一种用于对SentenceTransformers进行少量微调的高效框架。SetFit用很少的标记数据实现了高精度——例如,在客户评论(CR)情绪数据集上每个类只有8个标记样本,SetFit在3k... 查看详情

简单高效性能好setfit:无需prompts的高效小样本学习(代码片段)

...签的数据)已成为比较普遍的解决方案。SetFit:一种用于对SentenceTransformers进行少量微调的高效框架。SetFit用很少的标记数据实现了高精度——例如,在客户评论(CR)情绪数据集上每个类只有8个标记样本,SetFit在3k... 查看详情

简单高效性能好setfit:无需prompts的高效小样本学习(代码片段)

...签的数据)已成为比较普遍的解决方案。SetFit:一种用于对SentenceTransformers进行少量微调的高效框架。SetFit用很少的标记数据实现了高精度——例如,在客户评论(CR)情绪数据集上每个类只有8个标记样本,SetFit在3k... 查看详情

目标检测算法盘点(代码片段)

一、基于候选区域的目标检测器滑动窗口检测器一种用于目标检测的暴力方法就是从左到右,从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,我们可以使用不同大小和宽高比的窗口得到窗口... 查看详情

图像工程——目标检测与目标跟踪

...的方法是:无参估计背景减除法——ViBe.算法优点:思想简单,易于实现;样本衰减最优;运算效率高算法缺点:把阴影当做前景;运动目标不完整。优点:算法实现简单,程序设计复杂度低,运行速度快;动态环境自适应性强... 查看详情

运动目标检测_单高斯背景建模(代码片段)

...而对分类结果进行后处理,得到最终检测结果。比较简单的获取背景图像的方法是当场景中无任何运动目标出现时捕获背景图像,但这种方法不能实现自适应࿰ 查看详情

《5分钟理解focalloss与ghm——解决样本不平衡利器》(代码片段)

...alLossforDenseObjectDetection是ICCV2017的Beststudentpaper,文章思路很简单但非常具有开拓性意义,效果也非常令人称赞。GHM(gradientharmonizingmechanism)发表于“GradientHarmonizedSingle-stageDetector",AAAI2019,是基于Focalloss的改进,也是个人推荐的一... 查看详情

《5分钟理解focalloss与ghm——解决样本不平衡利器》(代码片段)

...alLossforDenseObjectDetection是ICCV2017的Beststudentpaper,文章思路很简单但非常具有开拓性意义,效果也非常令人称赞。GHM(gradientharmonizingmechanism)发表于“GradientHarmonizedSingle-stageDetector",AAAI2019,是基于Focalloss的改进,也是个人推荐的一... 查看详情