当前位置:首页|资讯|OpenAI|编程

多模态那些事-2.多模态明星CLIP

作者:AI做题家发布时间:2023-01-10

    上个专题介绍了多模态的发展及相关概念,其中在多模态预训练阶段目前主要的架构分为三种,分别为双塔结构,单塔结构以及混合结构。今天小源将对以CLIP为代表的双塔结构进行讲解。

1、CLIP意义

    在OpenAI在21年2月开源了论文和代码后,CLIP在两年之内已经已经有了10k+的stars,可见其影响之广。CLIP主要的贡献就是利用无监督的文本信息,作为监督信号来学习视觉特征,并使用对比学习这样一个简单的自监督任务来进行跨模态的对齐。同时在一定程度上改变了传统图像分类的范式,提出了一个全新的Retrival-based 的Zero-Shot分类策略,基于这种分类范式,可以对任意新类别进行识别而无需重新训练模型。从而解决了传统CV模型的三大难点:

  • 当前的CV数据集标注劳动密集,成本高昂;

  • 模型在单一任务上优秀,但难迁移到新任务;

  • 泛化性和鲁棒性堪忧。

接下来将会从数据到模型以及训练方案对CLIP进行介绍。

2、图文数据获取

      具体来说,CLIP论文搜集了来自互联网上的4亿高质量的文本图像对,作为原始的训练数据,这些图文对是一一匹配的(在网页中,开发者一般都会为图片添加一段文字备注)。其爬取策略如下:设置50k 个 文本 Query,每个 Query 爬取最多 20k 张图像,最终获取了一共 400M 图文对。其中50k 个文本Query 由 Wikipedia 高频词组成,然后做bi-gram 形成一些高频词组,再补充一些 Wikipedia 高频文章名称和 WordNet 同义词组。

多模态图文数据对

3、算法原理

      CLIP为典型的双塔结构,即一个 image encoder 和一个 text encoder。image encoder 是 ResNet 的改进版(添加了多个 stem 层和 attention pooling)或直接使用 Vision Transformer (ViT);text encoder 基于 GPT-2 的 transformer。

(1)在训练阶段,对于一个batch 的数据:

CLIP模型训练阶段
  • 首先通过文本编码器和图像编码器,得到文本和图像的特征,

  • 接着将所有的文本和图像特征分别计算内积(余弦相似度),就能得到一个矩阵,

  • 然后从图像的角度看,行方向就是一个分类器,从文本角度看,列方向也是一个分类器。

       在训练的时候我们采用的是跨模态对比学习损失,要做的就是拉近图文正样本之间的距离,使其余弦相似度接近于1,拉远图文负样本之间的距离,使其余弦相似度接近于0。由于我们已经知道一个batch中的文本和图像的匹配关系,所以目标函数就是最大化同一对图像和文本特征的内积(正例),而最小化与不相关特征的内积(负例)。而看这个相似性矩阵可以发现正例都在对角线位置,负例都在非对角线位置,因此使用一个交叉熵即可实现跨模态对比学习,交叉熵的GT为对角线索引。如下图为CLIP PyTorch版本伪代码:

CLIP算法伪代码

(2)在推理阶段(zero-shot分类),则将分类问题转化为了检索问题:

CLIP Zero-Shot分类流程
  • 首先将需要分类的图像经过编码器得到特征;

  • 然后对于目标任务数据集的每一个标签,或者你自己定义的标签,都构造一段对应的文本,如上图中的 dog 会改造成 "A photo of a dog",以此类推;

  • 然后所有类别文本经过文本编码器得到文本特征,接着将图像特征与所有文本特征做内积,内积最大对应的标签就是图像的分类结果。

    CLIP的zero-shot迁移能力非常强。最终在ImageNet分类问题上,CLIP无需使用ImageNet标注数据训练,通过zero-shot分类效果就可以达到ResNet监督训练结果,并且泛化性和鲁棒性更好。

ImageNet Zero-Shot效果对比

4、CLIP代码和模型

(1)原始OpenAI代码和模型

    原始OpenAI开源了 4亿数据规模下训练的ResNet50/Resnet101,ViT/B 32,ViT/B 16 以及ViT/L 14的模型,模型和代码地址:https://github.com/openai/CLIP

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

5、小结

经过两年多的时间,CLIP已经在许多任务中展现了其强大能力,各种多模态指导其他任务(比如目标检测,语义分割)的工作也越来越多,而且效果非常惊艳,后面小源将会带着大家一步步揭开多模态的神秘面纱!

今后我们会在发布一些关于AI学习方面的资料,有兴趣的小伙伴可以点点关注。内容包括但不限于最新的多模态/CV领域论文代码,一些国内外AI竞赛baseline以及赛后总结,多模态,CV等领域的专题分享,锁定小源,一起成长!

【入群邀请】因为大多数资料论文较大,有想系统学习多模态/CV知识,了解多模态/CV最新前沿论文的同学可以进入分享群(添加微信拉入),群内每天更新论文和相关代码!

添加微信二维码,加好友后进群




Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1