type
status
date
slug
summary
tags
category
icon
password
ㅤ | info |
paper | |
code | |
org | Stanford University |
个人博客位置 |
1 Motivation
虽然
diffusion model
在最近取得了显著的进展,但目前这一模型还无法生成分层图片。然而,绝大多数现有的视觉内容编辑软件和工作流程都是建立在图层基础之上的,它们高度依赖于透明或分层元素来创作和编辑内容。这导致设计师在使用diffusion model
生成图片后,还需要进行一些繁琐的后期处理。那么,有没有办法让预训练的diffusion model
能够生成RGBA图片和分层图片呢?这正是本文研究的核心问题。要解决这一问题,主要面临两个难点:
- 由于
diffusion model
是在RGB三通道上训练的,需要对其进行适配,以处理包含透明通道的RGBA图片。关键在于如何让RGBA的latent表示符合预训练的latent分布,并正确地解码出相应的图片。
- 生成多层图片时,需要考虑不同图层之间像素的语义连贯性。
2 Method
2.1 SD实现transparency image 生成
尽管
diffusion model
对RGB图像生成效果较好,但缺乏对透明通道(Alpha通道)的支持。本节的目标是让diffusion model
能够生成包含透明通道的图像。对于Latent Diffusion Model(
LDM
)而言,其核心组件包括VAE
和作用于隐空间的diffusion model
。为了让原本处理RGB图像的LDM能够理解和生成RGBA图像,我们需要确保RGBA图像的latent distribution能够被这两个组件所理解。具体来说,需要完成以下两个步骤:
- 对
VAE
的对齐。(详见2.1.1节)
- 对
diffusion model
的对齐。(详见2.1.2节)
pipeline如下图所示:
包含透明通道的RGBA图片, shape为
的RGB部分对alpha通道为0的位置做了gaussian blur来减少高频信号对神经网络的影响。称之为padded RGB image。
的alpha通道
, “”为对应元素相乘,称之为premultiplied image
2.1.1 VAE的对齐
在过去对神经网络的研究中,发现一个现象:
神经网络能够在不改变整体特征分布的情况下,将图像隐藏在现有特征内部的扰动中,例如,通过小的、不可见的像素扰动将图像隐藏在另一个图像中。neural networks have the ability to “hide”features in perturbations inside existing features without changing the overall feature distributions, e.g., hiding an image inside another image through small, invisible pixel perturbations.
根据这个理论,为了在保持
VAE
原有latent distribution不变的前提下引入透明通道信息,我们可以额外训练一个编码器。这个编码器的作用是学习一个latent offset,该offset包含了透明通道的信息。将原始的latent与这个offset相加,不会影响原始分布的生成效果。同时,我们还可以额外训练一个解码器,用于对引入偏移量后的latent进行解码,从而实现期望的解码效果。第一步:学习一个transparency latent offset ,当RGB通道latent加上这个offset不会影响重建效果。
即满足:
identity loss越小,这个新增的offset对原始latent的破坏越低。核心目的:尽可能保证引入的offset后的latent能够被预训练的
diffusion model
处理。换句话说就是让引入offset后的latent分布与训练分布尽可能的一致。下面在详细介绍这个transparency latent offset是如何计算。
作者额外引入了一个encoder模型 (随机初始化),模型的输入为包含透明通道信息的和包含去高频RGB信息的,可以建模为
(的网络结构和一致,有所区别的是input channel为4)
: premultiplied image
:预训练latent diffusion model的encoder(freeze参数)
:预训练latent diffusion model的decoder(freeze参数)
:alpha image的latent
第二步:训练一个decoder ,能够实现从RGBA latent中恢复出和。
将恢复的结果记为,formula为:
的模型架构为
Unet
,encoder和LDM
的VAE的encoder的架构相同,decoder部分与VAE的decoder架构相同,整体pipeline示意如下:训练的目标为
是
PatchGAN
discriminator的优化目标。最终结合第一步和第二步,整体优化目标如下,
作者的实验设置中
2.1.2 Diffusion Model的对齐
为了做含有透明通道的生成任务,需要通过diffusion的方法建立简单的高斯分布与含有透明通道信息的latent的联系。上面通过VAE loss的训练将引入了透明通道信息latent与原始latent的生成效果尽可能拉平,这让微调
diffusion model
变得很容易。通过以上训练,我们可以通过从高斯噪声中采样,通过
diffusion model
和训练好的decoder 生成RGBA图片。2.2 分层生成
通过前文介绍的方法,我们可以用
diffusion model
生成RGBA图片。然而,这种方法灵活性有限。例如,如果我们希望固定前景并生成相应的背景图像,亦或给定背景的情况下生成不同的前景元素,上述的方法都不能实现。为了解决这一问题,作者提出了一种创新的解决方案,将diffusion model
拓展为多图层模式,以增强模型的灵活性和适用性。最直觉的方式:分开训练前景图层和背景图片。引入前景
LoRA
(参数为)和背景LoRA
(参数为)进行进行分开训练💡注意,这里的前景图片应该RGBA图片,它的latent是通过2.1节的方法提取,通过训练diffusion model
建立简单高斯分布到目标分布的映射。与2.1.2不同的是,这里额外引入了一个layer的交互。
这样训练有一个劣势。它并没有考虑前景与背景的语义连贯性。可能会导致前背景图层合成的很突兀。位了解决这个问题,作者提出可以通过共享attention层来维持连贯性。简单来说就是在attention layer中将前景和背景的进行concatenate。可以将上式写作:
其中 为前景的latent noise,为背景的latent noise。为了支持layer-conditional生成,训练时随机将某层的noise置为0。如固定前景生成背景时将前景的latent noise 0,即不对前景的latent进行denoise,此时的架构称为
foreground-conditioned generator
。同理可以固定背景生成前景,此时的架构称之为background-conditioned generator
。扩展思路,可以得到以下4种架构
2.3 数据集构建
2.3.1 RGBA数据集
根据前文“2.1 SD实现transparency image 生成”的内容,RGBA数据集的每一个item应当是个二元组(text prompt,RGBA图片)。初始数量为20k,训练一版
VAE
和SD
,通过human-in-loop的方式扩展到45k。再用扩展后的数据继续训练VAE
和SD
,随后生成5M RGBA图片,通过LAION Aesthetic threshold和CLIP
score进行过滤得到1M RGBA图片,最后用LLaVA
对生成的RGBA图片进行caption(将alpha通道为0的像素置为0,避免caption包含背景的内容)。最后用这1M数据再次对VAE
和SD
微调了15k iteration。2.3.2 multi-layer数据集
训练分层
diffusion model
的数据集每一个item应当是一个四元组(foreground,background,blended image,text prompt)。blended image可以通过foreground image,background image进行合成。因此只需准备(foreground,background,text prompt)。- STEP1:首先作者通过GPT生成一些prompt pair。每个pair有3个元素(
foreground prompt
,,entire image prompt
,background prompt
)如:。foreground prompt
复用用RGBA数据集中的prompt, 用GPT生成剩下两个prompt。
- STEP2: 将前景图片,前景object mask和
entire image prompt
送入sdxl inpaint
模型中,绘制背景得到中间结果,记作 intermediate image。
- STEP3: 将intermediate image,背景mask(对前景object mask取反后进行erode)和
background prompt
送入到sdxl inpaint
模型中对前景区域进行重绘,得到一张纯背景图。
通过以上三个操作,将1M RGBA数据集转化为multi-layer数据集。
3 Result
3.1 Qualitative result
3.1.1 SD实现transparency image 生成效果展示
从作者给出的示例中可见,模型对原生透明图片的生成效果非常不错。能很好合成生成玻璃、毛发、火焰的透明效果
3.1.2 SD多层图片生成效果展示
多层图片的语义连贯性很好。
3.2 layer-condition 生成
作者分别展示了根据前景生成背景,根据背景生成前景情形,生成效果都非常不错,前背景的语义连贯性很好,有较大的实用价值。
3.3 迭代生成
还可以对layer diffusion进行拓展,使用迭代生成的思路实现复杂场景图片的合成。。
3.4 控制生成
由于layer diffusion用Lora finetune SD尽可能的不破坏预训练的先验分布,使其可与其它adapter联合使用。作者展示了layer diffusion 和
controlnet
结合使用的效果。3.5 消融实验
3.5.1 架构消融实验
作者分别尝试了其它让SD
支持
RGBA图片生成的架构VAE
架构不变,adding channels toSD
Unet
。原本SD
Unet
的输入是,VAE的输入通道为3。为了不改变VAE,分别将RGB通道和alpha通道送入VAE编码为latent(alpha通道图片会在channel维度复制到3),此时将这两个latent进行concat得到的latent,将SD
Unet
的输入层的channels修改为8。
SD
Unet
架构不变,改变VAE
的输入channels。即将VAE的input channels从3改为4,再在RGBA数据上训练VAE,随后训练SD
Unet
。作者发现用这个方法训练的很不稳定,生成效果也一般。
上述两种架构的生成效果都不好。核心原因:破坏了大规模数据下拟合的latent分布。而作者提出的架构相对较好的继承了pre-train的先验知识。
3.6 局限性
目前的
layer diffusion
方法无法实现“clean transparency”和“harmonious blending“很好的权衡。举个例子:- 以背景为condition做生成,虽然融合图片中前景图片的光影融合效果好,但是其透明图片同样包含光影,不利于透明图层元素的复用。
- 以前景为condition做生成,融合图片的光影效果较差。
作者在后续工作“Imposing Consistent Light”对这个问题进行了完善。 https://github.com/lllyasviel/IC-Light
4 小结
作者针对目前
diffusion model
无法满足设计行业工作流程依赖图层信息做进一步编辑的痛点提出了layer diffusion
方法实现分层图片的生成。diffusion model
实现RGBA图片的生成。通过额外引入RGBA encoder来将透明层信息编码为不影响预训练latent分布的 offset尽可能的保留了预训练模型的生成能力。并额外引入了一个decoder能解码出透明层图片。
diffusion model
实现分层生成。设计了一套高效可用的数据收集pipeline准备训练数据。通过attention sharing方法保证不同层之间的语义连贯性。
- 作者:莫叶何竹🍀
- 链接:http://www.myhz0606.com/article/layer_diffusion
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章