论文Tip-Adapter: Training-Free Adaption of CLIP for Few-Shot Classification

tag:adapter,clip

一言以蔽之:一种借助了clip预训练模型的few-shot工作,其处理数据手段富有想象力。

Method

首先是编码的部分,作者自然是充分利用了clip encoder,对于n-way k-shot,一共nk张training image,先统一经由clip encoder形成维度为c的feature;另一边,将这nk张image的n种label转换成one-hot code。表示为了key value pair的形式,分别记在集合\mathbf{F}_{train} \mathbf{L}_{train}

4_p1.png

对于test,同样处理成了一个维度是c的feature,记作f_{test}

4_p2.png

最重要的是cache model部分

\varphi(f_{test}\mathbf{F}^T_{train})L_{train}

其中,\varphi(\cdot) 表示一个非常复杂的计算,f_{test}\mathbf{F}^T_{train} 挨个就是计算相似度,那么为什么要这个\varphi(\cdot) 呢?我研究了一下表达式的值域,最后觉得就是为了得到一个(0,1)之间的数,处理的很巧妙啊!其维度(1\times C)\times(C\times NK)\times(NL\times N)=1\times N,所以\varphi(f_{test}\mathbf{F}^T_{train})L_{train} \in \mathbb{R}^{1\times N}

这里还有一个借助clip预训练的先验知识部分,他利用图片label(a image of {label})生成了一串信息,记作了W_c^T\in \mathbb{R}^{C\times N}f_{test}\times W_c^T\in \mathbb{R}^{1\times N}

4_p4.png

最后的最后,用一个因子\alpha 做一个平衡,结果是1\times N 的向量,自然得到结果。

把cache model中的key作为可学习的初始化参数,如此可以得到一个变体,叫做tip-adapter-F,在这上面做微调可以得到更好的结果。

strength

  1. 这是总结到的第一篇clip的文章,当初我在读clip时其实没有想到可以这么用于few-shot,也可能是那个是还没接触到小样本学习。非常有想象力的工作,用到了clip预训练的模型,再把相似度的计算也加入到内,而且能设计这么一个cache mode的形式进行处理,我怎么想不到捏?

  2. 除此之外还使用了一个clip‘s classifier更好的利用clip的预训练模型生成基于文本信息的特征,算得上是物尽其用。

思考

  1. 这里使用独热码是可以替代的,我没想明白为什么用独热码,至少是数据效率不太高。

  2. 最后提出的tip-adapter-F有点厉害的,我没想到可以在key上做微调。这倒是和1.结合起来了,key能微调而value是onehot code不微调,作何解释的蛮清楚。但是我没想明白这么做的动机啊,也不知道只在key上微调是不是和只在clip visual encoder做微调效果一样,毕竟这里的key值本身就是从上面的encoder来的。