分享一篇今年发表在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所示,图片的标签和图片本身所表达的内容可能是不相关的,这样就会导致负样本的质量不好从而影响模型效果。

因此, 就需要寻找新的方法来提高负样本的质量,这个时候作者想到了用聚类的思想来训练模型,利用最传统的聚类算法K-means先在细粒度(fine-grained)的样本中找到聚类中心(cluster centers),再在粗粒度(coarse-grained)的样本中用fine-grained的聚类中心作为条件(conditions)训练CLIP。
方法
这一部分将讨论原文是怎么聚类,怎么训练CLIP,以及怎么应用到下游任务的。
聚类
在这部分开始之前,需要先介绍细粒度和粗粒度的概念。比如说,对于猫狗数据集,我们都知道有两个大类,分别是猫和狗,这两类可以称之为粗粒度层面的类别;但对于猫的类别来说,又可以细分为睡觉的猫、爬树的猫等等,这些类别就称之为细粒度的类。
原文提出了一种two-step K-means clustering算法,本质上是一种层次聚类,首先使用细粒度聚类来产生具有相似语义的簇,使得簇中心具有代表性(步骤1 ),然后根据细粒度簇的聚类中心来确定粗粒度层面上的簇,达到训练成experts的目的(步骤2 )。这样,就不再使用单一的粗粒度中心,而是用细粒度的聚类中心来表征conditions。
注意这个聚类算法是基于标签的特征嵌入来计算的聚类中心。
步骤1 细粒度聚类
由于CLIP的预训练集实在是太大了,如果直接用它来做K-means聚类,显然是费时费力的。所以原文首先从预训练集