CVPR 2024 论文研读 《MoDE: CLIP Data Experts via Clustering》

        分享一篇今年发表在CVPR上的论文,在此记录一下看完这篇文章的收获,有问题欢迎友好交流,玻璃心轻点骂。

        回归正题,MoDE是model of data experts的首字母缩写,意味着这篇文章是利用CLIP作为模型基础的,那么为什么要叫experts呢?首先我们知道CLIP是一种基于图像和文本成对的预训练模型,它的网络框架既有transformer,也有resnet,当然比较常用的还是ViT-B/32或者ViT-B/16,这两者的区别就是网络深度不同,更深的网络还有ViT-L/14,本文也是基于ViT的网络框架来进行实验的。其次,聚类本来作为一个下游任务,但似乎被越来越多的用到了嵌入空间去提取更好的嵌入特征,同样是CVPR2024的一篇文章证明了这样做的效果是不错的[1],今天的这篇文章同样是利用到了聚类的思想,通过在粗粒度中使用细粒度的聚类中心来聚类来把CLIP训练成experts,至于为什么是experts而不是expert,则是因为原文设计使用好几个CLIP独立地训练,也就是一种在集成意义下的模型框架。

        原文链接在这里:[2404.16030] MoDE: CLIP Data Experts via Clustering (arxiv.org)

 动机

        OpenAI提出的CLIP虽然引发了轰动,但依然存在局限性,比如它的效果十分依赖于选取的负样本的质量,而有的时候图片的标签与图片本身就存在不一致的问题,如图1所示,图片的标签和图片本身所表达的内容可能是不相关的,这样就会导致负样本的质量不好从而影响模型效果。

图1

        因此, 就需要寻找新的方法来提高负样本的质量,这个时候作者想到了用聚类的思想来训练模型,利用最传统的聚类算法K-means先在细粒度(fine-grained)的样本中找到聚类中心(cluster centers),再在粗粒度(coarse-grained)的样本中用fine-grained的聚类中心作为条件(conditions)训练CLIP。

方法

       这一部分将讨论原文是怎么聚类,怎么训练CLIP,以及怎么应用到下游任务的。

聚类

        在这部分开始之前,需要先介绍细粒度和粗粒度的概念。比如说,对于猫狗数据集,我们都知道有两个大类,分别是猫和狗,这两类可以称之为粗粒度层面的类别;但对于猫的类别来说,又可以细分为睡觉的猫、爬树的猫等等,这些类别就称之为细粒度的类。

       原文提出了一种two-step K-means clustering算法,本质上是一种层次聚类,首先使用细粒度聚类来产生具有相似语义的簇,使得簇中心具有代表性(步骤1 ),然后根据细粒度簇的聚类中心来确定粗粒度层面上的簇,达到训练成experts的目的(步骤2 )。这样,就不再使用单一的粗粒度中心,而是用细粒度的聚类中心来表征conditions。

       注意这个聚类算法是基于标签的特征嵌入来计算的聚类中心。

步骤1 细粒度聚类

       由于CLIP的预训练集D实在是太大了,如果直接用它来做K-means聚类,显然是费时费力的。所以原文首先从预训练集D中均匀采样一个子集D\prime,并且D\prime的数量远远小于D。然后,在D\prime上进行K-means训练:

式中:S为学习到的细粒度聚类中心集合。需要注意的是,细粒度簇的数量m = | S |可以很大,使得每个簇的簇中心能够很好地代表每个簇的连贯语义信息。

步骤2 粗粒度聚类

其中每个粗粒度聚类中心c \in C是data experts的条件。记n = | C |为experts的个数,其中n远小于m,S_c为分配给data expert f ( \cdot | c )的细粒度簇的集合,其中S =\cup_{ c \in C} S_c 。

训练

        接下来,为每个expert制定训练数据。首先收集每个细粒度簇s分配的数据:

        训练一个expertf ( \cdot | c ),其对应的CLIP训练数据为:

        为了方便,原文使用MoDE-n来表示具有n个CLIP data experts的系统。为了提高训练效率,所有的experts都来自于同一个CLIP模型,该CLIP模型在整个集合D上进行部分训练。然后,每个expertf ( \cdot | c )只在D_c上进行训练。

适应下游任务

        原文分别对两个任务进行了实验:零样本分类任务,零样本检索任务。

式中:p ( c | \mathbf{T} )为data expertf ( \cdot | c )的归一化权重,若权重接近于零,则这些experts不用于推理。权重与任务\mathbf{T}和条件c的元数据之间的相关性即相似度成正比。

        接下来就是求相似性矩阵\mathbf{A},因为p ( c | \mathbf{T} )正比于\mathbf{A}(原文并未给出p ( c | \mathbf{T} )的具体定义式),知道\mathbf{A}的定义自然也就可以度量p ( c | \mathbf{T} )。将真实的类名集合L作为元数据,定义类与数据专家的相似度矩阵为\mathbf{A} \in \mathbb{R}^{| L | \times m}。为了计算\mathbf{A},通过计算由相同的编码器产生的细粒度聚类中心的嵌入e_s和类l \in L的嵌入e_l的距离(相似性),再用一个温度参数\lambda \in \mathbb{R} ^+来控制相似度的分布。(但这里我暂时不太懂为什么有负号,我的猜测是不是因为如果没有负号当两者距离很大的时候,温参不管设大设小,最终的相似性都很大,而有了负号后,当两者距离很大的时候,就可以让最终的相似性变小,这样是合乎直觉的。)

        对于零样本分类任务而言,利用标签L作为元数据,因此权重为:

原文发现,对于每个类l \in L,使用最近邻的细粒度聚类中心(\textrm{\textrm{}arg max} _{s \in S} \mathbf{A}_{l , s})足以减少权重中的噪声。

        零样本检索任务包括文本检索和图像检索。对于文本检索,其中每个图像用于从大型语料库Q中检索文本,我们利用Q作为元数据来构建相似度矩阵\mathbf{A} \in \mathbb{R}^{| Q | \times m}。与分类任务类似,集成的权重可以自然地用于MoDE:

其中,每个词条\mathbf{A}_{q , s}  =\mathrm{exp} ( -\left \| e_q - e_s \right \| ^{2}_{2}/ \lambda),其中e_q是文本q的嵌入。

        对于图像检索,其中每个文本q单独检索一幅图像,我们将文本q的检索视为一个独立的任务\mathbf{T}_q,使得集成权重为p ( c \mid \mathbf{T}_q ) \propto \mathrm{exp} (\sum _{s \in S_c} \mathbf{A}_{q , s})

实验结果

        原文使用MetaCLIP 中收集的数据集进行评估,并在两个尺度上对图像-标签对进行实验:400M (与OpenAI CLIP中的量表类似)和2.5 B尺度的MoDE。对所有图像进行人脸模糊预处理,并对基准图像进行去重处理。

        设置细粒度簇的数量m = 1024,并在下面的MoDE-2和MoDE-4(2、4表示expert的数量)中报告性能,通过增加所有评估任务上的数据专家模型的数量来直接显示性能的提高。

零样本图像分类实验

        为了公平比较,MetaCLIP 作为基线。Open AI CLIP ( WIT400M数据) 和Open CLIP ( LAION - 400M数据、LAION - 2B数据) 的checkpoints也被重新评估以进行公平比较。

结论:MoDE - 2和MoDE - 4始终优于MetaCLIP Baseline,MoDE - 4平均得分最高。

零样本检索实验

如表4所示,学习数据专家可以在所有模型尺寸上一致地提高分数,特别是在COCO上,在ViT - B / 16模型中,图像到文本和文本到图像检索的R @ 1分别提高了3.3 %和2.7 %,并且达到了最好的性能。 

聚类的有效性实验

        虽然模型集成可以在单个模型上提供增益,但原文讲到他们感兴趣的是,在相似分布上训练的模型的朴素集成与数据专门化的MoDE相比如何表现。表5中,在相同的训练数据上训练两个ViT - B / 32 CLIP模型,不进行聚类,然后将模型输出取平均值进行预测( Full-2 )。这达到了与基线类似的性能。因此,聚类对于MoDE来说是必不可少的。此外,原文还将训练数据随机分为两个子集,并为每个子集指定一个数据专家( Random-2 )。为了公平比较,模拟了采用MoDE - 2中的随机分裂的子集尺寸,并且所有数据专家使用相同的种子模型。由于数据拆分不是通过聚类得到的,仍然只使用模型输出的平均值进行评估。

然而,当在2.5 B图像字幕对( 60.0 vs 59.8)上训练时,Random2可以提供较小的改进,但当在400M图像字幕对( 57.7vs 58.2)上训练时,Random2有明显的下降。 

聚类策略的有效性实验

一个是验证两步聚类的有效性,提出了用一步聚类来作比较;另一个是验证第二步中在粗粒度中使用细粒度簇作为聚类中心的有效性,对比了使用粗粒度簇作为聚类中心的效果。 

MoDE-n 实验

可以发现,当数据专家逐渐被纳入时,模型的性能也在不断提高。 

        原文还做了零样本的鲁棒性验证,具体实验结果详见原文。

总结

        整体下来,这篇文章主要是提出了在细粒度和粗粒度两个层面上进行聚类来提高CLIP中负样本的质量,从而实现了比OpenAI CLIP以及MetaCLIP更好的结果。具体的想法和细节,我可能会等看完代码后在进行补充。

  • 32
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Little_Dream_etc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值