Incrementer: Transformer for Class-Incremental Semantic Segmentation with KD on Old Class

Incrementer: Transformer for Class-Incremental Semantic Segmentation with Knowledge Distillation Focusing on Old Class

Abstract

Research Object:类增量学习语义分割

Method Background:大多数现有的方法是基于卷积网络和通过知识蒸馏来防止遗忘。知识蒸馏方法(1)需要添加额外的卷积层来预测新的类;(2)在知识蒸馏过程方法,由于忽略区分新旧类对应的不同区域,粗略地提取所有特征,从而限制了新类的学习。(看不懂啥意思)

Method:基于以上观察结果,我们提出了一种新的类增量语义分割的transformer结构,称为增量器Incrementer,它只需要在transformer解码器中添加新的类标记就可以进行新的类学习。

在增量器的基础上,我们提出了一种新的知识蒸馏方案该方案聚焦于旧类别的蒸馏;这种方案可以在增量学习时,减少旧的模型对新类别学习的束缚,增加模型的可塑性。

Results:比SOTA更好,在Pascal VOC和ADE20k都提高了5∼15个绝对点。有望成为类增量领域的新的强力的方法。

Introduction

Background:类增量学习的背景,学新忘旧。

本文方法的方法背景,现有的方法通常使用全卷积网络作为基本框架,它使用CNN主干作为编码器来提取图像特征,然后通过卷积解码器生成分割预测。为了防止灾难性遗忘,大多数现有的方法通过知识蒸馏来保存学习到的旧知识。

批判现有的Method:①全局上下文信息对于准确的语义分割至关重要,而与局部视图的卷积核则难以捕获全局信息。②此外,在增量学习中,现有的基于卷积的方法需要在解码器中添加额外的卷积层来预测新的类,用不同的解码层做分割,类别的量多了后效率不高。③其次,在知识蒸馏中,现有的方法将模型生成的特征视为一个整体,忽略了区分新旧类对应的不同区域,限制了模型可塑性。

我们的Method:①我们首先采用视觉转换器[7,39]作为编码器,提取基于自注意机制捕获更多全局上下文信息的视觉特征。(编码器CNN改tf,提取全局特征)②对于解码器,受[36](这篇文章叫Transformer for Semantic Segmentation)的启发,我们为每个类分配一个类token标记,然后将类tokens与编码器生成的分割视觉特征,共同输入到一个tf解码器中,从而生成相应的视觉嵌入和类嵌入(视觉嵌入vision embedding与类嵌入class embedding用于最终的分割预测)。这一方法非常好,在新类别到来时我们只需要为tf decoder增加新的class token即可,而不需要改变decoder的网络结构(基于CNN的方法似乎需要不断地为新任务增加输出头而改变网络的结构),效率明显提高了。(新任务到来时,增加CNN输出头,改,tf_decoder(token, 特征)输出头)这一套从encoder到decoder的方法,合起来起名叫“基于tf的类增量语义分割增量器”,这个东西创新之处就在于整体架构采取了tf,引入了token去解决增量问题

新的知识蒸馏方案。该蒸馏方案,只关注旧的类,FOD。现有的蒸馏方法不区分新区域旧区域,我们把图像分到了新类与旧类两个篮子里,只将旧类篮子里的特征蒸馏到局部与全局上(不是很懂在这里的局部与全局的方法,是跟tf相关的吗?)。这一方案既能很好地保留模型在旧类上的分割准确度,也能减少这些旧知识对将要习得的新知识的阻碍,从而提高了网络的承载能力或者说可塑性。

添头创新点。我们发现了,当增量数据包,包含少量新类、大量的旧类时,模型会容易将新类过拟合掉(例如模型记住了狗,现在输一个新数据包,里面有100张狗10张猫,模型可能就难以学到真正的猫而只记得那10个猫,这似乎是数据量不足的必然结果)。于是我们提出了一个平衡模型新旧类学习速度的class解混淆策略CDS(class的解混淆策略,能够让模型学习新旧class的速度平衡一些,不要在数据包含少量新数据的时候,一学就过拟合)

Results:我们对Pascal VOC和ADE20k进行了广泛的实验,结果表明,我们的增量器明显优于SOTA。

Related Works

一.增量学习

二.Transformer

三.类增量Class incremental语义分割Semantic Segmentation

基于重放的Recall模型[21年ICCV]通过GAN或web获取额外数据做增量分割。PLOP通过提取多尺度特征蒸馏以减轻灾难性遗忘。基于架构的RC[Representation compensation networks for continual semantic segmentation.]利用两个并行网络分别存储旧知识和学习新类(说不定后面可以了解了解这篇论文)。

Method

问题设想:

总时间T内,在t时刻,有数据Dt,Dt对应全新的之前(t-1)时刻未接受过的类型Ct,Dt包含一系列图像样本及其ground truth,其中图像样本Xt对应ground truth Yt。Yt只包含Ct的标签,不包含旧类Ct−1的标签。每个类只学习一遍,不能学完Dt再利用Dt学习Ct的分割,即C[1:t−1] ∩ Ct = ∅。模型在学习新的类的过程中,由于新数据中缺少旧的类的标签,模型会逐渐忘记旧的类。

增量式结构:架构及细节

架构:由tf结构的encoder跟decoder结合而成。输入X大小3xHxW。①首先对X做切割,切成N个patch,每份大小为PxP。②将每个patch展开撑D维特征向量,得到{f1,f2,...,fN}大小为NxD。③之后,添加了空间嵌入(spatial embeddings这到底是个啥???)的f被输入到一个视觉tf encoder中。通过多层自注意力的tf,特征序列可以获取充分的大范围的上下文信息。(不是很懂这里的上下文指的是什么)。最终输出一系列fv = {fv1,fv2,...,fvN}大小NxD(大小居然跟输入f序列是完全一致的),用于后续解码。

①对于decoder,为了实现可以处理未来的增量class,而不添加额外的网络结构,受[36, Transformer for Semantic Segmentation]的启发,我们为每个类都分配一个可学习的类标记τ,并得到类标记序列{τ0, τ1, τ2, ..., τM}大小(M+1)xD(每个标记为什么大小是D???),τi对应了一个可学习的token向量,对应class ci,M代表class的数量,M=|C[1: t]|(M等于,C序列截止到当前时刻的长度,即当前时刻下接到的所有数据包所包含的所有class数目),τ0则表示类c0的token。②我们将τ序列与来自encoder的fv序列联合起来,输入到decoder中,得到对应的视觉嵌入(visual embeddings)ev序列,ev = {ev1,ev2,...,evN}大小NxD,以及类嵌入(class embeddings)ec = {ec0, ec1, ... ecM}大小为(M+1)xD。

(百川给的segmentation mask定义:segmental mask代表的是对图像中每个像素的类别标签的预测。具体来说,它是一个与输入图像大小相同的矩阵,其中每个元素对应于原图中相应位置的像素,其值代表了该像素属于哪个预定义类别的概率。这种表示方法对于理解图像内容及其组成至关重要,因为它不仅提供了关于图像中各个对象的位置信息,还揭示了它们各自的语义属性。)

①最终,由视觉嵌入ev与类别嵌入ec的余弦相似度,可以得到每个类ci的segmentation mask。(分割掩码,就是一张图片,每个像素点上面有各类的概率)。方法大概是,先分别对ev跟ec正则化,再做S’ = gamma*(ec*ev转置)。ec跟ev大小为((M+1)xD)、(NxD),所以S’大小为(M+1)xN,gamma是余弦相似度的一个超参。②reshape S’回到(M+1) x (H/P) x (W/P)(将原始image划分成PxP个patch小块然后这些小块上有一个(M+1)的向量代表这一小块是属于ci的概率),再上采样回到输入图像的大小,并使用softmax操作得到最终的分割预测S∈R(M+1)×H×W。

增量学习:利用架构去train 新class的过程。图2的下半部分。

在t时刻,我们固定旧的类标记tao[1:t-1],增加新的class token taot={τ|C0:t−1|+1,τ|C0:t−1|+2,...,τ|C0:t|}。其中C[0:t−1]包括学习过的类C[1:t−1]和一个背景类c0。(大写C是class的集合,例如C=[背景(c0这个一般都是bkground)、人、椅子、桌子...],其顺序可以是任务到来的顺序;token是代表这些类的向量,例如[1,0,0,...]可以代表bkground、[0,1,0,...]可以代表人;这个taot的记法我没看懂,是想避免类的token冲突与冗余吗???)

然后,将taot与之前的tao0:taot-1一起输进decoder,经过decoder、Reshape、余弦相似变换、上采样得到St大小|C[0:t]| x H x W(大小为H*W*到本时刻到来的全部的class的数量)。假如不做任何抗遗忘措施,由于这一步只输入了包含了新的classes Ct(Ct可能包含了cx=chair、cx+1=table这几个新的类)的Dt,模型直接对Dt做微调之后之前训练的旧类就会被遗忘。

无熵阈值的伪标记。具体来说,给定一个样本对(Xt,Y t),我们首先在最后一步通过旧模型为学习到的旧类生成分割预测St−1。在上一步我们为学习到的旧类生成了分割预测St−1。然后,我们根据St−1中分割的旧类,在当前样本Yt的ground truth中重新标记背景区域,得到组合标签Yˆt。(听起来像,拿t-1时刻的模型对Xt做分割得到Y^t???——我好像知道了,就是新模型的会background设置为所有旧类的总和(注意此时t时刻前的数据已经无法在用了注意),例如旧模型的背景、人,当做新模型的新background,即Y^t = 各旧类的总和构成的background + Y,注意这个Y^t是新的truth,用来监督预测S,带^的不再是预测值了,变成真值了。)

通过加权交叉熵损失,使用Yˆt来监督当前的预测St:

其中,Stc,i表示模型预测位置i处的像素为类c的概率分数,而ωi是用于缓解模型对新类的过拟合的权重,这将在第3.4节中介绍。(这个地方要仔细读一下!!!)

聚焦于旧Class的知识提炼

再批判一下现有方法:现有的特征蒸馏方法,无论是粗还是精细,都将特征映射作为一个整体来处理,而没有选择划分区分不同的类区域进行蒸馏。如果所有的特性都由旧模型蒸馏而来,当前模型生成的新特性也将限制类似于旧的模型,这使得当前模型很难生成更多的区别特性表示新类,从而限制模型的可塑性。因此,我们认为并非当前模型中的所有特征都必须由旧模型来提取,并且我们提出了一种新的知识蒸馏方案(FOD),该方案只专注于提取旧类中的特征。(旧区关注旧模型,新区不要受到旧模型的干扰,这样能增加模型整体的可塑性)

FOD:具体来说,我们首先在视觉嵌入特征evt上执行FOD(蓝色框框)。由于我们在分割生成中使用余弦相似度,我们仍然使用余弦相似度作为蒸馏损失的约束,以保持相似度度量的一致性,避免使用l2-距离等硬知识蒸馏损失牺牲塑性。基于视觉嵌入的FOD的知识精馏损失被表述为:

其中(这块可能需要对分割类的知识蒸馏有一定理解,暂时可以放过这个地方)

在之后,我们还需要对类嵌入特征进行蒸馏(红色虚线框框,只对旧类进行蒸馏,虽然看起来也没法对新类做蒸馏这样子)

(这个地方beta的权重详见原论文)总蒸馏损失:

利用上述蒸馏方法在局部(蓝框,对patch的蒸馏)和全局水平(红框,对class的蒸馏)上,我们保持了旧类模型的稳定性,同时减少了对新类模型的塑性的约束。

一种面向特定情况的类解惑策略(Class Deconfusion Strategy)

增量学习的过程中,我们观察到,当新数据包含少量的样本或新类,特别是当学习多个步骤,只有一个新类,导致少量的新类发生的概率高和高集中,而大量的旧类发生的概率低,分散。(增量学习只是使用过的数据无法使用,不代表该类数据不能再使用。当新数据包到达时,新数据包大部分数据都是旧的类,新的类很少,可能是一个数据包内张数很少,可能是多个学习阶段,某一class只出现了一次后就再没出现过)。

此时,新旧类之间的不平衡会导致模型对新类进行过拟合,并错误地将非新类区域预测为新类,从而导致误报。此外,如果新数据包含与旧类相似的类,模型就会混淆它们。

解决方法:CDS即标题。(细节不想看了,直接看实验)

实验

数据集:Pascal VOC;ADE20k。

其中,Pascal VOC包含20个前景类,其中有10,582张图像用于训练,另有1,449张图像用于测试;ADE20k包含150个类,其中有20,210张图像用于训练,其中有2,000张图像用于测试。

增量协议(Incremental Protocols)

为了评估增量学习能力,将数据集划分为不同的子集。

论文[2](Modeling the background for incremental learning in semantic segmentation. 对语义分割中增量学习的背景进行建模)进一步提出了不同的划分设置:不相交(disjoint模式)和重叠(overlap模式)。在不相交设置中,每个步骤中的数据只包含前面步骤中学习到的旧类C0:t−1和当前类Ct,而不包含未来的类,旧类被标记为背景。在重叠设置中,每个步骤的数据进一步包含未来的类,这与现实场景更一致。

根据通用的论文[2]的协议,对于Pascal VOC,我们在多个划分基准上评估我们的方法,包括: 15-5(2步,首先训练15个类,然后是5个新类),19-1(2步),15-1步(6步),和更具挑战性的10-1步(11步)。对于ADE20k,评估方法为100-50 (2步)、50-50 (3步)、100-10 (6步)和100-5 (11步)。对于度量,我们使用联合联合上的平均交集(mIoU)。具体来说,在再训练T步后,我们计算初始类C1的mIoU来评估稳定性,以下步骤C2的mIoU:T用于评估可塑性,以及所有类的mIoU来评估整体性能。在消融研究中,我们进一步使用平均假阳性(mFP,在每个类别中,FP是错误预测区域占该类别预测的总面积的比例,mFP是所有类别的FP的平均值)来评估模型对新类的过拟合程度。

实施细节略

与sota的比较:

在Pascal VOC数据集,我们的方法在三种协议上都高于sota 6%-14%个绝对点。对short step learning,我们的方法在19-1设置下比所有mIoU上的最佳多7.14(不相交)和5.91(重叠)点,在15-5设置下分别为7.71和7.53点。对于long step的学习也表现出很大的优势,具体的数就不列出来了,高了很多总之。

消融实验:

为了验证我们提出的针对旧类(FOD)和类去惑策略(CDS)的知识蒸馏方案的有效性,我们在Pascal VOC的15-1重叠设置上进行了消融实验。

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值