做好网站建设静态化,自己设计一款新产品,烈士陵园网站建设方案百度文库,做网站客户怎么找最近的 AI 突破 DALLE和 Stable Diffusion有什么共同点#xff1f;
它们都使用 CLIP 架构的组件。 因此#xff0c;如果你想掌握这些模型是如何工作的#xff0c;了解 CLIP 是先决条件。
此外#xff0c;CLIP 已被用于在 Unsplash 上索引照片。
但是 CLIP 做了什么…最近的 AI 突破 DALLE和 Stable Diffusion有什么共同点
它们都使用 CLIP 架构的组件。 因此如果你想掌握这些模型是如何工作的了解 CLIP 是先决条件。
此外CLIP 已被用于在 Unsplash 上索引照片。
但是 CLIP 做了什么为什么它是 AI 社区的里程碑
让我们开始吧 推荐使用 NSDT场景设计器 快速搭建 3D场景 1、CLIP概述
CLIP 代表 Contrastive Language-Image Pretraining
CLIP 是一个开源、多模态、零样本模型。 给定图像和文本描述该模型可以预测与该图像最相关的文本描述而无需针对特定任务进行优化。
让我们分解一下这个描述
开源该模型由 OpenAI 创建并开源。 稍后我们将看到有关如何使用它的编程教程。多模态多模态架构利用多个领域来学习特定任务。 CLIP 结合了自然语言处理和计算机视觉。零样本零样本学习是一种在未见过的标签上进行泛化的方法无需专门训练来对它们进行分类。 例如所有 ImageNet 模型都经过训练以识别 1000 个特定类别。 CLIP 不受此限制的约束。Contrastive Language使用这种技术CLIP 被训练为理解相似的表示应该靠近潜在空间而不同的表示应该相距很远。 这将在稍后通过示例变得更加清楚。
下面是一些关于 CLIP 的有趣事实
CLIP 使用数量惊人的 4 亿图像文本对进行训练。 相比之下ImageNet 数据集包含 120 万张图像。最终调优的 CLIP 模型在 256 个 V100 GPU 上训练了两周。 对于 AWS Sagemaker 上的按需培训这至少要花费 20 万美元该模型使用 32,768 张图像的小批量进行训练。
2、CLIP可以做什么
让我们直观地展示 CLIP 做了什么。 我们稍后将更详细地展示一个编码示例。
首先我们从 Unsplash 中选择一张免费图片 接下来我们为 CLIP 提供以下提示Prompt
‘a girl wearing a beanie’.‘a girl wearing a hat’.‘a boy wearing a beanie’.‘a girl riding a bike’.‘a dog’.
显然第一个提示更好地描述了图像。
CLIP 通过分配归一化概率自动找到哪个文本提示最能描述图像。 我们得到
该模型成功地找到了最合适的图像描述。
此外CLIP 可以准确识别它以前从未见过的类和对象。
如果你有一个大的图像数据集并且你想将这些图像标记为特定的类/类别/描述CLIP 会自动为你做这件事
接下来我们将展示 CLIP 是如何工作的。
3、CLIP架构
CLIP 是一种深度学习模型它使用了来自其他成功架构的新颖想法并引入了一些自己的想法。
让我们从第一部分开始对比预训练
3.1 对比预训练
图 1 显示了对比预训练过程的概览。
假设我们有一批 N 图像及其各自的描述配对例如 image1, text1, image2, text2, imageN, textN。
对比预训练旨在联合训练生成图像嵌入 [I1, I2 … IN] 和文本嵌入[T1, T2 … TN] 的图像和文本编码器其方式如下
正确的嵌入对I1,T1, I2,T2其中 ij的余弦相似度被最大化。以对比方式不相似对 I1,T2, I1,T3… Ii,Tj其中 i≠j的余弦相似性被最小化。
让我们逐步看发生了什么
模型接收一批 N 个 对。文本编码器是一个标准的 Transformer 模型具有 GPT2 风格的修改。 图像编码器可以是 ResNet 或视觉Transformer。对于批中的每个图像图像编码器计算一个图像向量。 第一个图像对应于 I1 向量第二个图像对应于 I2 依此类推。 每个向量的大小为 de其中 de 是潜在维度的大小。 因此这一步的输出是 一个 N X de 的矩阵。类似地文本描述被压缩到文本嵌入[T1, T2 … TN] 中产生一个 N X de 的矩阵。最后我们将这些矩阵相乘并计算每个图像和文本描述之间的成对余弦相似度。 这会产生一个 N X N 矩阵如上图所示。目标是最大化沿对角线的余弦相似度——这些是正确的 对。 以对比方式非对角线元素的相似性应最小化例如I1 图像由 T1 而不是 T2、T2、T3 等描述。
一些额外的评论
该模型使用对称交叉熵损失作为其优化目标。 这种类型的损失最小化了图像到文本的方向以及文本到图像的方向请记住我们的对比损失矩阵保持 I1,T2 和 I2,T1 余弦相似性。对比预训练并不是全新的。 它在以前的模型中引入在 CLIP中做了适应性调整。
3.2 零样本分类
我们现在已经预训练了图像和文本编码器我们已准备好进行零样本分类。
基线
首先让我们提供一些背景信息。 Pre-Transformer时代如何实现few-shot分类
很简单
下载一个高性能的预训练 CNN例如 ResNet并用它进行特征提取得到图像特征。然后将这些特征用作标准分类器例如逻辑回归的输入。 分类器以监督方式进行训练其中图像标签用作目标变量图 2。如果你选择 K-shot 学习你在分类阶段的训练集应该只包含每个类的 K 个实例。 当 K10 时该任务称为少样本分类学习。 因此对于 K1我们有一次性分类学习。 如果我们使用所有可用数据这就是一个完全监督的模型老式的方式。 注意上面的关键字“监督”——分类器应该事先知道类标签。 使用与分类器配对的图像提取器也称为线性探针评估。
CLIP的竞争优势
CLIP如何进行零样本分类的过程如图3所示 同样这个过程很简单
首先我们提供一组文本描述例如 a photo of a dog 或 a cat eating an ice-cream我们认为能最好描述一个或多个图像的文本。 这些文本描述被编码到文本嵌入中。然后我们对图像做同样的事情——图像被编码到图像嵌入中。最后CLIP 计算图像和文本嵌入之间的成对余弦相似度。 选择具有最高相似度的文本提示作为预测。
当然我们可以输入多张图像。 CLIP 巧妙地缓存了输入文本嵌入因此不必为其余输入图像重新计算它们。
就是这样 我们现在已经总结了 CLIP 如何端到端地工作。
4、数据的问题
CLIP 使用 30 个公共数据集进行预训练。 用大量数据拟合大型语言模型很重要。
然而很难找到具有配对图像-文本描述的稳健数据集。 大多数公共数据集例如 CIFAR都是只有一个单词标签的图像——这些标签是目标类别。 但是创建 CLIP 是为了使用完整的文本描述。
为了克服这种差异作者没有排除这些数据集。 相反他们进行了一些特征工程将单个单词标签例如 bird或 car转换为句子 a photo of a dog或 a photo of bird。 在 Oxford-IIIT Pets 数据集上作者使用了提示A photo of a {label}, a type of pet。
有关预训练技术的更多信息请查看原始论文 。
5、CLIP 对 AI 的影响
在文章开头我们声称 CLIP 是 AI 社区的一个里程碑。
让我们看看为什么
5.1 作为零样本分类器的卓越性能
CLIP 是一个零样本分类器因此首先针对少样本学习模型测试 CLIP 是有意义的。
因此作者针对由高质量预训练模型例如 ResNet之上的线性分类器组成的模型测试了 CLIP。
结果如图4所示 CLIP 明显优于其他分类器。
此外CLIP 能够与 16-shot 线性分类器 BiT-M 的性能相媲美。 换句话说BiT-M 的分类器必须在每个类别至少 16 个示例的数据集上进行训练以匹配 CLIP 的分数——而 CLIP 无需微调即可获得相同的分数。
有趣的是作者将 CLIP 评估为线性探针他们仅使用 CLIP 的图像编码器来获取图像特征并将它们输入线性分类器——就像其他模型一样。 即使采用这种设置CLIP 的小样本学习能力也非常出色。
5.2 对分布变化无与伦比的稳健性
分布漂移是一件大事特别是对于生产中的机器学习系统。
注意你可能将分布漂移视为概念漂移尽管从技术上讲它们并不相同。 分布漂移Distribution Shift 是一种现象当训练模型的数据随时间发生变化时会发生这种现象。 因此随着时间的推移模型的效率会降低预测也会变得不准确。 事实上分布漂移并不是意料之外的事情——它会发生。 问题是如何及早发现这种现象需要采取哪些措施来“重新校准”你的模型 这并不容易解决取决于许多因素。
幸运的是关于人工智能的新研究正致力于创建能够适应分布变化的模型。
这就是作者将 CLIP 的稳健性用于测试的原因。 结果如图 5 所示 关于 CLIP这里有两点非常重要
CLIP 在 ImageNet 上实现了与 SOTA ResNet 模型相同的精度尽管 CLIP 是零样本模型。除了原始的 ImageNet 之外我们还有类似的数据集作为分布偏移基准。 似乎 ResNet 正在努力处理这些数据集。 然而CLIP 可以很好地处理未知图像——事实上该模型在 ImageNet 的所有变体中保持相同的精度水平
5.3 计算效率
在 GPT-2 之前计算效率被认为是理所当然的某种程度上。
如今在一个模型需要数周时间才能用数百个 8000 美元的 GPU 进行训练的时代计算效率问题得到了更严重的解决。
CLIP 是一种对计算更友好的架构。 这一成功的部分原因是因为 CLIP 使用视觉Transformer作为默认的图像编码器组件。 结果如图6所示
显然与其他模型相比CLIP 能够更好地利用硬件资源。 这也意味着在使用 AWS Sagemaker 等云服务进行培训时可以节省额外的费用。 此外图 6 显示与其他模型相比CLIP 在硬件操作和准确度得分方面提供了更好的可扩展性。
仍然存在数据效率的问题。 作者表明在零样本设置中CLIP 比类似模型的数据效率更高。 但是它们没有解决 CLIP 在预训练阶段的数据效率问题。 然而在这方面可能没什么可做的因为 CLIP 使用两种类型的 Transformers——而 Transformers 本质上是数据密集型模型。
5.4 研究兴趣增加
CLIP 的成功激发了人们对文本到图像模型的兴趣并推广了对比预训练方法。
除了 DALLE 和稳定扩散之外我们还可以使用 CLIP 作为 GAN 中的鉴别器。
此外CLIP 的发布激发了类似的基于 CLIP 的出版物这些出版物扩展了模型的功能例如 DenseCLIP 和 CoCoOp。
此外Microsoft 还发布了 X-CLIP这是 CLIP 的最小扩展用于视频语言理解。 额外信息一个名为 paint.wtf 的类似 Pictionary 的应用程序使用 CLIP 对你的图画进行排名。 试一试——超级有趣 6、如何使用 CLIP——编码示例
接下来我们将展示如何使用 HugginFaces 库来使用 CLIP。
首先让我们从 Unsplash 中选择 3 张图片。 我们之前使用了第一个 我们将使用以下库
import transformers
import datasets
import numpy as np
import pandas as pd
import torch
from PIL import Image
import requestsfrom transformers import CLIPTokenizerFast, CLIPProcessor, CLIPModel接下来我们加载 CLIP 模型的权重、分词器和图像处理器
device cuda if torch.cuda.is_available() else cpu
model_id openai/clip-vit-base-patch32# we initialize a tokenizer, image processor, and the model itself
tokenizer CLIPTokenizerFast.from_pretrained(model_id)
processor CLIPProcessor.from_pretrained(model_id)
model CLIPModel.from_pretrained(model_id).to(device)此外我们在 Python 中加载上述 Unsplash 图像
urls[https://images.unsplash.com/photo-1662955676669-c5d141718bfd?ixlibrb-1.2.1ixidMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8autoformatfitcropw687q80,https://images.unsplash.com/photo-1552053831-71594a27632d?ixlibrb-1.2.1ixidMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8autoformatfitcropw662q80,https://images.unsplash.com/photo-1530281700549-e82e7bf110d6?ixlibrb-1.2.1ixidMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8autoformatfitcropw688q80]images[Image.open(requests.get(i, streamTrue).raw) for i in urls]最后我们为 CLIP 提供了一些文本提示。
目标是让 CLIP 将 3 张 Unsplash 图片分类为特定的文字描述。 请注意其中一个具有误导性——让我们看看是否可以混淆模型
text_prompts[a girl wearing a beanie, a boy wearing a beanie, a dog, a dog at the beach]
inputs inputs processor(texttext_prompts, imagesimages, return_tensorspt, paddingTrue)outputs model(**inputs)
logits_per_image outputs.logits_per_image
probs logits_per_image.softmax(dim1)
pd.DataFrame(probs.detach().numpy()*100, columnstext_prompts, indexlist([image1,image2, image3])).style.background_gradient(axisNone,low0, high0.91).format(precision2)该模型成功地对所有 3 张图像进行了分类
注意两点
CLIP 可以理解多个实体及其在每个图像中的动作。CLIP 为每个图像分配了最具体的描述。 例如我们可以将第二张图片描述为“一只狗”和“海滩上的一只狗”。 然而该模型正确地决定“狗”短语更好地描述了第二张图片因为没有海滩。
随意尝试这个例子。 完整的例子在这里。将你的图像与文字描述结合使用探索 CLIP 的工作原理。
7、CLIP局限性和未来的工作
虽然 CLIP 是一个革命性的模型但仍有改进的空间。 作者指出了有可能取得进一步进展的领域。
准确度得分CLIP 是最先进的零样本分类器直接挑战特定任务的训练模型。CLIP 在 ImageNet 上与完全监督的 ResNet101 的准确性相匹配这一事实是惊人的。 然而仍然有监督模型获得更高的分数。 作者强调鉴于其惊人的可扩展性CLIP 可能会获得更高的分数但这需要大量的计算机资源。多义性作者指出 CLIP 存在多义性。 有时由于缺乏上下文模型无法区分某些单词的含义。 请记住我们之前提到过某些图像仅使用类标签进行标记而不使用全文提示。 作者提供了一个示例在 Oxford-IIIT Pet 数据集中“拳击手”一词指的是一种犬种但其他图像将“拳击手”视为运动员。 在这里罪魁祸首是数据的质量而不是模型本身。特定于任务的学习虽然 CLIP 可以区分复杂的图像模式但该模型在执行一些微不足道的任务时会失败。 例如该模型难以处理手写数字识别任务图 7。 作者将这种类型的错误分类归因于训练数据集中缺少手写数字。 8、结束语
毫无疑问CLIP 是 AI 社区的重要模型。
从本质上讲CLIP 为彻底改变 AI 研究的新一代文本到图像模型铺平了道路。 当然不要忘记这个模型是开源的。
最后但同样重要的是还有很大的改进空间。 在整篇论文中作者暗示 CLIP 的许多局限性是由于训练数据质量较低。 原文链接OpenAI最有影响的模型 — BimAnt