写点什么

测试 CLIP zero-shot learning | 深度学习

作者:AIWeker
  • 2023-04-22
    福建
  • 本文字数:1037 字

    阅读完需:约 3 分钟

测试CLIP zero-shot learning | 深度学习

1. 什么是 CLIP


CLIP 是 OpenAI 在Learning Transferable Visual Models From Natural Language Supervision提出的多模态的预训练模型,CLIP 利用文本和图像的配对数据,基于对比学习的方式训练的预训练模型,对于方便迁移到下游任务,如图像分类识别,精细图像分类,OCR,动作识别和地理信息定位等等。


以往的视觉模型,都是基于一定场景下监督训练的出来的,这种受限制的监督形式限制了它们的通用性和可用性,如增加一个类别,就要重新收集数据,重新迭代模型。虽然有 few-shot learning 或者 zero-shot learning,但是性能远不如监督学习的模型。


CLIP(Contrastive Language-Image Pre-training)用文本的监督方式,在 4 亿数据集上可以有效的迁移到新的任务。



CLIP 分别对文本和图像训练两个 Encode 模型,并用相似度度量的方式进行监督。可以构造(image, text)的配对方式,通过计算相似度来判断配对是否相关。

2. CLIP 图像分类识别测试

CLIP 可以用来做什么?我们用来做下图像分类的测试:


import torchimport clipfrom PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"model, preprocess = clip.load("./ViT-B-32.pt", device=device)image = preprocess(Image.open("./images/R-C.jpg")).unsqueeze(0).to(device)text = clip.tokenize(["a sexy photo", "a porn photo", "a normal photo"]).to(device)
with torch.no_grad(): image_features = model.encode_image(image) text_features = model.encode_text(text) logits_per_image, logits_per_text = model(image, text) probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs)# Label probs: [[0.9614 0.02727 0.01154]]
复制代码


CLIP 本质上是建立文本和图像的相关性,对文本和图像进行编码。从代码可知,CLIP 用在图像分类上:


  • 图像分类的类别构建 text,并用 clip 进行编码

  • 对图像进行编码

  • 计算图像和类别的编码的相似性

  • 取相似性最大的类别


CLIP 论文给出许多构建类别的文本的 text,如"a photo of 《label》"


CLIP 是不是可以做一个万物识别的分类模型?

3. CLIP 的其他用途

CLIP 建立了 text 和 image 的关系,那么 CLIP 可以应用的场景:


  • 给图生成一个文本说明

  • 以文本搜图

  • 以文本生成图片,这个就是现在很多的 AIGC(如 DALE-2,Stable Diffusion),是在 CLIP 基础上加上扩散模型来生成图像


最近对 CLIP 优化的总结:


  • Democratizing Contrastive Language-Image Pre-training: A CLIP Benchmark of Data, Model, and Supervision



发布于: 刚刚阅读数: 3
用户头像

AIWeker

关注

InfoQ签约作者 / 公众号:人工智能微客 2019-11-21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
测试CLIP zero-shot learning | 深度学习_深度学习_AIWeker_InfoQ写作社区