详细解读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

相关文章

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4