科技 > 人工智能 > aigc

AIGC系列之:CLIP和OpenCLIP

105人参与 2024-08-05 aigc

目录

模型背景

clip模型介绍

相关资料

原理和方法

image encoder

text encoder

对比学习

预训练

zero shot预测

优势和劣势

总结

openclip模型介绍

相关资料

原理

结果

用法

模型总结


模型背景

stable diffusion主要由三个核心模块组成:

        文本编码器负责处理语义信息。通常是利用clip(v1版本)、openclip(v2版本)等模型将人类语言(文字)编码为计算机语言(语义向量)。训练clip(openclip)则需要一个图文配对的数据集。数据集来自laion-5b,由50亿个图片以及图片对应的标签组成。包含23.2亿的英文描述,22.6亿个100+其他语言以及12.7亿的未知语。

clip模型介绍

        clip(contrastive language-image pretraining), 是openai利用4亿张互联网上找到的图片,以及图片对应的alternative文字训练的多模态模型。不仅可以拿来做常见的图片分类、目标检测,也可用来优化业务场景的商品搜索和内容推荐。clip能够基于视觉和语言相互关联的方式,实现无监督或弱监督的图像分类任务,并在多项视觉和语言任务中取得了优异的性能。stable diffusion v1中使用openai的clip的 vit-l/14进行文本嵌入。

相关资料

  论文地址:https://arxiv.org/pdf/2103.00020.pdfarxiv.org/pdf/2103.00020.pdf

  代码地址:https://github.com/openai/clipgithub.com/openai/clip

  官方解读博客:https://openai.com/research/clipopenai.com/research/clip

  一些好的博客:

  https://zhuanlan.zhihu.com/p/625165635

  https://juejin.cn/post/7264503343996747830

  https://juejin.cn/post/7241859817563389989

原理和方法

        clip模型的核心思想是将视觉和语言的表示方式相互联系起来从而实现图像任务。clip模型由两个主体部分组成:text encoder和image encoder。这两部分可以分别理解成文本和图像的特征提取器。clip模型采用了对比学习(contrastive learning)和预训练(pre-training)的方法,使得模型能够在大规模无标注数据上进行训练,并学习到具有良好泛化能力的特征表示。

image encoder

        对于 image encoder,clip使用“vit-l/14@336px”这个模型,也就是架构为large,patch_size = 14的vit,同时在整个clip预训练结束后,用更高分辨率(336*336)的图片做了一个epoch的fine-tune,目的是让clip能涌现出更好的效果。与text encoder类似,每张图片对应一个最终特征表示向量ii。

text encoder

        对于 text encoder,使用改进版的 transformer,一个带有8个注意头的 63m 参数的12层512宽 transformer 模型,clip借鉴的是gpt2的架构。对于每条prompt,在进入text encoder前,都会添加表示开始和结束的符号[sos][eos]。最终将最后一层[eos]位置的向量作为该prompt的特征表示向量。然后通过 ln,后接 linear 层投影到多模态空间中。

对比学习

          对比学习是一种学习相似性度量的方法,是通过将同一组数据中的不同样本对进行比较,来学习它们之间的相似度或差异度。在clip模型中,对比学习被用来训练模型学习视觉和语言的相互关系。clip模型将图像和文本映射到同一表示空间,并通过对比不同图像和文本对之间的相似性和差异性进行训练,从而学习到具有良好泛化能力的特征表示。假设一个batch中共有n对<图像,文字>对,那么它们过完各自的encoder后,就会分别产生:

        这两组向量,将会分别过一次多模态embedding(multimodal embedding) ,也就是在图中代表文字的紫色向量下,还有一层参数wt(图中没有画出来),文字向量需要先和wt做矩阵相乘后,才能得到最终的文字向量。对图片向量,同理也有个对应的wi。wt,wi 的作用是把文字、图片特征投影到多模态的特征空间中去

       如图所示,给定一个 batch 的 n 个 (图片,文本) 对,图片输入给 image encoder 得到表征 i1, i2, ..., in ,文本输入给text encoder得到表征 t1, t2, ..., tn, 然后通过“对比学习”,找到图像和文字的相似关系。对于图中列出的n*n个格子,只需计算每个格子上对应的向量点积(余弦相似度)。由于对角线上的图片-文字对是真值,希望对角线上的相似度可以最大,据此可设置交叉熵函数,来求得每个batch下的loss。

预训练

        预训练是指在大规模无标注数据上训练模型,使其学习到通用的特征表示。在clip模型中,预训练包括两个阶段:视觉预训练和视觉-语言预训练。

zero shot预测

        zero-shot 预测如下图所示,当做完模型对比学习和预训练后,就能用模型进行zero-shot预测:

优势和劣势

        clip模型优势:

  clip模型劣势:

总结

        通过 clip 模型,可以对任意物品名称进行零样本分类,还能进行零样本的目标检测。而文本和图片在同一个向量空间的这个特性,也能够直接利用这个模型进一步优化商品搜索功能。可以拿文本的向量,通过找到余弦距离最近的商品图片来优化搜索的召回过程。也能直接拿图片向量,实现以图搜图这样的功能。

openclip模型介绍

        clip 使计算图像和文本的表示形式以测量它们的相似程度成为可能。clip 模型以自我监督的方式在数亿或数十亿图像-文本对上进行训练。例如:laion-5b 数据集,包含 58 亿个密切相关的图像-文本对。2022 年 9 月,laion机构利用这个数据集的 openclip 项目,对clip论文完成了开源实现即openclip。在 imagenet数据集上,原版clip的准确率只有75.4%,而openclip实现了80.1% 的zero-shot准确率,在 ms coco 上实现了74.9% 的zero-shot图像检索(recall@5),这也是目前性能最强的开源 clip 模型。

        2022年11月,stability ai发布了stable diffusion 2.0。与最初的v1版本相比,stable diffusion 2.0版本使用全新的文本编码器(openclip)训练文本到图像模型,这大大提高了生成图像的质量。与sd 1.0中所使用的含有630万文本模型参数的cliptext相比,openclip文本模型参数多达3.54亿。此版本的文生图模型可以生成默认分辨率为512x512像素以及768x768像素的图像。此外,该模型在laion-aesthetics(laion-5b的美学子集)进行训练。与v1版本不同的是,v2版本使用laion的nsfw(色情和性内容过滤器)过滤掉了数据集中的成人内容。

相关资料

openclip源码地址:github - mlfoundations/open_clip: an open source implementation of clip.

官网介绍:https://laion.ai/blog/giant-openclip/

原理

        laion 使用 openclip 训练了三个大型 clip 模型:vit-l/14、vit-h/14 和 vit-g/14(与其他模型相比,vit-g/14 的训练周期仅为三分之一左右),并在其官方网站上称它自己是当年开源 clip 模型之最佳,openclip原理和clip一样,只是在不同数据集上的实现,如下图所示:

结果

用法

pip install open_clip_torch
import torch 
from pil import image 
import open_clip 

model, _, preprocess = open_clip.create_model_and_transforms('vit-b-32', pretrained='laion2b_s34b_b79k') 
tokenizer = open_clip.get_tokenizer('vit-b-32') 

image = preprocess(image.open("clip.png")).unsqueeze(0) 
text = tokenizer(["a diagram", "a dog", "a cat"]) 

with torch.no_grad(), torch.cuda.amp.autocast(): 
      image_features = model.encode_image(image) 
      text_features = model.encode_text(text) 
      image_features /= image_features.norm(dim=-1, keepdim=true) 
      text_features /= text_features.norm(dim=-1, keepdim=true) 
      text_probs = (100.0 * image_features @ text_features.t).softmax(dim=-1) 
      print("label probs:", text_probs) # prints: [[1., 0., 0.]]

模型总结

  1. clip是2021年初openai发布,是多模态研究领域的经典之作,在多任务表现达到sota 。2022年9月laion发布openclip,包含三个大规模clip模型:vit-l/14, vit-h/14和vit-g/14。

  2. clip是指clip模型本身,而openclip则是指clip模型的开源实现。两者有着紧密的联系,openclip是对clip模型的应用和推广,使更多的人可以使用clip模型进行相关的研究和开发。

  3. clip利用4亿张互联网上找到的图片对应的alternative文字训练的多模态模型。openclip在 laion-5b的美学子集进行训练。与v1版本不同的是,v2版本使用laion的nsfw过滤掉了数据集中的成人内容。

  4. stable diffusion 1.0中所使用cliptext的含有630万文本模型参数。stable diffusion 2.0版本使用的openclip文本模型参数多达3.54亿。

  5. 使用openclip版本的sd2.0文生图模型可以生成默认分辨率为512x512像素以及768x768像素的图像,而使用clip版本的sd1.0文生图模型只能生成默认分辨率为512x512像素的图像。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

【AIGC】揭秘驱动AI创新的关键力量:领军者的角色

08-05

万字长文!AIGC 时代数字图像水印的进展与实践 | 新程序员

08-05

ChatGPT应用在AIGC内容生产【赠书活动|第一期《硅基物语》】

08-05

探索大模型AIGC的未来:从体验到展望

08-05

为什么并非所有的企业都该拥抱AIGC?

08-05

AIGC实践|用AI工具打造动态有声绘本

08-05

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论