又搬运了这个~~ 勿怪 仅学习哦

在小样本任务中提出了自支持匹配(self-support matching)的思想,并将其用在小样本分割任务中,用很新颖的想法和很简单的方法取得了很好的效果,没有额外参数,模型很小,训练和测试都很快。

第一次(to my best knowledge)在小样本任务中提出了自支持匹配(self-support matching)的思想,并将其用在小样本分割(Few-shot semantic segmentation, FSS)任务中,用很新颖的想法和很简单的方法取得了很好的效果,没有额外参数,模型很小,训练和测试都很快。同时也希望可以把我们的自支持匹配想法应用到其他相关任务中。代码已经开源。

 https://arxiv.org/abs/2207.11549

 https://github.com/fanq15/SSP

self-support matching 自支持匹配_数据

Annotation

  • I_s I_s :支持图片(support image)
  • F_sF_s :支持图片特征(support feature)
  • P_s P_s :支持特征原型(support prototype)
  • I_qI_q :查询图片(query image)
  • F_qF_q :查询图片特征(query feature)
  • P_qP_q :查询特征原型(query prototype),自支持原型(self-support prototype)

FSS Task

对于一个感兴趣的目标新类别,小样本分割算法通过给定的支持图片 I_s I_s 对查询图片 I_qI_q 中的目标新类别进行分割。其中,对每个目标新类别来说,在训练集中没有出现或者没有标注,且在测试时对应的样本数量只有少数几张图片(一般低于10张)。经典的小样本分割算法是分别在支持图片 I_s I_s 对查询图片 I_qI_q 上提取特征,并利用 Masked Average Pooling 操作和 support GT mask 在支持图片特征 F_sF_s 上生成支持特征原型 P_s P_s 。最后计算支持特征原型 P_s P_s 和查询图片特征 F_qF_q 每个空间位置特征之间的余弦相似度(cosine similarity),并将这个 cosine similarity map 作为预测的分割结果。具体流程如图0左图所示。

self-support matching 自支持匹配_人工智能_02

FSS Problem

小样本分割任务存在一个非常重要的问题,就是 support 和 query 间的 appearance gap。在 support 和 query 中的同类别物体可能存在非常大的外观差异性。比如同样是猫这个类别,但是不同的猫的品种、姿态和拍照的光照条件等可能完全不一样,如图0右图所示。这一问题源自于小样本任务的特性,即数据稀少性和数据多样性。其中数据稀少性是指 support 数据很少,通常每个新类别只有不到10个样本,而数据多样性是指 query 的数量是无穷无尽的。所以 support 中的物体根本无法涵盖所有 query 中的同类别物体。如图0左图所示,support 是加菲猫的猫头,query 是一整只黑猫,传统的匹配算法只能将黑猫的猫头分割出来,因为两者具有语义相似性,但是加菲猫猫头与黑猫的身体具有较大的差异性,因此无法得到令人满意的分割结果。

Other Solutions

之前的方法也注意到了这个关键问题并试图解决它。有的方法试图学习更好的支持特征原型:利用未标注图片得到更好的支持特征原型[1,2],或者提出复杂的支持特征原型生成模块,如利用注意力机制[3,4]和自适应学习[5,6,7]等。也有些方法提出更好的训练方式[8,9]来提升匹配效果。但是这些方法都无法从根本上解决 support 和 query 之间的 appearance gap 问题。因为它们还都局限在利用非常少数的 support 去分割无穷的 query。

Our Idea

我们提出了一种全新的自支持小样本分割算法。其思想是利用查询特征原型 P_qP_q 去匹配查询图片特征 F_qF_q 。其中查询特征原型 P_qP_q 是利用高置信度的 query prediction mask 提取对应的查询图片特征 F_qF_q 得到的,而 query prediction mask 则是由传统 support-query 匹配算法生成的。因为这种 query 特征的自匹配性质,我们将方法命名为自支持(self-support)算法。

Our Motivation

自支持匹配想法源自于格式塔理论(Gestalt principle),即物体的整体性:相对于不同物体上的不同部分,同一个物体上的不同部分会更像。为了验证这一想法,我们统计了 Pascal VOC 数据集中的图片不同像素之间的相似度,其特征是用 ImageNet 上预训练的 ResNet-50 提取的。如表1所示,对于前景像素来说,相同物体上的前景像素之间的相似度远大于不同物体上的前景像素之间的相似度。我们在背景像素上也观察到相同的现象。但是这里验证的是像素之间的关系,而我们的目的是进行特征原型 support prototype 和查询图片特征 query feature 之间的匹配。所以我们利用另一个实验进一步验证我们的自支持想法。如表2所示,我们使用传统的支持特征原型 P_s P_s (从 support 图片中提取的 support prototype)和自支持特征原型 P_qP_q (从 query 图片中提取的 self-support prototype,因为我们知道 query GT mask),分别与查询图片特征 F_qF_q 进行匹配。自支持特征原型 P_qP_q 的匹配结果可以达到83.0 mIoU,比支持特征原型 P_s P_s 的匹配结果高近25个点。但是在实际使用中,我们不可能知道 query GT mask,所以我们人为地设置不同大小的 query GT mask 并引入噪声来模拟预测得到的 query mask。在这种情况下,自支持特征原型 P_qP_q 的匹配结果仍然高于74 mIoU。这两个实验很好地支持了自支持匹配的想法。

self-support matching 自支持匹配_相似度_03

Method

方法部分很简单,如图2所示,我们通过传统的 support prototype based matching 生成初始的 query mask,并利用 query mask 在查询图片特征 F_qF_q 上提取自支持特征原型 P_qP_q 。最后将自支持特征原型 P_qP_q 和支持特征原型 P_s P_s 融合并与查询图片特征 F_qF_q 进行匹配。同时我们可以进行多次的自支持匹配对自支持特征原型 P_qP_q 进行优化。

self-support matching 自支持匹配_数据_04

Another Problem and Solution

可以注意到,我们的算法分别对 foreground 和 background 的 prototype 进行建模,但是 foreground 和 background 的性质完全不一样。对于 foreground 来说,同一个物体的不同部分之间一般是相似的,具有全局的相似性,所以可以使用 masked average pooling 将所有的 foreground 像素聚合为一个 prototype 向量来表示 foreground。但是对于 background 来说,背景一般比较杂乱,没有全局的相似性,只有局部的相似性,所以用一个 prototype 向量来表示 background 是有问题的。因此基于 background 的局部相似性这一特点,我们提出了 adaptive self-support background prototype(ASBP),即根据当前 background 像素与其他 background 像素之间的相似度,加权地融合 background 特征。其模型框架如图3所示。

self-support matching 自支持匹配_相似度_05

Experiments

我们在 Pascal VOC,MS COCO 和 FSS-1000 三个数据集上进行了实验。如表3和表4所示,在使用 ResNet-101 backbone 和 5-shot support 的设置下,我们的方法取得了最好的性能,同时在其他设置下我们的方法也很有竞争力。我们发现 HSNet 的 evaluation protocol 更容易在 MS COCO 数据集上得到更好的结果,因此我们也使用 HSNet 的 evaluation protocol 来测评我们的算法。     

self-support matching 自支持匹配_数据集_06

 

self-support matching 自支持匹配_人工智能_07

Analysis

  1. 图4可视化了自支持匹配的工作流程和效果,可以看到 support 和 query 中的物体具有很大的 appearance gap,但是我们的自支持匹配可以很好地利用 self-support prototype 得到准确的分割结果。这里我们取0.8作为初始 query mask 的阈值,以展示用于生成 self-support prototype 的 query feature。
  2. 表5的消融实验证明了我们各个模块的有效性。
  3. 图5分别对 mask threshold 的取值进行分析和对 ASBP 的工作原理进行了可视化。
  4. 表6验证了不同 prototype 的效果。
  5. 表7讨论了自支持算法与自注意力方法的区别。

self-support matching 自支持匹配_人工智能_08

 

self-support matching 自支持匹配_数据集_09

Advantages

我们的自支持算法有很多优点。

  1. 第一个优点是自支持算法会更加受益于更好的 backbone 和 support 数量,因为它们可以带来更准确的初始 query mask 预测结果,可以提取更准确的 self-support prototype,进而得到更好的分割结果。这是一种马太效应,因此我们的方法在 ResNet-101 backbone 和 5-shot support 的设置下会大大优于其他的算法。同时表8也展示了自支持算法在不同条件下的性能提升幅度。
  2. 第二个优点是更高置信度的预测结果。分割算法会使用阈值将预测结果中的连续[0,1]值变为0-1值,但是初始的预测结果质量也很重要,尤其是对于困难样本。如果预测值在0.5附近,这个点上的预测就很容易失败。我们希望得到更加鲁棒和高置信度的预测结果。因此,我们使用 MAE 对预测结果的连续[0,1]值进行评估。如图9所示,我们的算法可以得到更低的 MAE,这意味着我们的预测结果具有更高的置信度。表9和表10显示我们的算法对其他形式的 support 标注也很鲁棒。
  3. 第三个优点是自支持算法非常通用,没有额外的参数量,且额外的计算量也很小,模型很小,训练和测试都很快,并可以直接应用在其他的小样本分割算法上。如表11所示,我们将自支持算法用在 PANet 和 PPNet 上,都得到了性能的提升。

self-support matching 自支持匹配_人工智能_10

Story

自支持匹配这个想法是我在 DDL 前想到的,立即着手去做,但是当时做的并没有效果,于是搁置了几天。但是我觉得这个想法一定可行,所以我又回过头来重新思考了整个方法,发现是我在利用 query mask 选取 query feature 的时候存在问题。我最开始是使用0.5作为阈值选取 query feature 的,但是会引入比较多的噪声。后面我就尝试提升阈值到0.7,方法就立刻有效了。所以自支持的关键点就是选取尽可能多的高置信度的 query feature 去生成高质量的 self-support prototype。整个项目从开始到结束总共花了6周的时间,方法很简单,但是想法很新颖,希望对 few-shot 领域有所启发。自支持匹配这个想法在 few-shot 领域是很少或者没有被探索过的。可以把自支持的想法推广到其他的 few-shot 任务中。因为 support 和 query 之间的 appearance gap 是 few-shot 中普遍存在的重要问题。