【Novel Category Discovery】AutoNovel: Automatically Discovering and Learning Novel Visual Categories

一、简介

题目: AutoNovel: Automatically Discovering and Learning Novel Visual Categories
期刊: TPAMI 2021
任务: 给定一个数据集,其中部分样本有标签(可认为它们属于已知类),其余样本无标签(可认为它们属于新类/未知类),要求模型保留对已知类的分类能力同时对无标签样本进行聚类,或称新类发现(Novel Category Discovery)。
Note: Open World Semi-Supervised LearningGeneralized Category Discovery对Novel Category Discovery进行了扩展,他们允许无标签样本中包含已知类数据。
方法:
(1)获取良好的特征表达。在全数据(包括有标签和无标签的全部数据)上采用RotNet方法对backbone进行自监督的预训练以获得稳定的浅层表达,之后在backbone后增加一个分类头并在有标签数据上以交叉熵为损失进行网络最后几层的微调;
(2)使模型具有聚类能力。假设新类数量为k,增加第二个头,以二元交叉熵为损失联合交叉熵和一致性正则项进行协同训练(此处的二元交叉熵是基于样本相似性改进的仅作为无标签数据的损失,交叉熵仅作为有标签数据的损失,一致化正则项是指均方误差同时作为有标签和无标签数据的损失);
(3)确定新类数量k。将一部分已知类的有标签数据用于微调网络,将其余已知类样本分为两个部分,一部分作为有标签数据,另一部分假设为无标签数据,一起放入无标签数据中进行半监督的k-means聚类,根据假设为无标签的数据的性能表现和真实无标签的数据的性能表现综合确定最终的k值。

如上图所示,Novel Category Discovery的目标就是保留模型对已知类(Dog、Cat)的识别能力,同时聚类无标签数据(Monkey、Bird),并且有标签数据和无标签数据的类别不相交。

二、详情

1. 确定新类数量

原文中该部分内容在文章最后,但考虑到文章前面的内容都是在假设新类数量已知的情况下进行的,故将这部分内容放在最前面以方便理解。

如图所示,首先数据分为两部分,有标签数据(共 C l C^l Cl类)和无标签数据(类别数 C u C^u Cu待确定)。作者将一部分已知类的有标签数据用于微调backbone(对应蓝色部分,共 C l − C r l C^l-C^l_r ClCrl类),将另一部分已知类的有标签数据作为探测数据,并分为锚探测类集(是有标签的,对应绿色部分,共 C r a l C^l_{ra} Cral类)和验证探测类集(假设是无标签的,对应红色部分,共 C r v l C^l_{rv} Crvl类)。

作者将探测数据和无标签数据放到一起进行半监督的k-means聚类(聚类是针对通过蓝色部分样本微调后的网络提取出来的特征进行的)。文中没有给出半监督k-means聚类的详细描述,参考西瓜书第13.6节半监督聚类和Generalized Category Discovery后这里给出一个简单的方案:

首先,根据锚探测类集获取 C r a l C^l_{ra} Cral个初始类别中心,之后随机选取 C u + C r v l C^u+C^l_{rv} Cu+Crvl个样本作为其余类别的中心,之后根据k-means的原则进行迭代更新,但要保证锚探测类集中的样本要始终跟随真实标签,即k-means确定各类样本中心后重新计算各样本归属时不对锚探测类集中的样本进行计算,让它们始终跟随真实标签。

当然,此时 C u + C r v l C^u+C^l_{rv} Cu+Crvl中的 C u C^u Cu仍是不确定的,作者是通过遍历的方法进行寻优的。寻优就需要性能指标,由于参与聚类的样本分别为锚探测类集、验证探测类集和无标签数据集,并且锚探测类集始终跟随真实标签无需衡量性能,则只剩下后两个,对于前者,作者使用如下性能指标:

因为我们是知道验证探测类集的真实标签的,所以作者使用准确率来作为性能指标。与常规准确率不同的是,聚类结果并不是与真实标签直接对应的,需要将簇与真实标签匹配后取最高准确率,这就是为什么其中有个 max ⁡ \max max。当然,如果 C r v l C^l_{rv} Crvl较大,匹配起来可能比较复杂,作者使用了Hungarian algorithm来加快匹配速度。

另一个针对无标签数据的指标为Silhouette index:

其中, x x x为样本, a ( x ) a(x) a(x)为x与其它同簇样本的平均距离, b ( x ) b(x) b(x)为x到其它非同簇样本的最小距离。总之,就是一个衡量类内聚合程度和类间分离程度的聚类指标。

之后,两个指标的综合最优点对应的类别数作为初步的类别数量k,k= C r a l + C r v l + C u C^l_{ra}+C^l_{rv}+C^u Cral+Crvl+Cu。以k为总类别数再在探测数据和无标签数据上进行一次半监督聚类,并关注无标签数据的聚类结果,将特别小的簇(簇中样本数少于最大簇样本数的1%)去除,最后得到期望的 C u C^u Cu

2. 预训练与首次微调

为了使模型不会过于关注有标签数据,作者使用有标签数据和无标签数据对backbone进行预训练。预训练采用的是RotNet方法,这种自监督训练方法不需要使用标签,因此在有标签和无标签数据上都可以进行。

在预训练之后,为了提升模型对有标签数据的识别能力,作者在backbone后面加了一个分类头,分类头就是一个全连接层+softmax,头的大小等于有标签数据的类别数 C l C^l Cl。然后,利用有标签数据以交叉熵损失微调backbone的最后一个宏块和分类头。只进行微调的目的是不至于在有标签数据上过拟合,交叉熵损失函数如下:

其中, z i l z^l_i zil是通过backbone提取出的样本特征, η l \eta^l ηl指分类头。

3. 联合微调

对有标签的数据学习完了之后,不能顾此失彼,还需要对无标签数据进行学习。于是作者为无标签数据也增加了一个分类头,分类头的大小等于 C u C^u Cu,这就是我们先将如何确定 C u C^u Cu的好处。

有了分类头还要有标签和损失函数。然而,无标签数据没有标签,那么就应该为它找一个合适的标签。作者表示通常我们认为相似的样本应该属于同一个类别。那么,如果有两个样本比较相似,我们可以给它俩一个1的标签,即认为它们是同类,反之给标签0。

那么如何衡量两个样本是否相似或者能满足所期望的同属一类的要求呢?作者提出了一个称为Ranking statistics的方法。

如上图所示,作者是根据backbone输出的特征进行相似性判断的。具体来说,就是先对特征进行从大到小的排序,然后取出排名前k的值对应的原始索引(图中k=3),如果这些索引是相同的(不考虑顺序),标签 s = 1 s=1 s=1,否则 s = 0 s=0 s=0

Note: 对于一个样本来说,该方法需要给出同批次下该样本与其它所有样本的标签,计算强度还是挺大的。

有了标签还得有损失,才能做优化训练。作者使用了如下损失:

原始二元交叉熵长这样:
L = − 1 N ∑ i = 1 N y i ⋅ log ⁡ ( p ( y i ) ) + ( 1 − y i ) ⋅ log ⁡ ( 1 − p ( y i ) ) L=-\frac{1}{N}\sum_{i=1}^{N}y_i\cdot\log(p(y_i))+(1-y_i)\cdot\log(1-p(y_i)) L=N1i=1Nyilog(p(yi))+(1yi)log(1p(yi))

其中, y i y_i yi为真实标签, p ( y i ) p(y_i) p(yi)为预测概率。可以看出作者改动了传统的二元交叉熵,用 s s s代替原本的 y y y,用内积代替了预测分数。这样,当两个样本相似时, s = 1 s=1 s=1,内积较大,则损失较小;当两个样本不相似时, s = 0 s=0 s=0,内积较小,(1-内积)较大,损失较小。通过这个损失函数作者就达到了将相似样本归为一组的目的(因为不知道具体的类别,所以用组或簇比较合适)。

此外,作者发现,如果使用Ranking statistics根据特征判断是否样本相似并给出标签 s s s,在训练期间模型参数发生变化后特征也会随之改变,这可能导致每个epoch的 s s s都不一样。因此作者为了限制同一样本的特征表达的变化,使用了如下损失函数:

其中 η l \eta^l ηl η u \eta^u ηu分别指有标签分类头和无标签分类头, z ^ i l \hat z^l_i z^il z ^ i u \hat z^u_i z^iu分别是有标签数据和无标签数据的特征 z i l z^l_i zil z i u z^u_i ziu的随机变换(比如旋转)。这样,通过这个损失就限制了同一个样本每次更新会发生的变化,从一定程度上保证了 s s s的稳定。

那么,就可以得到最终损失:

其中 w ( r ) w(r) w(r)是一个sigmoid形状的函数。

为了保证模型不会忘记首次微调时学习的内容,即不失去识别有标签样本的能力,作者采用了联合微调方案,就是从有标签和无标签样本中随机选择送入模型进行微调。联合微调则是以最终损失对backbone的最后一个宏块和两个分类头进行参数优化。

在预训练、首次微调、联合微调完成后,模型就具备了识别有标签样本并聚类无标签样本的能力。至此,主要内容就讲清楚了,接下来简单说一下作者强调的该方法的两个额外的优势:方便增量学习和无监督聚类。

4. 其它亮点

A. 增量学习

增量学习就是希望模型能够不断学习新的类别知识同时不会忘记以前学习过的知识。

使用作者的方法可以形成如下的一个模型结构(最后的 L M S E L_{MSE} LMSE没有表现出来):

根据上图可知,当新类别被人工标记后,可以通过合并 η l \eta^l ηl η u \eta^u ηu实现对已知类分类头的扩充,然后另外增加一个新头用于发现新类即可。

B. 聚类

聚类任务不考虑有标签数据,直接对无标签数据进行分组。

所以作者可以去掉有监督部分,使用如下损失函数:

其中, L M S E L_{MSE} LMSE应不包含有标签部分。以作者的方法实现聚类则只需要如下两个步骤:
(1)使用无标签数据进行自监督预训练;
(2)使用上述目标函数在无标签数据上进行模型微调,微调仅针对backbone的最后一个宏块和无标签分类头。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fulin_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值