上个专题介绍了多模态的发展及相关概念,其中在多模态预训练阶段目前主要的架构分为三种,分别为双塔结构,单塔结构以及混合结构。今天小源将对以CLIP为代表的双塔结构进行讲解。
在OpenAI在21年2月开源了论文和代码后,CLIP在两年之内已经已经有了10k+的stars,可见其影响之广。CLIP主要的贡献就是利用无监督的文本信息,作为监督信号来学习视觉特征,并使用对比学习这样一个简单的自监督任务来进行跨模态的对齐。同时在一定程度上改变了传统图像分类的范式,提出了一个全新的Retrival-based 的Zero-Shot分类策略,基于这种分类范式,可以对任意新类别进行识别而无需重新训练模型。从而解决了传统CV模型的三大难点:
当前的CV数据集标注劳动密集,成本高昂;
模型在单一任务上优秀,但难迁移到新任务;
泛化性和鲁棒性堪忧。
接下来将会从数据到模型以及训练方案对CLIP进行介绍。
具体来说,CLIP论文搜集了来自互联网上的4亿高质量的文本图像对,作为原始的训练数据,这些图文对是一一匹配的(在网页中,开发者一般都会为图片添加一段文字备注)。其爬取策略如下:设置50k 个 文本 Query,每个 Query 爬取最多 20k 张图像,最终获取了一共 400M 图文对。其中50k 个文本Query 由 Wikipedia 高频词组成,然后做bi-gram 形成一些高频词组,再补充一些 Wikipedia 高频文章名称和 WordNet 同义词组。
CLIP为典型的双塔结构,即一个 image encoder 和一个 text encoder。image encoder 是 ResNet 的改进版(添加了多个 stem 层和 attention pooling)或直接使用 Vision Transformer (ViT);text encoder 基于 GPT-2 的 transformer。
(1)在训练阶段,对于一个batch 的数据:
首先通过文本编码器和图像编码器,得到文本和图像的特征,
接着将所有的文本和图像特征分别计算内积(余弦相似度),就能得到一个矩阵,
然后从图像的角度看,行方向就是一个分类器,从文本角度看,列方向也是一个分类器。
在训练的时候我们采用的是跨模态对比学习损失,要做的就是拉近图文正样本之间的距离,使其余弦相似度接近于1,拉远图文负样本之间的距离,使其余弦相似度接近于0。由于我们已经知道一个batch中的文本和图像的匹配关系,所以目标函数就是最大化同一对图像和文本特征的内积(正例),而最小化与不相关特征的内积(负例)。而看这个相似性矩阵可以发现正例都在对角线位置,负例都在非对角线位置,因此使用一个交叉熵即可实现跨模态对比学习,交叉熵的GT为对角线索引。如下图为CLIP PyTorch版本伪代码:
(2)在推理阶段(zero-shot分类),则将分类问题转化为了检索问题:
首先将需要分类的图像经过编码器得到特征;
然后对于目标任务数据集的每一个标签,或者你自己定义的标签,都构造一段对应的文本,如上图中的 dog 会改造成 "A photo of a dog",以此类推;
然后所有类别文本经过文本编码器得到文本特征,接着将图像特征与所有文本特征做内积,内积最大对应的标签就是图像的分类结果。
CLIP的zero-shot迁移能力非常强。最终在ImageNet分类问题上,CLIP无需使用ImageNet标注数据训练,通过zero-shot分类效果就可以达到ResNet监督训练结果,并且泛化性和鲁棒性更好。
(1)原始OpenAI代码和模型
原始OpenAI开源了 4亿数据规模下训练的ResNet50/Resnet101,ViT/B 32,ViT/B 16 以及ViT/L 14的模型,模型和代码地址:https://github.com/openai/CLIP
(2)open clip开源版本代码和模型
但是原始的CLIP代码只提供模型和推理代码,第三方开源的open clip则提供了训练脚本,并且在2B数据上训练了ViT-H/14和ViT-g/14版本的模型。开源模型和代码地址:https://github.com/mlfoundations/open_clip
(3) chinese-clip 开源中文版本CLIP代码和模型
阿里达摩院基于200M中文图文数据训练了中文版本的CLIP模型(tiny-huge),同时提供了训练脚本。开源模型和代码地址:https://github.com/OFA-Sys/Chinese-CLIP
(4)eva clip开源版本代码和模型
北京智源也训练了ViT-H/14和ViT-g/14版本的模型,开源模型和代码地址:https://github.com/baaivision/EVA/tree/master/clip
经过两年多的时间,CLIP已经在许多任务中展现了其强大能力,各种多模态指导其他任务(比如目标检测,语义分割)的工作也越来越多,而且效果非常惊艳,后面小源将会带着大家一步步揭开多模态的神秘面纱!
今后我们会在发布一些关于AI学习方面的资料,有兴趣的小伙伴可以点点关注。内容包括但不限于最新的多模态/CV领域论文代码,一些国内外AI竞赛baseline以及赛后总结,多模态,CV等领域的专题分享,锁定小源,一起成长!
【入群邀请】因为大多数资料论文较大,有想系统学习多模态/CV知识,了解多模态/CV最新前沿论文的同学可以进入分享群(添加微信拉入),群内每天更新论文和相关代码!