【论文精读】Hierarchical Text-Conditional Image Generation with CLIP Latents

news2024/11/18 7:51:45

Hierarchical Text-Conditional Image Generation with CLIP Latents

  • 前言
  • Abstract
  • 1 Introduction
  • 2 Method
    • 2.1 Decoder
    • 2.2 Prior
  • 3 Image Manipulations
    • 3.1 Variations
    • 3.2 Interpolations
    • 3.3 Text Diffs
  • 4 Probing the CLIP Latent Space
  • 5 Text-to-Image Generation
  • 6 Related Work
    • 6.1 GAN
    • 6.2 AE
    • 6.3 DAE
    • 6.4 VAE
    • 6.5 VQ-VAE
    • 6.6 DALL·E
    • 6.7 Diffusion
    • 6.8 Subsection
  • 7 Limitations and Risks
  • 阅读总结

前言

本篇工作即DALL·E2,是文生图领域和多模态领域具有轰动性的工作,其一出现就上了各大板块的热搜。DALL·E2生成的图像丰富且真实,很容易以假乱真。它的实现基于CLIP和扩散模型,前者结合丰富的图文语义,后者生成多样高质量图像,这套组合拳可谓实力十足。下面就来看看这篇工作具体是怎么做的吧。


Paperhttps://arxiv.org/pdf/2204.06125.pdf
Codehttps://github.com/lucidrains/DALLE2-pytorch
FromarXiv 13 Apr 2022

Abstract

对比学习模型如CLIP展现了其强大的图像语义和风格的表征。为了利用这些表征来进行图像的生成,作者提出了两阶段模型:prior模型通过文本描述生成图像表征,解码器模型根据图像表征生成图像。这种显示生成图像表征可以提高图像的多样性,同时将图像的真实性损失和caption相似性损失降至最低。此外,CLIP的联合嵌入空间能够以零样本的方式进行语言引导的图像操作。作者采用扩散模型作为编码器,相对于自回归模型,扩散模型计算效率更高,产生图片质量更好。

1 Introduction

最近CV领域受到大规模图文数据集的推动,如CLIP,可以学习到更多的图像表征。CLIP对图像分布鲁棒,并且有强大的零样本能力,微调后可以在各种CV和语言下游任务上实现先进结果。与此同时,扩散模型作为一种有前景的生成建模框架,在视觉和视频生成任务上达到了SOTA。扩散模型利用一种引导技术,以牺牲样本多样性为代价提高图像的真实性。
本文工作结合CLIP和扩散模型用于解决文生图问题。作者首先训练扩散解码器用于解码CLIP图像编码,类似GAN的反转,对输入图像进行编码和解码可以产生语义相近的输出图像,还可以通过对图像嵌入差值的反转在图像之间进行差值,本质上就是不同图像之间的融合。
使用CLIP表征的显著优势是能够沿着任何文本编码方向从语义上修改图像,这在GAN上需要碰运气实现。此外,对图像的编码解码还为作者提供了观察图像的哪些特征被 CLIP 识别或忽略的工具。
为了获得完整的生成图像,作者将CLIP编码器与prior模型结合,该模型将CLIP文本表征转换为图像表征。模型对比上,DALL·E2生成的图像质量高,多样性丰富,并且计算效率高。

2 Method

image.png
整个模型流程如上图所示,该模型又称为unCLIP,首先将图像的caption输入到文本编码器中,得到文编表征,这里的文本编码器是预训练好的CLIP模型的编码器。接着将得到的文本编码器输入到prior模型进行转换,得到转换后的图像编码,最后图像编码输入到解码器中生成图像。该过程可以用如下的公式概括:

2.1 Decoder

作者采用扩散模型来处理CLIP的文本embedding,具体来说,作者将CLIP嵌入投影并添加到现有的时间步嵌入和四个额外的上下文token中,这些token连接到GLIDE文本编码器的输出序列。作者保留了文本condition,假设其允许扩散模型学习CLIP无法捕获的自然语言信息。但是结果显示这样的帮助微乎其微。
虽然可以直接从解码器的分布中采样,但是过去的工作表明使用条件信息的知道可以大大提高样本质量。作者在10% 的时间随机将CLIP的嵌入设置为零,并在训练期间随机丢弃50% 的文本caption,来实现classifier free guidence。
为了生成高分辨率图像,作者训练两个扩散上采样模型,第一个将64×64上采样到256×256,第二个将256×256上采样到1024×1024。为了提高上采样器的鲁棒性,作者随机加入了噪声。模型仅使用空间卷积(U-Net),并没有采用注意力层。

2.2 Prior

在Decoder之间,我们需要一个prior模型将文本caption转换为图像嵌入,本文设计了两个不同的模型:

  • Autoregressive(AR) prior:CLIP图像嵌入被转换为理算的code,以caption为条件自回归生成预测。
  • Diffusion prior:连续的图像编码通过caption引导高斯扩散模型进行建模。

为了提高样本质量,作者在训练的10%时间里随机丢弃文本条件,AR和扩散先验都使用无分类器指导进行采样。为了有效从AR先验中进行训练和采样,作者首先应用PCA降低CLIP图像embedding的维度。特别是,当使用SAM训练CLIP时,CLIP表示空间的秩显著降低。通过保留原始1024个主成分中的319个,可以保留几乎所有的信息。接着将主成分进行排序,将每个主成分量化为1024个离散桶,并使用带有因果注意掩码的Transformer预测结果序列,提高了训练的准确性。

3 Image Manipulations

本文的方法允许对任何图像进行重建,这里描绘三种不同类型的操作。

3.1 Variations

给定图像,可以生成具有相同基本内容,但是在形状和方向有所不同的相关图像。作者采用DDIM将解码器应用于二分表示,描述了CLIP识别图像的方向, 编码了解码器重建图像所需的残差信息。作为超参数调整生成图像的多样性。
image.png

3.2 Interpolations

DALL·E2还可以混合两个图像。作者使用球形插值在两个图像的CLIP嵌入之间旋转,产生中间CLIP表示,然后输入到模型中进行生成。
image.png

3.3 Text Diffs

和其它图像生成模型相比,使用CLIP关键优势是能够将图像和文本嵌入到相同的潜在空间,从而允许应用语言引导图像生成。为了修改图像满足新的文本描述,首先获取图像的CLIP文本嵌入,以及描述当前图像caption的CLIP文本嵌入,接着获取二者的差异并归一化,采用类似的差值方法,即3.2中所描述,来改变图像的生成。
image.png

4 Probing the CLIP Latent Space

本文的解码器模型允许直接可视化CLIP图像编码器所看到的内容,从而探索CLIP潜在空间。CLIP有很多错误预测的情况,比如下面的情况,在主体前面覆盖一张写有字的纸,就会导致CLIP无法预测正确的对象,因为CLIP无法学习到相对的位置关系,许多抽象的概念无法理解。
image.png
PCA重建提供了另一种探测CLIP潜在空间结构的工具。下图中作者采用少量源图像的CLIP嵌入,并逐渐增加PCA维度来重建它们,然后在解码器上使用DDIM可视化重建的图像嵌入。这允许看懂不同维度编码的语义信息。
image.png
通过上图可以看到,早期的PCA维度保留了粗粒度的语义信息,而后期的PCA维度则编码更细粒度的细节。

5 Text-to-Image Generation

image.png
实验部分内容也比较多,但是这里只关注模型在MS-COCO数据集上和其它模型的对比,毕竟DALL-E模型之前的表现就很惊艳,只是在评分上并不能让读者很好的信服。可以看到,无论是AR prior还是Diffusion prior,DALL·E2都远远领先其它模型的得分。
在定量分析后,作者还进行了定性分析,将unCLIP模型和GLIDE模型进行了对比,目的是评估模型生成艺术图像和照片的效果。作者利用GPT-3和真实的图像caption生成prompt,用于模型生成图像,接着作者使用AVA数据集训练CLIP线性探针来预测人类审美判断。
image.png
作者发现prompt提高了GLIDE和unCLIP的美观质量。下图是美学质量的召回率:
image.png
理论上,Prompt通常会让模型在真实性和多样性上进行权衡。但是作者发现引导unCLIP不会降低召回率,并且会提高美学质量。

6 Related Work

6.1 GAN

image.png
GAN的工作流程如上图所示,首先生成随机噪声输入到生成器中,得到生成的图像,接着将该图像与真实的图像同时输入到辨别器中进行判断,通过判别损失和生成损失来更新模型参数。注意,这里判别器和生成器参数的更新是交替进行。由于GAN的目标函数就是以假乱真,因此GAN生成的图像保真度高。只是训练不够稳定,容易坍塌,并且生成多样性不够。

6.2 AE

image.png
AE即auto-encoder,给定一个输入 x x x输入到特征编码器中得到 y y y,一般来说这个特征 y y y都会小很多,接着将 y y y输入到解码器中得到 x ~ \tilde{x} x~,目标是重建原始图像。

6.3 DAE

DAE其实就在AE的基础上将输入的 x x x打乱,后面的操作完全一样,并且目标是重建原始图像,而不是打乱后的图像。

6.4 VAE


VAE的框架和AE相似,但是实际上大不相同。VAE将输入的真实样本拟合到一个正态分布,然后再从这个分布中采样变量,通过生成器生成样本。VAE有些不错的性质,因为它是从分布中采样,所以生成图像的多样性比GAN好的多。

6.5 VQ-VAE

image.png
VQ的含义是对VAE做量化的意思。VAE的缺点在于不方便做大,并且分布也不好去学习。因此将图像的编码和codebook中的编码作对比,将最相似的编码作为解码器的输入,最后生成图像和原始图片进行对比。

6.6 DALL·E


DALL·E就是在VQ-VAE基础上实现的,文本通过BPE得到文本特征,图像经过VQ-VAE得到图像特征,将二者特征连接到一起,然后输入到GPT中进行自回归生成。推理过程直接使用文本生成文本特征,输入到自回归网络中得到生成的图像。

6.7 Diffusion

image.png
扩散模型相对于其它模型最大的区别在于它的特征和原图是相同尺寸的。它的思想很简单,就是将高斯噪声多轮加入到原始图像中,最终使图像完全变为高斯噪声 z z z,模型(通常是U-Net)负责将得到的高斯噪声 z z z还原回原始图像。由于复原的轮次也和添加噪声的轮次相同,因此在复原时需要前向T轮次,这和GAN不同,GAN只需一次就能将噪声生成图像,因此在效率上diffusion不如其它模型。
具体来说,Diffusion的工作是输入 x t x_t xt,预测 x t − 1 x_{t-1} xt1,然后重复T轮。由于预测回原始图像的任务过于复杂, 因此2020年的PPDM做了进一步的改进,它将预测任务改为了预测添加的噪声,并加入了time embedding,提醒模型现在走到哪一步了。因为不同时间步模型输出的针对性不同,有时候要求细粒度的特征,有时候要求粗粒度的特征。此外,之前预测正态分布的工作都是学习该分布的均值和方差,DDPM提出,只要学习分布的均值就可以得到很好的性能。

6.8 Subsection

image.png
DDPM和VAE有很多相似之处,比如都是编码器-解码器架构,不同之处也很明显,比如扩散模型特征维度保持不变,而VAE中间的特征往往比输入小很多。并且扩散模型有步数的概念。
在DDPM工作出来之后,OpenAI的研究人员就开始着手于将扩散模型更好应用到图像生成上。他们发现扩散模型在大模型上性能表现优异(可扩展性好),并提出新的归一化方式Adaptive group normalization,根据步数进行自适应归一化。此外还提出了classifier guidance的方法,引导模型采样和生成,不仅让采样更逼真,还加快了采样的速度。
上述工作即《Diffusion Models Beat GANs on Image Synthesis》,发表在NeurIPS2021,它的初衷还是在于扩散模型在量化上不如GAN,虽然其生成图像的效果已经很逼真了。这篇工作扩散模型为classifier guided diffusion,其结构如下图所示:
image.png
在之前扩散模型的基础上,两两生成图像之间添加了一个分类器。这个分类器的梯度引导解码器判断当前图像有没有生成的物体,真不真实。这样的操作让模型生成的图像更为真实,在评分上也有显著的提高,超过了当前最好的GAN模型。这里引导的方式有很多种,可以是风格引导,像素级别引导,特征引导,语言方面也可以用大模型生成引导,这些引导都是condition,这也带来了一定的缺陷,因为这些引导都是用别的模型,会增加训练成本,同时不可控。因此后续又出了classifier free guidence,即在输出时分别输出有条件和无条件输出,学习二者的差距。该方法在后续工作都有所应用。
image.png
接下来就是DALL·E2的动机了。扩散模型中加入分类器的操作,其实就是间接加入语义信息的过程,模型借助语义信息从而生成更真实的图像。那么直接利用语义信息,岂不是能生成更好的图像?那什么模型是直接连接语义和图像信息的桥梁?CLIP!这也是我认为的作者工作的脉络。

7 Limitations and Risks

尽管在CLIP嵌入上调节图像的生成可以提高图像生成的多样性,但是也会带来一定的局限性,特别是,unCLIP在属性绑定上比GLIDE要差。这些属性涉及到一些抽象和复杂的概念,如位置属性,文字属性等, CLIP 嵌入本身没有显式地将属性绑定到对象,并且会经常混淆图像中多个对象的属性。如下图所示:
image.png
image.png
一个类似的相关的问题是unCLIP难以生成连贯的文本,如下图所示:
image.png
CLIP的嵌入无法精确编码渲染文本的拼写信息,再加上BPE的编码模糊了caption中单词的拼写, 会让这个问题变得更糟。此外,模型很难在复杂的场景中生成细节。这可能是解码器层次结构的限制,以更高分辨率训练unCLIP应该能够缓解这个问题,代价是额外的训练和推理计算。
image.png
最后探讨安全问题。图像生成模型存在于欺诈和其他有害内容相关的风险,随着图像越来越真实,很容易将生成的图像误认为是真实的图像,这会带来一系列安全问题。

阅读总结

作为文生图的工作,其核心是如何将文本语义和图像语义进行对齐,而CLIP正是学习到丰富的文本语义和图像语义的工作,因此充分利用CLIP丰富的知识,再加上扩散模型的多样性,可以生成高质量和多样的图像。虽然DALL·E2并没有真正将一些复杂的文本语义和图像属性信息对齐,但也取得了巨大的成功,说明这条路是可行的,只需要后续的工作进行进一步的优化和对齐工作,就可以完美解决这样的问题。这也是多模态领域最核心的问题,如果能够将文本、图像、音频、视频等多模态信息在语义上得到对齐,那么大一统模型就将到来,这对人类社会的改变将不可名状。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读-A General Language for Modeling Social Media Account Behavior

论文链接:https://arxiv.org/pdf/2211.00639v1.pdf 目录 摘要 1 Introduction 2 Related work 2.1 Automation 2.2 Coordination 3 Behavioral Language for Online Classification 3.1 BLOC alphabets 3.1.1 Action alphabet 3.1.2 Content alphabets 3.…

【C++】源文件.cpp和头文件.h分离编程

优势介绍 将C代码分为头文件(.h)和源文件(.cpp)的做法有以下几个好处: 模块化和代码组织:将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的…

感知哈希-图片相似度分析

‍本文作者是360奇舞团开发工程师 引言 最近在做小程序换肤功能,因为不同主题色的小程序对应了不同图片库,项目内图片引用的方式又是线上URL地址配置形式,新加一套图片时,就要将图片和线上URL链接对比之后,配置到对应的…

linux日志轮转工具logrotate

目录 一、日志轮转工具的由来 二、如何去使用logrotate工具 2.1 使用cron驱动logrotate 2.2 使用systemd的timer驱动logrotate 三、logrotate命令的子命令解析 四、logrotate的配置 4.1 配置文件的位置 4.2 配置项的具体含义 一、日志轮转工具的由来 在Linux环境中能够…

代码随想录算法训练营第48天 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

文章目录 前言一、198.打家劫舍二、213.打家劫舍II三、337.打家劫舍III总结 前言 dp[]; 一、198.打家劫舍 仔细一想,当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 动规五部曲分析如下: 确定dp数组(dp table)以及下…

【Java|golang】210. 课程表 II---拓扑排序

一、拓扑排序的定义&#xff1a; 先引用一段百度百科上对于拓扑排序的定义&#xff1a; 对一个有向无环图 ( Directed Acyclic Graph 简称 DAG ) G 进行拓扑排序&#xff0c;是将 G 中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点 u 和 v &#xff0c;若边 <…

Mybatis-plus的QueryWrapper的函数,常见方法

获取id 有时候我们新建一条数据的时候要生成一个新的id&#xff0c;我们可以通过下面的类获取 IdWorker.getId()mybatis-plus同时存在and和or查询 LambdaQueryWrapper<House> queryWrapper new QueryWrapper<House>().lambda(); queryWrapper.eq(House::getTena…

安果相亲-找到心仪的另一半 一个安卓免费找对象软件推荐

安果相亲&#xff1a;全国范围内的真实恋爱相亲平台&#xff01; 致力于帮助用户寻找真实恋爱&#xff0c;我们的实名认证机制确 保用户信息的真实性。汇集了高学历、经济稳定、丰富生活经验的优质单身男女&#xff0c;都在这里真诚地等待那个对的人。每个手机只能注册一个账户…

数据结构:线性表(队列实现)

1. 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列具有先进先出(FIFO)的特性. 进行插入操作的一端称为队尾;进行删除操作的一端叫做队头 队列应用于 解决公平性排队(抽号机)广度优先遍历(BFS) 2. 队列的定义 和栈一样,队列也可…

【知网检索】第三届教育,语言与艺术国际学术会议(ICELA 2023)

第三届教育&#xff0c;语言与艺术国际学术会议(ICELA 2023) The 3rd International Conference on Education, Language and Art 第三届教育&#xff0c;语言与艺术国际学术会议&#xff08;ICELA 2023&#xff09;将于2023年11月17-19日在中国北京召开。会议主要围绕会议主…

电力系统知识预备及学习方向

由于电源点与负荷中心多数处于不同地区&#xff0c;也无法大量储存&#xff0c;故其生产、输送、分配和消费都在同一时间内完成&#xff0c;并在同一地域内有机地组成一个整体&#xff0c;电能生产必须时刻保持与消费平衡。因此&#xff0c;电能的集中开发与分散使用&#xff0…

explainerdashboard,一个神奇的 python 库

今天给大家分享一个神奇的 python 库&#xff0c;explainerdashboard。 https://github.com/oegedijk/explainerdashboard explainerdashboard 是一种用户友好的工具&#xff0c;可以简化复杂的机器学习模型&#xff0c;解释&#xff08;与 scikit-learn 兼容&#xff09;机器…

Bodhi Linux 7.0发布:全新亮点抢先看

导读我们非常高兴地宣布Bodhi Linux 7.0的发布&#xff0c;这是一个小型开发团队经过数月的专注开发所取得的成果。从性能增强到尖端更新&#xff0c;让我们深入了解这个版本&#xff0c;看看它为那些寻求轻量级Linux桌面体验的用户带来了什么新特性。 Bodhi Linux 7.0桌面 Bo…

12.(Python数模)(相关性分析一)相关系数矩阵

相关系数矩阵 相关系数矩阵是用于衡量多个变量之间关系强度和方向的统计工具。它是一个对称矩阵&#xff0c;其中每个元素表示对应变量之间的相关系数。 要计算相关系数矩阵&#xff0c;首先需要计算每对变量之间的相关系数。常用的相关系数包括皮尔逊相关系数和斯皮尔曼相关…

第32章 Linux内核打印实验

本手册的实验都是在buildroot系统上完成的&#xff0c;由于buildroot系统已经设置了相应的打印等级&#xff0c;所以驱动的相关打印都能正常显示在串口终端上&#xff0c;如果将实验系统换成了ubuntu&#xff0c;然后加载同样的驱动&#xff0c;会发现打印信息不见了&#xff0…

PBR纹理的10种贴图

PBR 是基于物理的渲染的首字母缩写。它试图通过模拟材料如何吸收和反射光&#xff0c;以模仿现实世界中的光流的方式产生视觉效果。最近的游戏引擎由于其逼真的效果而越来越多地使用 PBR 纹理。对于实时渲染&#xff0c;它们被认为是真实世界场景的最佳近似值。 推荐&#xff…

极星 4:一辆不需要宣传就自带美学的车

当市面上的新车都开始逐步走向更多的功能、更繁琐的设计的时候&#xff0c;极星更像一个独行的人&#xff0c;走了一条跟其他车企大相径庭的道路&#xff0c;带给我们对于同一个世界不同的视图。 不张扬、够简洁&#xff0c;从不炫耀自己但又蕴含着大的智慧&#xff0c;如夜空中…

Python深度学习-Keras》精华笔记4:解决深度学习回归问题

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 持续更新《Python深度学习》一书的精华内容&#xff0c;仅作为学习笔记分享。 本文是第4篇&#xff1a;基于Keras解决深度学习中的回归问题。 Keras内置数据集 回归问题中使用的是内置的波士顿房价数据…

JavaScript中的事件捕获(event capturing)和事件冒泡(event bubbling)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 事件捕获和事件冒泡⭐ 事件捕获&#xff08;Event Capturing&#xff09;示例&#xff1a; ⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;示例&#xff1a; ⭐ 应用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开…