CLIP技术(深度学习–CLIP算法(文本搜图片,图片搜图片))
1. CLIP简介
CLIP全称Constrastive Language-Image Pre-training ,是OPAI推出的采用对比学习的文本-图像预训练模型 。CLIP惊艳之处在于架构非常简洁且效果好到难以置信 ,在zero-shot文本-图像检索 ,zero-shot图像分类 ,文本→图像生成任务guidance ,open-domain 检测分割等任务上均有非常惊艳的表现 ,本文将对CLIP做一些初步的介绍 。
2. CLIP模型简介
CLIP的基本算法原理如下 ,为了对image和text建立联系 ,首先分别对image和text进行特征提取 ,image特征提取的backbone可以是resnet系列模型也可以是VIT系列模型,text特征提取目前一般采用bert模型 ,特征提取之后 ,由于做了normalize,直接相乘来计算余弦距离 ,同一pair对的结果趋近于1 ,不同pair对的结果趋近于0,因为就可以采用对比损失loss(info-nce-loss) ,熟悉这个loss的同学应该都清楚 ,这种计算loss方式效果与batch size有很大关系 ,一般需要比较大的batch size才能有效果 。CLIP的模型如下图所示:
CLIP 能够成功 ,并且很难自己复现的一个重要原因就是CLIP用了大量的训练数据以及训练资源 ,真的可以说是大力出奇迹 。CLIP用了4亿的图像文本对进行训练 。伪代码如下:
编码 :通过图像&文本编码器 ,得分图像和文本特征 。 投影:首先通过投影矩阵将图像及文本特征映射到相同的维度大小 ,在进行L2 normalization (使得之后的点积操作直接等效于cosine similarity) 相似度计算:点积运算计算文本-图像的cosine similarity ,得到 n x n 矩阵的logits(模型预测) ,越接近1则说明模型预测该文本-图像对是配对的,否则不配对 。 计算loss:已知 logits 矩阵对角线的文本和图像是配对的 ,非对角线元素不配对 ,因此构造训练标签 np.arange(n),然后分别在图像维度(axis=0) 和文本维度(axis=1)计算loss 。以图像维度为例简单说明一下这里的逻辑 ,因为在计算相似度的时候 ,图像特征矩阵@文本特征矩阵得到的 n x n 矩阵,第一个n 代表的图像 ,因此我们在axis=0 计算图像维度的loss 。3. CLIP模型优缺点总结
优点
zero-shot做得好 ,经过在400million大的未清洗的数据集上训练 ,在不同的数据集上表现还可以 ,可以自定义任务 ,而且效率很高。 高效 ,虽然GPT3做zero-shot也很好 ,但是CLIP吃的资源少 ,计算量少 ,训练效率高 。最好的一版CLIP只在256个GPU上训练两周就好了,跟目前图像领域的其他大模型都差不多 。 灵活和通用:因为他们直接从自然语言中学习广泛的视觉概念 ,CLIP明显比现有的ImageNet模型更灵活和通用。我们发现他们能够轻松地完成许多不同的任务 。缺点
虽然CLIP通常在识别普通物体方面表现良好 ,但在更抽象或更系统的任务上却表现不佳 。比如计算图像中物体的数量,以及在更复杂的任务上 ,比如预测照片中最近的汽车距离有多近。在这两个数据集上 ,零射剪辑只比随机猜测好一点点 。与特定任务模型相比,Zero-shot CLIP在非常细粒度的分类上也很困难 ,比如区分汽车模型 、飞机变体或花卉种类之间的区别 。 对于未包含在其预训练数据集中的图像 ,CLIP的泛化效果也很差 。例如 ,尽管CLIP学习了一个有效的OCR系统 ,但当从MNIST数据集评估手写数字时 ,zero-shot CLIP仅达到88%的准确率 ,远低于数据集上99.75%的人的准确率 。(其实还行 ,毕竟不是专门在MNIST上跑的)4. CLIP模型开源方案
OPENAI方案:
github代码地址
论文介绍中文CLIP方案:
中文clip
CLIP图片搜索演示Demo
CLIP视频搜索演示Demo参考资料:CLIP介绍:连接图像与自然语言
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!