目录
- 摘要
- [训练pre-train model的过程](#训练pre-train model的过程)
- [将pre-train model应用于下游任务](#将pre-train model应用于下游任务)
- 应用(待更新)
论文/项目地址:https://github.com/OpenAI/CLIP
提供了clip的pre-trained model的权重,也可安装使用pre-trained model
摘要
使用标签标注的图像数据集具有规模不足、费时费力的缺点。所以作者提出了使用(text,image)的数据训练预训练模型(pre-train model) ,实验结果表明pre-train model在下游任务(图像分类、ORC等)中表现出色。例如:pre-train model在图像集ImageNet中的ACC高于Resnet(有监督训练的模型)在其上的ACC(准确率)
训练pre-train model的过程
从图中矩阵可看出 正样本为写对角线元素共N个,负样本为其他元素共 N 2 − N N^{2}-N N2−N个。
实现的核心代码如下所示:
1、将输入的图片使用resnet或其他模型提取特征向量I_f,将输入的文本使用transformer或其他模型提取特征向量T_f。
2、对前一步生成的特征向量分别加权重向量生成I_e和T_e。
3、两个向量相乘生成NxN的矩阵logits
4、最大化批处理中N对实数对图像和文本嵌入的余弦相似度,同时最小化 N 2 − N N^{2}−N N2−N对错误对嵌入的余弦相似度。
重点来了labels为[0,1,2...,n-1]的向量,表示正确类别的索引值。
5、总结:模型输入(text,image);输出------text和image的特征向量。最终的目的是训练image encoder和text encoder,其中训练过程中的loss为步骤4中的内容。
将pre-train model应用于下游任务
传统的视觉模型需要在新的数据集上进行微调,而clip可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类。
操作步骤:
1、根据任务的分类标签构建每个类别的描述文本:A photo of {label},然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为N,那么将得到N个文本特征;
2、将要预测的图像送入Image Encoder得到图像特征,然后与N个文本特征计算缩放的余弦相似度(和训练过程一致),选择相似度最大的文本对应的类别作为图像分类预测结果,进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率。
应用(待更新)
styleclip
clipdraw
clips
参考:https://openatomworkshop.csdn.net/664ee0a5b12a9d168eb70230.html