1、摘要
提出多模态GCD任务,理论分析认为核心在于模态对齐,所以在特征层和输出空间用对比学习和蒸馏技术进行对齐
- 特征空间用对比学习对齐
- 输出空间用蒸馏技术对齐
实验上取得好结果
2、引言
介绍新类发现任务,一部分数据类别已知,新输入的数据包含旧类别和新类别,不仅要能识别旧的类,还要能识别新类,在开放世界场景中有重要价值。
之前的很多任务只利用单模态数据,本文扩展到多模态场景。但也带来了新的挑战,即如何利用这些异构的数据,如果多模态之间的数据没有很好对齐,模型会受到影响。因此提出MM-GCD,直接解决GCD中的对齐问题。
划分为两个阶段,一个是特征空间构建,在这里引入对比学习来进行对齐,另一个是对特征空间进行类别划分,引入蒸馏技术,具体而言,一个模态产生的预测可以作为另一个模态的学习目标,并结合熵最小化来进一步增强不同模态预测之间的一致性。
对比学习区分谁应该近谁应该远,蒸馏是让两个分支互相模仿
——主要读一下用的什么基线,怎么对齐和执行后续步骤的,感觉做的不是很难。
3、相关方法
多模态学习:拼接等聚合方法,对比学习作为对齐方法(通常在大规模数据集上进行过预训练)
新类发现任务:旨在从无标签数据中识别并划分此前从未见过的新类别,无标签里全是新类,把他们聚合起来
广义类别发现:无标签数据里有旧类也有新类
4、理论分析
最开始直接拼接用CLIP提取的两个模态的特征,比单模态效果还要差
认为是模态的信息没有对齐导致的干扰拉低性能,所以从数据分布角度进行理论推到,分析模态对齐对任务的影响。
对于一个多模态数据集 (X,Y),这里 X 和 Y 分别表示来自两个不同模态的特征随机变量。Xk,Yk分别表示第 k 个类别在两个模态中的特征随机变量。
假设每个类别的特征数据服从高斯分布,Xk∼N(μXk,SXk) Yk∼N(μYk,SYk) 拼接之后的分布是Fk∼N(μFk,SFk) 所以,μFk是μXk和μYk拼接的向量(因为这里是一个簇的样本的特征,所以均值是向量,融合后的均值是拼接后的向量),协方差矩阵为:
SXkYk是交叉协方差,可以理解为,第 k类中,图像特征变化的时候,文本特征是不是也以某种对应方式发生变化?如果毫无关系,会比较弱,相当于把模态对齐转化为了跨模态相关性
定义:SXkYk=SXk1/2 Rk SYk1/2. Rk是一个对角矩阵,模态相关时,ρ趋于1
用协方差矩阵的行列式衡量类别是否紧凑,协方差越小,说明类别越紧凑,也就更容易被算法识别
那么对齐为什么会让联合分布更紧凑?其实后两项由数据分布的性质决定的,只有R越大,LF才越小,R越大就是ρ要越大。
对齐越好,拼接之后的协方差矩阵行列式更小,类别内部分布的紧凑度会更高,也就更容易区分
5、本文方法
基于理论分析,审视了单模态GCD场景中损失函数的设计,在原有单模态的基础上,加上跨模态对齐的学习目标。
5.1 发现一个新类别需要什么条件?
- 第一步,需要一个能够区分不同类别的嵌入空间
- 第二步,需要对这个空间进行有效划分,并且划分后要包含新类别
其实对应的是表征学习和参数化分类(这两个点倒是挺对的,严肃学习)
本文方法就是在这两个步骤里都加入跨模态对齐的信息,也就是前面说的,在表征学习里加入对比学习,在划分的输出空间里互相蒸馏。
5.2 表示空间构造
定义三种正样本对,hi是特征空间,zi是用于做对比学习的映射空间
第一种:同一个样本的两个视图(有一个增强样本),感觉这里说的有点奇怪,因为这里给的是无监督对比学习的损失函数,其实正负样本对都给出了
第二种:有监督对比学习,Ni表示和xi有相同真实标签的样本集合,可能因为有增强视图,所以这里的正样本也是同类其他样本的增强样本,j应该也属于Bl
——本来我质疑没写r不等于i,那就退化到第一类了,但是想了想,第一类是无监督,所有样本都做,第二类是有监督,只针对有标签的样本,其实是造成了一些不必要的
第三种:跨模态对比学习,认为同一个样本中不同模态的表示层是正样本对
可以理解为前两个损失是模态内的,样本级别一致性,学习类别结构,第三个才是做对齐。
三种对比损失结合在一起,形成嵌入表示层的约束。
5.3 划分嵌入空间
借鉴simGCD,使用参数化分类器,先构建所有类别的可学习类别中心,然后让每个样本计算属于每个类别中心的概率,分类部分也设计了三个层次的loss
第一类:所有样本的自蒸馏损失,用增强样本得到一个更尖锐的算标签qi,再用pi去你和qi
第二种:用有标签数据修正类别中心,这里上面应该是s吧,supervise,这里其实是p去拟合y
第三种:多模态原型蒸馏,这里其实互相蒸馏了,因为这个公式只是后者对齐前者,实际两个都要蒸馏
除此之外,不同模态对于未知类别的结果可能不一致,比如同一个新类别可能被分到不同的cluster,所以在计算损失之前,使用 Hungarian algorithm 做 label mapping,以寻找最优的类别对应关系
但没有ground truth,怎么知道cluster之间的对应关系是什么
因为一个mini batch有很多成对样本,看两个分支的预测结果,,会构造一个共现矩阵,意思是横向模态的的第一类样本落在另一个模态的第三类,第二类样本在另一个模态的第一个类别,这样匹配上。只是产生一个mapping,可是这个
如果在初始化阶段匹配错了呢?
——可能因为不是随机初始化的,而是用了预训练的大模型,而且只微调最后一个block
这个和聚类不太一样的就是,预训练的CLIP,image encoder和text encoder作为backbone,前面大部分层冻结,损失函数作用在最后一个transformer block来参与微调,同时 projection head、后面的 prototype classifier / fusion 等可训练部分也一起优化。总之参数会反向传播
6、实验
7、总结
8、我的思考
之前对于新类发现任务和多模态任务觉得很复杂,但是看完这个确实觉得就那么几步,最重要的就是映射到好划分的表示空间,再进行划分,只是多了一些无标签数据而已,只是要解决一些问题来提升性能而已。重点在于,为什么现有方法学出来的空间还不好聚?后面看GCD的论文就可以看他们主要是作用在哪个地方,或者是两者交叉的地方。
新类发现的时候不同模态对于新类别的标识可能不一致,所以要mapping