RCG Self-conditioned Image Generation via Generating Representations

本文主要是介绍RCG Self-conditioned Image Generation via Generating Representations,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RCG: Self-conditioned Image Generation via Generating Representations

TL; DR:将图像的无监督表征作为(自)条件(而非是将文本 prompt 作为条件),生成与原图语义内容一致的多样且高质量结果。视觉训练能不能 / 需不需要摆脱文本,仍有待研究。

引言

就像图像自监督表征学习(对比学习 / 图像掩码建模)成功赶超了有监督训练一样,作者想要在图像生成领域,使得无条件(自条件)生成的性能追赶上条件生成。

不同于无条件生成直接将噪声分布映射到图像分布。本文提出的自条件生成框架是先通过自监督表征训练得到图像编码器提取图像的表征,再训练一个表征 diffusion 模型对表征进行去噪,最后使用根据去噪后的表征再生成真实图片。

在这里插入图片描述

方法

本文提出了 RCG(Rpresentation Conditioned image Generation),RCG 由三部分组成:一个预训练的自监督图像编码器、一个表征生成器和一个像素生成器。详细介绍如下:

图像编码器:RCG 使用了 moco-v3 作为图像编码器,将图像分布(image distribution)映射到表征分布(representation distribution)。表征分布需要具有两个特点:易于用 diffusion 模型建模和含有丰富的高层语义特征。每个表征都根据自身的均值和标准差进行标准化

表征生成器:RCG 中的表征生成器称为 RDM,用于从表征分布中采样。RDM 采用具有多个残差块的全连接网络作为其骨干网络,残差块的具体结构如图所示。RDM 采用 DDIM 的训练和采样算法。训练阶段,图像表征 z 0 z_0 z0 会掺入高斯噪声 ϵ \epsilon ϵ 得到 z t z_t zt,RDM 的训练目标就是对 z t z_t zt 进行去噪,得到 z 0 z_0 z0 。推理阶段,采用 DDIM 的采样方式,RDM 对采样的高斯噪声降噪,生成图像表征。

在这里插入图片描述

像素生成器:RCG 中的像素生成器负责根据给定的图像表征作为条件,来生成图像像素。理论上来说,这里的像素生成器可以是任何条件生成模型,只要将原本的条件(text, label, etc.)表征换成自监督的图像表征即可。这里作者使用了 MAGE (本文一作的另一篇工作)作为像素生成器。训练阶段,像素生成器根据带掩码的图像和该图的表征,来重建原图。推理阶段,像素生成器根据 RDM 生成的图像表征和一个完全的掩码图,来生成图像。

在这里插入图片描述

以上介绍了 RCG 的三个主要组件及其训练方式。另外,RCG 还有一个重要特点,即虽然它本身是一种无条件(自条件)的生成方法,但它可以应用 Classifier-free Guidance(CFG)。

Classifier-free Guidance:CFG 可以提高生成模型的性能,但一般在无条件生成模型上没法用,因为 CFG 实际上是一种通过无条件的生成,来为条件生成提供引导的方法。虽然 RCG 也可以用于无条件生成,但实际上 RCG 中的像素生成器是要根据无监督的图像表征(作为自条件)来生成的,所以 RCG 可以应用 CFG,来进一步提高性能。

RCG 采用了 Muse 方法来在 MAGE 像素生成器中使用 CFG。在训练阶段,MAGE 有 10% 的概率会在没有自监督表征作为条件的情况下进行训练。在推理时,MAGE 每步会为每个 mask token 预测一个无条件的 logit l u l_u lu,和一个条件于自监督表征的 logit l c l_c lc,最终的 logits l g l_g lg l c l_c lc 根据系数 τ \tau τ 远离 l u l_u lu l g = l c + τ ( l c − l u ) l_g=l_c+\tau (l_c-l_u) lg=lc+τ(lclu)。MAGE 根据最终的 l g l_g lg 预测 mask token。

结果

定量结果

先看一下再 ImageNet 256px 上图像生成的定量指标结果。需要说明的是,由于无条件生成的方法无法使用 CFG,故这里 RCG 列出的结果也是没用 CFG 的。RCG-L FID 达到 3.56,IS 达到 186.9,超越了所有的无条件生成的 baseline,甚至超越了所有的条件生成的模型。

在这里插入图片描述

下面这张表是对比条件生成,并且加 CFG 的结果。可以看到,使用 CFG 之后,RCG 的 FID (3.56->3.31) 和 IS (186.9->253.4) 都有所提升,对比条件生成的方法使用 CFG 之后,也很接近了。

在这里插入图片描述

文章还做了丰富的消融实验,包括自监督表征模型大小/深度/宽度、projection 维度、去噪步数等,详见原文。

定性结果

文章的定性结果也很有意思,这里主要看表征重建和表征插值两个结果。

表征重建 是首先 ImageNet 中的图像提取自监督表征,然后对表征加入一定噪声之后,RDM 去噪,再生成图像。可以看到,RCG 的生成结果几乎完美的保持了图像的语义,并且具有一定的多样性。这说明了预训练的自监督表征真的能够表达图像的语义。

多说一句,感觉这种能力非常适合拿来做图像分类的数据增强,因为它能忠实地保持语义,同时具有多样性。而数据增强的目标就是在不改变图像基本语义的基础上,尽量丰富图像的多样性。一般的图像增强是在 pixel 维度加噪声,而 RCG 生成则相当于在 representation 维度加噪声。

在这里插入图片描述

P.S. 在笔者自己的实验中,RCG 对于自然图像的生成基本没有问题,但是对于人脸的生成却是崩的一塌糊涂。经知友提点,这是因为处于 ethics 考虑,目前 ImageNet 的人脸都被加了模糊,完全没有细节。如需生成人脸图像,自行收集相关数据集 finetune 会好一点。

在这里插入图片描述

表征插值

既然有丰富语义的表征,那能不能像之前 GAN 那样对 latent 进行编辑/插值,来控制生成图片的属性呢?这样的实验自然也是少不了,可以看到,两个图片表征之间插值的生成结果反应了变化的过程。这表明自监督表征空间确实是含有丰富的语义的,并且非常平滑。

在这里插入图片描述

总结

在计算机视觉领域,自监督表征学习(对比学习 / 图像掩码建模)基本已经摆脱了人工标注数据的束缚,迈入自监督学习的新时代。而在图像生成领域,还是需要大量的带标签(text/label)的图文对。本文尝试根据自监督表征,来进行自条件的图像生成,性能直逼有条件生成,可以说是接近弥合了这一 gap。

从方法的角度来看,是很有意思的一篇工作,结合视觉自监督表征,实现了无标注、无文本条件的生成。唯一遗憾就是方法本身看起来不太简洁,不熟悉几篇前置工作的话,理解起来还是要稍微费点劲儿的。

从应用的角度来看,上文中已经提到,RCG 生成的图像是一个很自然的数据扩增方法,而且在少样本的 setting 下,可能能发挥不小的作用。

从更大的视角来看,视觉智能的出现到底需不需要依赖于文本。即使是已经被认为取得成功的图像自监督表征方法中,无论如何最终都至少需要一个 linear probing 的微调,与我们想象中的”智能“还相去甚远。CLIP 的意义和影响力无疑是非常巨大的,它借助图文对这一弱监督数据,对齐了图文双模态。视觉领域终于也借助语言监督,实现了所谓的 zero-shot,从而带来了无限的想象力。从此,各种各样的视觉任务(分类、检测、分割等)都借助 CLIP 实现了 open-vocab。

然而,毕竟图像与文本是两个不同的模态,差别也是固有的。文本能帮助视觉,也会限制视觉。所谓”一图胜千言“,很多情况下,一张图的内容可能是语言很难甚至无法精确描述的。即,视觉的细粒度可以认为是无限的。以 CLIP 为例,熟悉它的人都知道,虽然说是对齐了两种模态,但是无论正负样本,CLIP 的图像文本相关性分数会集中在一个很小的区间(如 0.2-0.5),而非遍布整个 0-1 区间,这或许就是图文两模态之间 gap 的一点体现。

无独有偶,近期大火的 LVM,也是脱离文本的纯视觉训练方式,把视觉数据都统一起来,然后做自回归式的预测下一个 token。似乎大牛们都在探索无文本(text, label)的视觉训练。在 LLM 爆火的这一年,感觉 CV 的主题就是往上蹭,随便兜一个什么 adapter,就把视觉编码器的特征接到 LLM 上去。这种方式当然可以很好地借助 LLM 的理解能力,出一些前所未有的效果(GPT4 等)。但是按照条路走下去,看起来从此视觉就没什么需要研究的了,只是训一个 encoder,做好 LLM 的 sensor 即可。个人觉得这不会是 CV 或者图文多模态的最终形态。很期待视觉领域本身能涌现出更多更有想法的工作。

这篇关于RCG Self-conditioned Image Generation via Generating Representations的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809113

相关文章

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

Python安装llama库出错“metadata-generation-failed”

Python安装llama库出错“metadata-generation-failed” 1. 安装llama库时出错2. 定位问题1. 去官网下载llama包 2.修改配置文件2.1 解压文件2.2 修改配置文件 3. 本地安装文件 1. 安装llama库时出错 2. 定位问题 根据查到的资料,发现时llama包中的execfile函数已经被下线了,需要我们手动修改代码后

IMAGE LIST

   CImageList就是一个容器,用来存储图片资源,方便这些资源被CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl,CListCtrl等使用。      要使用CImgeList首先要使用它的create函数:      一般用的比较多的是这一个函数,当然,它还有很多重载,自己可以去翻阅msdn.       BOOL

【vscode】vscode paste image插件设置

本文首发于 ❄️慕雪的寒舍 vscode编辑md文件的时候,如果想插入图片,自带的粘贴只会粘贴到当前目录下,也没有文件重命名,很不友好。 在扩展商店里面有mushan的Paste Image插件,相比自带的,更加友好一点。但是它的配置把我弄糊涂了,简单测试了一下才明白处理的逻辑。 注意,本文编写的是对mushan的Paste Image插件的教程。 首先是安装这个插件,这个不多说

pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二)

pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二) pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二)DatasetInputs to modelCaption LengthsData pipelineEncoderAttentionDecoder代码数据集初始化 create_input_files.py训练 tr

Show,Attend and Tell: Neural Image Caption Generation with Visual Attention

简单的翻译阅读了一下 Abstract 受机器翻译和对象检测领域最新工作的启发,我们引入了一种基于注意力的模型,该模型可以自动学习描述图像的内容。我们描述了如何使用标准的反向传播技术,以确定性的方式训练模型,并通过最大化变分下界随机地训练模型。我们还通过可视化展示了模型如何能够自动学习将注视固定在显着对象上,同时在输出序列中生成相应的单词。我们通过三个基准数据集(Flickr9k,Flickr

Docker Image 命令

文章目录 目录 文章目录 1 . Docker镜像是什么? 2 . 镜像命令详解 docker images docker tag docker pull docker rmi  docker save 总结 1 . Docker镜像是什么? Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、 源码、库文件、依赖、工具等一些

[LeetCode] 238. Product of Array Except Self

题:https://leetcode.com/problems/product-of-array-except-self/description/ 题目 Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all