详细解读ControlNet作者最新力作:透明图层的生成模型LayerDiffusion

本文主要是介绍详细解读ControlNet作者最新力作:透明图层的生成模型LayerDiffusion,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Diffusion models代码解读:入门与实战

前言:ControlNet的作者Lvmin Zhang的新作品LayerDiffusion,可以用于生成四通道带有透明图层的图片,这对于设计和落地是巨大的利好,因为业务场景下会有很多背景替换、人物替换的需求,从此告别抠图!这篇博客详细解读背后的原理,并解读代码和复现实验。

目录

贡献概述

方法详解

当前问题

整理流程

Loss约束

多透明图层生成

数据收集

效果复现

论文和代码 

贡献概述

生成透明图像的方法,可以生成单个透明图像或多个透明层。理论上任何LDM都可以通过这种方法对其进行微调转换为透明图像生成器。

该方法学习了一个“潜在透明度”,将 alpha 通道透明度编码到预训练的潜在扩散模型的潜在流形中,通过调节添加的透明度作为潜在偏移量来保持生成质量,以避免破坏潜在分布,对预训练模型的原始潜在分布的变化最小。

方法详解

当前问题

1、透明图层的图像没有大规模数据集。

2、SD对潜在空间非常敏感,对潜在空间的数据分布稍微调整也会严重影响推理效果。所以直接微调让其生成透明图像会破坏原有的潜在空间分布。

整理流程

先将透明图像(四通道)分解成RGB图像(三通道)和alpha通道的图像(单通道),将RGB图像变成Premultiplied图片经过SD编码器与潜在透明图像相加,生成的Premultiplied图片(四通道),经过解码器得到alpha通道的图像和RGB图像(三通道)。

透明编码器和透明解码器:从头训练一个专门针对透明图像的编码器,这个编码器的输入不仅有alpha通道的图像,还有像素空间的图像。透明解码器的输入是调整后的潜在噪声和重建后的RGB图像。

Loss约束

身份损失:因为在原有的潜在分布上加上了alpha通道的噪声会破坏原有的噪声分布,所以用一个身份损失约束对潜在空间偏移量的修改。

重建损失:用重建后的alpha通道图像和重建后的RGB图像与输入图像计算损失:

鉴别损失:引入PatchGAN的鉴别器损失:

最终的损失由三个损失加权得到:

默认情况下使用λrecon = 1, λidentity = 1, λdisc = 0.01

微调损失:由于调整后的潜在空间特征分布,与原始预训练的潜在空间特征分布分布保持一致。因此可以直接在调整后的潜在空间上对Stable Diffusion进行微调。微调公式和大部分扩散模型微调的公式一致,唯一变化是输入参数不一致:

多透明图层生成

前景的噪声潜在图像被表示为xf,背景的噪声潜在图像被表示为xb。然后训练了两个LoRAs,一个用于前景(由θf参数化),另一个用于背景(由θb参数化),以去噪这两个编码后的图像。

这两个模型之间的注意力部分的权重共享,训练目标相互独立:

为了实现多个层的一致生成,研究者们在扩散模型的每个注意力层中,将“前景潜在空间向量”和“背景潜在空间向量”进行拼接,使得两个独立的扩散过程可以合并为一个共同优化的大型模型。合并后的噪声被表示为:

数据收集

使用human-in-the-loop(人类会全程参与数据的筛选和编辑)的方法,共收集了1M 透明图像,并将这些单层透明图层样本的数据扩展到多层样本。扩展的方法如下:

用GPT生成前景+背景的提示词,前景提示通过训练好的透明图像生成器处理,以获得透明图像。使用SDXL修复模型将所有Alpha值小于1的像素修复,以获得中间图像。反转Alpha掩模,进行腐蚀操作,然后再次使用背景提示进行修复,以获得背景层。重复这个过程1M次,以生成大约1M对层。

效果复现

论文和代码

https://github.com/KaustubhPatange/Diffuser-layerdiffuse

这篇关于详细解读ControlNet作者最新力作:透明图层的生成模型LayerDiffusion的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre