6、CLIP:连接文本和视觉世界的预训练模型

这篇具有很好参考价值的文章主要介绍了6、CLIP:连接文本和视觉世界的预训练模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        

目录

一、论文题目

二、背景与动机

三、创新与卖点

四、技术细节

模型结构

简易代码

clip实现zero shot分类

五、为什么是CLIP?为什么是对比学习?

六、一些资料


        在人工智能领域,文本和图像是两个极其重要的数据形式。传统上,机器学习模型往往专注于其中一种形式的处理—要么是文本(自然语言处理),要么是图像(计算机视觉)。OpenAI 推出的 CLIP(Contrastive Language–Image Pre-training)模型在这两个领域之间架起了一座桥梁,为图像理解和文本图像交互提供了新的视角。

一、论文题目

Learning Transferable Visual Models From Natural Language Supervisionhttps://arxiv.org/pdf/2103.00020.pdf       

二、背景与动机

        传统的视觉模型的限制。传统的计算机视觉模型通常需要大量的标注数据来训练,这些数据的获取成本非常高。此外,模型的泛化能力受限于训练数据集,对于训练集之外的新类别或新场景,模型的表现常常会大打折扣。

        自然语言的表达力。自然语言以其丰富的表达力赋予了人类沟通的无限可能。若机器能理解丰富的语言描述,将能更好地理解和处理视觉信息。这一直是人工智能领域的一个追求。

        对于以上问题,OpenAI 提出了一个问题:是否可以开发一种模型,利用大量的文本描述来学习视觉概念,从而减少对标注数据的依赖,并提高模型对新场景的适应能力?

三、创新与卖点

        预训练和零样本学习。CLIP 的主要创新点在于它采用了大规模的预训练,学习图像与自然语言的关联。它可以从描述中识别出视觉概念,而不需要直接的图像标注。这种方法让 CLIP 具备了零样本(zero-shot)学习的能力,即在没有直接学习特定类别的情况下,识别出这些类别的图像。

        对比学习。CLIP 通过对比学习将图像和文本嵌入到相同的空间中。模型预测图像描述的匹配程度,从而学习将视觉内容和语言描述联系起来。这种方法在不同的数据集和任务上都表现出了卓越的性能。

        大规模数据。CLIP 的训练涉及到了超过 4 亿个图像文本对,这些数据的多样性大大提高了模型的泛化能力。

四、技术细节

模型结构

6、CLIP:连接文本和视觉世界的预训练模型,AIGC论文笔记,深度学习,计算机视觉,深度学习

        CLIP 包括两部分:视觉编码器和文本编码器。视觉编码器是基于卷积神经网络(CNN)的变体,如 ResNet 或 Vision Transformer(ViT)。文本编码器则是基于 Transformer 架构的。在训练过程中,CLIP 通过最大化图像与其对应描述的相似度来进行学习。同时,它最小化与不匹配描述的相似度。这一过程涉及到大量的负样本,为模型提供了区分力。

简易代码

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision.models import resnet50
from transformers import BertTokenizer, BertModel

class SimpleCLIP(nn.Module):
    def __init__(self):
        super(SimpleCLIP, self).__init__()
        
        # 图像分支 - 使用简化的 ResNet50 作为例子
        self.visual_model = resnet50(pretrained=True)
        
        # 文本分支 - 使用简化的 BERT 作为例子
        self.text_model = BertModel.from_pretrained('bert-base-uncased')

    def forward(self, images, text_tokens):
 
        # I[n, h, w, c] - minibatch of aligned images
        # T[n, l] - minibatch of aligned texts
        # W_i[d_i, d_e] - learned proj of image to embed
        # W_t[d_t, d_e] - learned proj of text to embed
        # t - learned temperature parameter

        # 分别提取图像特征和文本特征
        I_f = self.visual_model (I) #[n, d_i]     # Extract visual features
        T_f = self.text_model (T) #[n, d_t]       # Extract text

        # 对两个特征进行线性投射,得到相同维度的特征,并进行l2归一化
        I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
        T_e = l2_normalize(np.dot(T_f, W_t), axis=1)

        

        return I_e, T_e

# 初始化模型
model = SimpleCLIP()

# 定义对比损失 - InfoNCE 损失的简化版本
criterion = nn.CrossEntropyLoss()

# 优化器
optimizer = optim.Adam(model.parameters(), lr=1e-5)

# 数据加载 - 伪代码,需替换为实际代码
image_loader = ...
text_loader = ...

# 训练循环
for epoch in range(num_epochs):
    for images, texts in zip(image_loader, text_loader):
        # Zero the parameter gradients
        optimizer.zero_grad()

        # Forward pass
        visual_features, text_features = model(images, texts)

        # 计算损失函数
        # 计算缩放的余弦相似度:[n, n]
        logits = np.dot(visual_features, text_features.T) * np.exp(t)   # t为超参数

        # 对称的对比学习损失:等价于N个类别的cross_entropy_loss
        labels = np.arange(n) # 对角线元素的labels
        loss_i = cross_entropy_loss(logits, labels, axis=0)
        loss_t = cross_entropy_loss(logits, labels, axis=1)
        loss = (loss_i + loss_t)/2
       

        # Backward and optimize
        loss.backward()
        optimizer.step()

print("Training finished.")

clip实现zero shot分类

首先请确保安装了必要的库:

pip install torch torchvision 
pip install ftfy regex tqdm 
pip install git+https://github.com/openai/CLIP.git

简易实现 

import torch
import clip
from PIL import Image
import urllib.request
import matplotlib.pyplot as plt

# 加载预训练的 CLIP 模型
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

# 准备输入数据
image_url = "https://raw.githubusercontent.com/openai/CLIP/main/CLIP.png"
image = Image.open(urllib.request.urlopen(image_url))
text = ["a diagram", "a dog", "a cat"]

# 使用 CLIP 预处理图像并将文本转换为张量
image_input = preprocess(image).unsqueeze(0).to(device)
text_inputs = clip.tokenize(text).to(device)

# 通过模型前向传播
with torch.no_grad():
    image_features = model.encode_image(image_input)
    text_features = model.encode_text(text_inputs)

    # 计算图像和文本特征之间的余弦相似度
    logits_per_image, logits_per_text = model(image_input, text_inputs)
    probs = logits_per_image.softmax(dim=-1).cpu().numpy()

# 显示图像和预测
plt.imshow(image)
plt.title(f"Predicted label: {text[probs.argmax()]} with probability {probs.max() * 100:.2f}%")
plt.show()

五、为什么是CLIP?为什么是对比学习?

一下引自神器CLIP:连接文本和图像,打造可迁移的视觉模型 - 知乎

    在计算机视觉领域,最常采用的迁移学习方式就是先在一个较大规模的数据集如ImageNet上预训练,然后在具体的下游任务上再进行微调。这里的预训练是基于有监督训练的,需要大量的数据标注,因此成本较高。近年来,出现了一些基于自监督的方法,这包括基于对比学习的方法如MoCo和SimCLR,和基于图像掩码的方法如MAE和BeiT,自监督方法的好处是不再需要标注。但是无论是有监督还是自监督方法,它们在迁移到下游任务时,还是需要进行有监督微调,而无法实现zero-shot。对于有监督模型,由于它们在预训练数据集上采用固定类别数的分类器,所以在新的数据集上需要定义新的分类器来重新训练。对于自监督模型,代理任务往往是辅助来进行表征学习,在迁移到其它数据集时也需要加上新的分类器来进行有监督训练。但是NLP领域,基于自回归或者语言掩码的预训练方法已经取得相对成熟,而且预训练模型很容易直接zero-shot迁移到下游任务,比如OpenAI的GPT-3。这种差异一方面是由于文本和图像属于两个完全不同的模态,另外一个原因就是NLP模型可以采用从互联网上收集的大量文本。那么问题来了:能不能基于互联网上的大量文本来预训练视觉模型?

        那么其实之前已经有一些工作研究用文本来作为监督信号来训练视觉模型,比如16年的工作Learning Visual Features from Large Weakly Supervised Data将这转化成一个多标签分类任务来预测图像对应的文本的bag of words;17年的工作Learning Visual N-Grams from Web Data进一步扩展了这个方法来预测n-grams。最近的一些工作采用新的模型架构和预训练方法来从文本学习视觉特征,比如VirTex基于transformer的语言模型,ICMLM基于语言掩码的方法,ConVIRT基于对比学习的方法。整体来看,这方面的工作不是太多,这主要是因为这些方法难以实现较高的性能,比如17年的那篇工作只在ImageNet上实现了11.5%的zero-shot性能,这远远低于ImageNet上的SOTA。另外,还有另外的是一个方向,就是基于文本弱监督来提升性能,比如谷歌的BiT和ViT基于JFT-300M数据集来预训练模型在ImageNet上取得SOTA,JFT-300M数据集是谷歌从互联网上收集的,通过一些自动化的手段来将web text来转化成18291个类别,但是存在一定的噪音。虽然谷歌基于JFT-300M数据集取得了较好的结果,但是这些模型依然采用固定类别的softmax分类器进行预训练,这大大限制了它的迁移能力和扩展性。

        作者认为谷歌的弱监督方法和之前的方法的一个重要的区别在于规模,或者说算力和数据的规模不同。JFT-300M数据量达到了上亿级别,而且谷歌用了强大的算力来进行预训练。而VirTex,ICMLM和ConVIRT只在10万级别的数据上训练了几天。为了弥补数据上的差异,OpenAI从网上收集了4亿的数据来实验。但是新的问题来了:采用什么样的方法来训练。OpenAI首先尝试了VirTex模型,即联合训练一个CNN和文本transformer来预测图像的文本(image caption),但是发现这种方法的训练效率(用ImageNet数据集上的zero-shot性能来评估)还不如直接预测bag of words,如下图所示,两者的训练效率能相差3倍。如果进一步采用ConVIRT,即基于对比学习的方法,训练效率可以进一步提升4倍。之所出现这个差异,这不难理解,训练数据所包含的文本-图像对是从互联网收集来的,它们存在一定的噪音,就是说文本和图像可能并不完全匹配,这个时候适当的降低训练目标,反而能取得更好的收敛。而从任务难度来看:Transformer Language Model > Bag of Words Prediction > Bag of Words Contrastive (CLIP)。由于训练数据量和模型计算量较大,训练效率成为一个至关重要的因素。这就是作者最终选择对比学习的方法来训练的原因。

六、一些资料

神器CLIP:连接文本和图像,打造可迁移的视觉模型 - 知乎码字不易,勿忘点赞!2021年见证了vision transformer的大爆发,随着谷歌提出ViT之后,一大批的vision transformer的工作席卷计算机视觉任务。除了vision transformer,另外一个对计算机视觉影响比较大的工作就是O…https://zhuanlan.zhihu.com/p/493489688GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an imageCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image - GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an imagehttps://github.com/openai/CLIPGitHub - OFA-Sys/Chinese-CLIP: Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation. - GitHub - OFA-Sys/Chinese-CLIP: Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.https://github.com/OFA-Sys/Chinese-CLIP

 文章来源地址https://www.toymoban.com/news/detail-793239.html

到了这里,关于6、CLIP:连接文本和视觉世界的预训练模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [算法前沿]--028-基于Hugging Face -Transformers的预训练模型微调

    本章节将使用 Hugging Face 生态系统中的库——🤗 Transformers来进行自然语言处理工作(NLP)。 Transformers的历史 以下是 Transformer 模型(简短)历史中的一些参考点: Transformer 架构于 2017 年 6 月推出。原始研究的重点是翻译任务。随后推出了几个有影响力的模型,包括: 2018 年 6

    2024年02月11日
    浏览(35)
  • [玩转AIGC]如何训练LLaMA2(模型训练、推理、代码讲解,并附可直接运行的kaggle连接)

    Llama 2,基于优化的 Transformer 架构,是Meta AI正式发布的最新一代开源大模型,一系列模型(7b、13b、70b)均开源可商用,效果直逼gpt3.5。 下面我们来介绍如何使用Llama 2来训练一个故事生成模型。 如果迫不及待想爽一把先,请直接跳到这里,可直接运行:llama2-c, 学习不就是

    2024年02月12日
    浏览(31)
  • LLaMA 2:开源的预训练和微调语言模型推理引擎 | 开源日报 No.86

    Stars: 36.0k License: NOASSERTION LLaMA 2 是一个开源项目,用于加载 LLaMA 模型并进行推理。 该项目的主要功能是提供预训练和微调后的 LLaMA 语言模型的权重和起始代码。这些模型参数范围从 7B 到 70B 不等。 以下是该项目的关键特性和核心优势: 支持多种规模 (7B、13B 和 70B) 的语言模

    2024年02月04日
    浏览(34)
  • DyLoRA:使用动态无搜索低秩适应的预训练模型的参数有效微调

    又一个针对LoRA的改进方法: DyLoRA: Parameter-Efficient Tuning of Pretrained Models using Dynamic Search-Free Low Rank Adaptation https://arxiv.org/pdf/2210.07558v2.pdf https://github.com/huawei-noah/KD-NLP/tree/main/DyLoRA LoRA存在的问题 : rank的值是固定的,训练完成后不能修改。 优化rank的值需要大量的搜索和努力。

    2023年04月20日
    浏览(36)
  • 大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍

    预训练属于迁移学习的范畴。现有的神经网络在进行训练时,一般基于反向传播(Back Propagation,BP)算法,先对网络中的参数进行随机初始化,再利用随机梯度下降(Stochastic Gradient Descent,SGD)等优化算法不断优化模型参数。而预训练的思想是,模型参数不再是随机初始化的

    2024年02月17日
    浏览(39)
  • BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

    来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2306.02329 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而,2D 提炼知识是否可以为下游 3D 视觉语言任务(例如 3D 问答)提供有用的表示仍

    2024年02月04日
    浏览(35)
  • 【NLP】如何实现快速加载gensim word2vec的预训练的词向量模型

    通过以下代码,实现加载word2vec词向量,每次加载都是几分钟,效率特别低。 (1)方案一 第一次加载后保存为能够快速加载的文件,第二次加载就能快读读取。 (2)方案二 第一次加载后,只将使用到的词向量以表格的形式保存到本地,第二次读取就不需要加载全部word2ve

    2024年03月14日
    浏览(34)
  • AIGC零基础30天学习——CLIP模型

            Contrastive Language-Image Pre-training(以下简称“CLIP”)是OpenAI 在 2021 年初发布的用于匹配图像和文本的预训练神经网络模型,可以说是近年来在多模态研究领域的经典之作。该模型直接使用大量的互联网数据进行预训练,在很多任务表现上达到了目前最佳表现(SOT

    2024年02月09日
    浏览(30)
  • 【AIGC】9、BLIP-2 | 使用 Q-Former 连接冻结的图像和语言模型 实现高效图文预训练

    论文:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 代码:https://github.com/salesforce/LAVIS/tree/main/projects/blip2 在线体验:https://huggingface.co/Salesforce/blip2-opt-2.7b 出处:Salesforce Research | 和 BLIP 是同一团队 时间:2023.01 线上体验示例:将图拖拽至此即可

    2024年02月04日
    浏览(36)
  • 多模态模型学习1——CLIP对比学习 语言-图像预训练模型

    学了一些多模态的知识,CLIP算是其中最重要也是最通用的一环,一起来看一下吧。 CLIP的全称是Contrastive Language-Image Pre-Training,中文是对比语言-图像预训练,是一个预训练模型,简称为CLIP。 该模型是 OpenAI 在 2021 年发布的,最初用于匹配图像和文本的预训练神经网络模型,

    2023年04月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包