CLIP
提出背景:
之前的工作都是在固定的,已经确定好的类别上进行训练,若想在分类的类别上增加一类则需要网络进行重新的训练。
本文方法:
将图片输入进图片编码器(Res50或ViT)得到图片特征,将文本输入进文本编码器得到文本特征;通过使用对比学习方法,每个样本对为正样本,不是一对的为负样本。即对角线上的元素为正样本,除对角线的样本均为负样本。
在推理过程中,拿到图片的特征去和所有的文本特征计算余弦相似度,图片和文本中哪个最相似,则分为哪个类别,完成分类任务。
其中I的维度为(batch_size,高,宽,通道数),T的维度为(batch_size,文本长度)
将I T输入进对应的编码器encoder中得到特征
训练时的track
- temperature对模型的影响很大,但调不动,所以训练时让模型自行学习了。
- 在训练的时候文本部分都是句子,但在推理时给的类别都是单词,所以给个prompt,将单词变成一句话再输入进编码器。
- 泛化性能差,若推理的图片与训练集中4亿个图片差距很大的话,还是无法进行分类。比如mnist数据集就不存在在训练集中,所以表现效果差。
- 在一些情况下,CLIP的few-shot效果比zero-shot还差,若只给了少量的图片做finetune,那还不如不给。
本博客参考b站沐神论文精读系列中朱毅大神的CLIP论文讲解