首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >多模态对比语言图像预训练CLIP:打破语言与视觉的界限

多模态对比语言图像预训练CLIP:打破语言与视觉的界限

原创
作者头像
汀丶人工智能
发布于 2023-10-31 06:24:31
发布于 2023-10-31 06:24:31
1K00
代码可运行
举报
文章被收录于专栏:NLP/KGNLP/KG
运行总次数:0
代码可运行

多模态对比语言图像预训练CLIP:打破语言与视觉的界限

一种基于多模态(图像、文本)对比训练的神经网络。它可以在给定图像的情况下,使用自然语言来预测最相关的文本片段,而无需为特定任务进行优化。CLIP的设计类似于GPT-2和GPT-3,具备出色的零射击能力,可以应用于多种多模态任务。

  • 多模态对比语言图像预训练(CLIP)是一种神经网络模型,它通过多模态对比训练来学习图像和文本之间的关联。与传统的单模态预训练模型不同,CLIP能够同时处理图像和文本,从而更好地理解它们之间的语义关系。
  • CLIP的设计类似于GPT-2和GPT-3,是一种自回归语言模型。它通过对比学习来学习图像和文本之间的映射关系。在训练过程中,CLIP会接收一张图像和一个与之相关的文本片段,并学习如何将这两个模态的信息进行关联。通过这种方式,CLIP可以学会将图像与相应的文本片段进行匹配,从而在给定图像的情况下,使用自然语言来预测最相关的文本片段。
  • 由于CLIP采用了对比学习的方法,它可以在无需为特定任务进行优化的前提下,表现出色地完成多种多模态任务。这使得CLIP成为了一种通用的多模态预训练模型,可以广泛应用于图像标注、视觉问答、图像生成等领域。

CLIP(对比语言图像预训练)是一种基于多种(图像、文本)对进行训练的神经网络。在给定图像的情况下,它可以用自然语言来预测最相关的文本片段,而无需直接针对任务进行优化,类似于GPT-2和gpt - 3的零射击能力。我们发现CLIP在不使用任何原始的1.28M标记示例的情况下,在ImageNet“零射击”上匹配原始ResNet50的性能,克服了计算机视觉中的几个主要挑战。

1.安装

代码语言:依赖
AI代码解释
复制
ftfy
regex
tqdm
torch
torchvision
代码语言:shell
AI代码解释
复制
$ conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0
$ pip install ftfy regex tqdm
$ pip install git+https://github.com/openai/CLIP.git

Replace cudatoolkit=11.0 above with the appropriate CUDA version on your machine or cpuonly when installing on a machine without a GPU.

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import torch
import clip
from PIL import Image

device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

image = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device)
text = clip.tokenize(["a diagram", "a dog", "a cat"]).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)  # prints: [[0.9927937  0.00421068 0.00299572]]
  • API

The CLIP module clip provides the following methods:

  • clip.available_models()

Returns the names of the available CLIP models.

  • clip.load(name, device=..., jit=False)

返回模型和模型所需的TorchVision转换,由' clip.available_models() '返回的模型名指定。它将根据需要下载模型。' name '参数也可以是本地检查点的路径。

可以选择性地指定运行模型的设备,默认是使用第一个CUDA设备(如果有的话),否则使用CPU。当' jit '为' False '时,将加载模型的非jit版本。

  • clip.tokenize(text: Union[str, List[str]], context_length=77)

返回一个LongTensor,其中包含给定文本输入的标记化序列。这可以用作模型的输入


' clip.load() '返回的模型支持以下方法:

  • model.encode_image(image: Tensor)

给定一批图像,返回由CLIP模型的视觉部分编码的图像特征。

  • model.encode_text(text: Tensor)

给定一批文本tokens,返回由CLIP模型的语言部分编码的文本特征。

  • model(image: Tensor, text: Tensor)

给定一批图像和一批文本标记,返回两个张量,包含对应于每个图像和文本输入的logit分数。其值是对应图像和文本特征之间的相似度的余弦值,乘以100。

2.案例介绍

2.1 零样本能力

下面的代码使用CLIP执行零样本预测,如本文附录B所示。本例从CIFAR-100数据集获取图像,并在数据集的100个文本标签中预测最可能的标签。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import os
import clip
import torch
from torchvision.datasets import CIFAR100

#Load the model
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load('ViT-B/32', device)

#Download the dataset
cifar100 = CIFAR100(root=os.path.expanduser("~/.cache"), download=True, train=False)

#Prepare the inputs
image, class_id = cifar100[3637]
image_input = preprocess(image).unsqueeze(0).to(device)
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in cifar100.classes]).to(device)

#Calculate features
with torch.no_grad():
    image_features = model.encode_image(image_input)
    text_features = model.encode_text(text_inputs)

#Pick the top 5 most similar labels for the image
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)
values, indices = similarity[0].topk(5)

#Print the result
print("\nTop predictions:\n")
for value, index in zip(values, indices):
    print(f"{cifar100.classes[index]:>16s}: {100 * value.item():.2f}%")

输出将如下所示(具体数字可能因计算设备的不同而略有不同):

代码语言:txt
AI代码解释
复制
Top predictions:

           snake: 65.31%
          turtle: 12.29%
    sweet_pepper: 3.83%
          lizard: 1.88%
       crocodile: 1.75%

Note that this example uses the encode_image() and encode_text() methods that return the encoded features of given inputs.

2.2 Linear-probe 评估

The example below uses scikit-learn to perform logistic regression on image features.

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import os
import clip
import torch

import numpy as np
from sklearn.linear_model import LogisticRegression
from torch.utils.data import DataLoader
from torchvision.datasets import CIFAR100
from tqdm import tqdm

#Load the model
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load('ViT-B/32', device)

#Load the dataset
root = os.path.expanduser("~/.cache")
train = CIFAR100(root, download=True, train=True, transform=preprocess)
test = CIFAR100(root, download=True, train=False, transform=preprocess)


def get_features(dataset):
    all_features = []
    all_labels = []
    
    with torch.no_grad():
        for images, labels in tqdm(DataLoader(dataset, batch_size=100)):
            features = model.encode_image(images.to(device))

            all_features.append(features)
            all_labels.append(labels)

    return torch.cat(all_features).cpu().numpy(), torch.cat(all_labels).cpu().numpy()

#Calculate the image features
train_features, train_labels = get_features(train)
test_features, test_labels = get_features(test)

#Perform logistic regression
classifier = LogisticRegression(random_state=0, C=0.316, max_iter=1000, verbose=1)
classifier.fit(train_features, train_labels)

#Evaluate using the logistic regression classifier
predictions = classifier.predict(test_features)
accuracy = np.mean((test_labels == predictions).astype(float)) * 100.
print(f"Accuracy = {accuracy:.3f}")

Note that the C value should be determined via a hyperparameter sweep using a validation split.

3.更多资料参考:

更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
多模态对比语言图像预训练CLIP:打破语言与视觉的界限
项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自身的硬实力。
汀丶人工智能
2023/11/01
4450
多模态对比语言图像预训练CLIP:打破语言与视觉的界限
CLIP-图文预训练模型
CLIP: Contrastive LanguageImage Pre-training
iResearch666
2023/09/13
7820
CLIP-图文预训练模型
基于openai_clip在零样本图像分类识别测试
The code below performs zero-shot prediction using CLIP, as shown in Appendix B in the paper. This example takes an image from the CIFAR-100 dataset, and predicts the most likely labels among the 100 textual labels from the dataset.
sparkexpert
2021/06/09
9810
【论文复现】(CLIP)文本也能和图像配对
模态,作为数据展现的一种方式,涵盖了诸如图像、文本、声音以及点云等多种类型。而多模态学习,则是一种让模型能够同时驾驭并融合多种这类数据形式的技术,它对于提升模型的预测精度和适应能力大有裨益。以自动驾驶汽车为例,为了确保对周围交通环境的全面而准确的感知,车辆通常会配备多种传感器,比如相机和激光雷达。相机捕捉的图像富含详尽的纹理细节,但在呈现物体的空间深度方面可能不够精确;相比之下,激光雷达生成的点云数据则能精确描绘出周围环境的3D轮廓,尽管这些数据点往往分布得相对稀疏。将这两种模态的数据结合起来作为模型的输入,可以极大地增强模型对周围环境的感知能力。
Eternity._
2024/11/23
4280
【论文复现】(CLIP)文本也能和图像配对
使用PyTorch进行小样本学习的图像分类
近年来,基于深度学习的模型在目标检测和图像识别等任务中表现出色。像ImageNet这样具有挑战性的图像分类数据集,包含1000种不同的对象分类,现在一些模型已经超过了人类水平上。但是这些模型依赖于监督训练流程,标记训练数据的可用性对它们有重大影响,并且模型能够检测到的类别也仅限于它们接受训练的类。
deephub
2022/11/11
1.2K0
使用PyTorch进行小样本学习的图像分类
搜索不止是关键词:AI+多模态搜索,才是下一个“百度”
还记得小时候第一次用百度搜东西的时候,觉得好神奇:“我只要打几个字,它居然就知道我想找什么!”
Echo_Wish
2025/07/03
930
搜索不止是关键词:AI+多模态搜索,才是下一个“百度”
音视频开发之旅(92)-多模态Clip论文解读与源码分析
在做分类 检测以及分割任务时,数据的标注非常关键, 比如可用于分类任务的ImageNet数据集共有120万张图片1000个分类,  可用于目标检测和分割任务的COCO数据集共有33万张图片80个目标类别. 传统的图像分类模型通常在标注的数据集上进行训练,但这些数据集的类别和数量相对较小,训练的模型泛化能力也受限,很难直接zero-shot迁移到下游任务.
音视频开发之旅
2024/09/07
5780
音视频开发之旅(92)-多模态Clip论文解读与源码分析
open_clip编码图像和文本 - plus studio
image_to_features 函数是一个封装过的将图像转成文本的函数,传入的参数是一个image_to_features格式的图片。
plus sign
2024/02/29
7940
【机器学习】自然语言处理的新前沿:GPT-4与Beyond
这些局限性和挑战为NLP领域的进一步研究指明了方向,激励了Beyond GPT-4技术的探索和发展。接下来,我们将详细探讨这些前沿技术及其应用。
哈__
2024/06/28
2200
【机器学习】自然语言处理的新前沿:GPT-4与Beyond
clip-interrogator代码解析 - plus studio
clip-interrogator 的的主要代码在仓库的./clip-interrogator 文件夹下
plus sign
2024/02/29
5910
AI绘画中CLIP文本-图像预训练模型
OpenAI 在 2021 年提出了 CLIP(Contrastive Language–Image Pretraining)算法,这是一个先进的机器学习模型,旨在理解和解释图像和文本之间的关系。CLIP 的核心思想是通过大规模的图像和文本对进行训练,学习图像内容与自然语言描述之间的对应关系。这种方法使得模型能够在没有特定任务训练的情况下,对广泛的视觉概念进行理解和分类。
Dlimeng
2023/12/22
1.4K0
AI绘画中CLIP文本-图像预训练模型
探索视觉与语言模型的可扩展性
视觉与语言结合模型的兴起标志着一个重要的发展阶段。这些多模态模型不仅能够理解图像内容,还能够处理和生成与图像相关的语言描述,极大地推动了跨模态交互和理解的进展。从社交媒体的内容标签到自动图像标注,再到复杂的视觉问答和场景理解任务,这些模型在多个应用场景中展现出了巨大的潜力。随着技术的进步,这些模型正在逐渐渗透到我们的日常生活中,成为连接视觉世界与语言理解的桥梁。 CLIP(Contrastive Language-Image Pre-training)模型是由OpenAI提出的一种先进的多模态模型,它通过对比学习的方法,使用大规模的互联网图像和文本对进行预训练。CLIP模型能够学习到丰富的视觉表示,这些表示可以用于零样本(zero-shot)图像分类、图像检索、以及更广泛的下游任务。CLIP的关键在于其能够将图像与自然语言描述联系起来,从而实现灵活的跨模态转换和应用。这种能力使得CLIP在众多视觉语言任务中都取得了令人瞩目的成绩,也为其在实际应用中的广泛部署奠定了基础。 然而,随着模型规模的增大,如何有效地训练和优化这些模型,以及如何理解模型规模、数据规模和计算量对性能的影响,成为了研究者们关注的焦点。最近的研究工作,如Cherti等人的论文[2],探讨了对比语言-图像预训练的规模法则,研究了模型规模、数据规模和计算量对多个下游任务性能的影响。这项工作不仅提供了对CLIP模型性能影响因素的深入理解,也为设计更高效、更强大的视觉语言模型提供了宝贵的指导。 本博客的目的是复现和分析两篇关于CLIP模型和对比学习规模法则的研究论文。第一篇论文[1]介绍了CLIP模型的构建和在多种计算机视觉任务上的应用,展示了CLIP模型在图像分类、文本到图像的检索等任务上的强大性能。第二篇论文[2]则深入探讨了对比语言-图像预训练的规模法则,通过大规模实验揭示了不同规模的CLIP模型在零样本分类、图像检索等任务上的性能表现。 通过对这两篇论文的复现和分析,我们不仅能够验证CLIP模型的性能,还能够深入理解模型规模、数据规模和计算量对模型性能的影响。这些分析对于设计未来的视觉语言模型具有重要意义,也为我们提供了如何利用有限的计算资源来优化模型性能的见解。此外,复现实验的过程也将帮助我们更好地理解CLIP模型的内部机制和工作原理。 在接下来的内容中,我们将详细介绍复现CLIP模型所需的数据集和预训练步骤,探讨所选模型架构的细节,包括Vision Transformer(ViT)的使用,以及训练过程中的关键参数和调整。我们还将分享模型在不同任务上的性能评估和分析,以及在复现过程中遇到的挑战和解决方案。通过本博客的深入探讨,读者将获得对CLIP模型及其在多模态学习中应用的全面理解。
Srlua
2024/12/12
2340
探索视觉与语言模型的可扩展性
[AI学习笔记]预训练范式演进:DeepSeek多阶段预训练技巧解密
在人工智能与深度学习蓬勃发展的当下,预训练模型成为了推动自然语言处理、计算机视觉等众多领域取得突破性进展的关键力量。从最初的无监督预训练到如今复杂的多阶段预训练范式,每一次演进都为模型性能的提升和应用场景的拓展提供了新的可能。DeepSeek等先进系统通过创新的多阶段预训练技巧,在大规模数据上学习到丰富的特征表示,并在下游任务中展现出卓越的性能。
二一年冬末
2025/03/16
7461
[AI学习笔记]预训练范式演进:DeepSeek多阶段预训练技巧解密
深度测评腾讯云 HAI 智算服务:高性能 AI 计算的新标杆
近年来,随着深度学习的爆炸式发展,AI 模型训练与推理对计算资源的需求大幅增长。传统的 GPU 本地化方案不仅昂贵且扩展性差,无法满足动态需求。腾讯云推出的 HAI 智算服务,以灵活的云端 GPU 服务和高性价比的特性,成为开发者和企业部署高性能 AI 应用的理想选择。
Undoom
2024/11/23
3560
智谱免费GLM-4V-Flash助力多模态RAG实现
多模态检索增强生成(RAG)技术正快速发展,但部署成本较高。智谱科技开放的GLM-4V-Flash作为免费多模态大模型,具备图文理解、知识检索等能力,为构建RAG系统提供了经济实惠的选择。
致Great
2024/12/28
8510
智谱免费GLM-4V-Flash助力多模态RAG实现
如何使用多模态知识图谱嵌入:整合图像与文本
在信息爆炸的时代,知识图谱(Knowledge Graph, KG)作为一种重要的信息组织方式,被广泛应用于推荐系统、智能问答和信息检索等领域。然而,传统的知识图谱主要依赖于结构化数据(如实体和关系),难以充分利用丰富的非结构化数据(如文本和图像)。为了解决这一问题,多模态知识图谱嵌入(Multimodal Knowledge Graph Embedding)应运而生。
二一年冬末
2024/09/24
1.2K0
如何使用多模态知识图谱嵌入:整合图像与文本
向量搜索与ClickHouse-Part II
这篇博文延续了我们关于向量搜索的系列文章,建立在前一篇文章的基础上,我们概述了向量搜索是什么,它与历史上基于倒排索引的方法的关系,它目前提供价值的可能用例,以及一些高级实现方法。在这篇文章中,我们通过实际示例详细探讨了向量搜索与ClickHouse的关系,并回答了“我什么时候应该使用ClickHouse进行向量搜索?”
用户3578099
2023/09/01
1.1K0
向量搜索与ClickHouse-Part II
【机器学习】机器学习与大型预训练模型的前沿探索:跨模态理解与生成的新纪元
二、多模态数据处理 多模态数据处理是跨模态理解与生成技术的基础。在这一过程中,需要对来自不同模态的数据进行预处理、特征提取和表示学习等操作。例如,对于文本数据,可以通过分词、词嵌入等技术提取出关键信息;对于图像数据,可以通过卷积神经网络等技术提取出图像特征。这些预处理和特征提取操作能够将原始数据转化为机器可理解的形式,为后续的处理和生成提供基础。
E绵绵
2024/05/24
8020
【机器学习】机器学习与大型预训练模型的前沿探索:跨模态理解与生成的新纪元
在自定义数据集上实现OpenAI CLIP
在2021年1月,OpenAI宣布了两个新模型:DALL-E和CLIP,它们都是以某种方式连接文本和图像的多模态模型。CLIP全称是Contrastive Language–Image Pre-training,一种基于对比文本-图像对的预训练方法。为什么要介绍CLIP呢?因为现在大火得Stable Diffusion 并不是单一模型,而是多个模型组成。其中会用到一个 Text encoder 将用户的文本输入进行编码,这个 text encoder 就是 CLIP 模型中 text encoder
deephub
2023/09/14
1.6K0
在自定义数据集上实现OpenAI CLIP
使用 CLIP 对没有任何标签的图像进行分类
深度图像分类模型通常在大型带注释数据集上以监督方式进行训练。尽管模型的性能会随着更多注释数据的可用而提高,但用于监督学习的大规模数据集通常难以获得且成本高昂,需要专家注释者花费大量时间。考虑到这一点,人们可能会开始怀疑是否存在更便宜的监督资源。简而言之,是否有可能从已经公开可用的数据中学习高质量的图像分类模型?
小白学视觉
2022/12/27
4K0
使用 CLIP 对没有任何标签的图像进行分类
推荐阅读
相关推荐
多模态对比语言图像预训练CLIP:打破语言与视觉的界限
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档