激动人心的LayerDiffusion终于可以在ComfyUI中使用了
一、什么是LayerDiffusion
随着Stable Diffusion等散射模型的蓬勃发展,人工智能图形生成进入了一个崭新的阶段。我们可以仅仅通过文字提示,就可以让AI模型为我们生成逼真的图像。但是,目前主流的AI生成模型大多只能生成普通的RGB图像,对生成具有透明通道的图片能力还非常有限。这对于许多创作者来说是个痛点。无数PS、AE设计工作都需要大量高质量的透明元素,而目前获取透明图像资源的唯一途径就是人工购买或下载商业透明素材库的资产,这需要花费高昂的费用。
这种情况直到最近才有了转机。一组斯坦福大学的研究人员提出了一个叫做LayerDiffusion的方法,可以让现有的散射模型通过微调直接生成透明图像甚至是多层透明图像[1]。这个方法背后的核心思路其实非常简单直接,研究人员发现,我们可以把透明通道的信息编码进Stable Diffusion等模型的潜向量空间里,也就是给原来的无透明通道的潜向量添加一个小小的透明通道“偏移”。这个偏移量非常关键,它必须微小到不影响原始模型潜向量分布的整体形态。否则的话,加入透明通道反而会使得原始模型的图像生成质量下降。研究者通过构建独立的Encoder和Decoder网络来实现透明通道的潜向量编码和解码,以确保不影响原始Stable
Diffusion等模型的性能。
一旦得到了具有透明通道信息的潜向量表示,我们就可以开始微调现有的散射模型,让它们支持生成透明图像了。为了训练这个框架,研究团队还采用了一种人机交互的方式收集了100万张高质量的透明图像素材。这些图像涵盖了各种各样的内容主题和风格,可以很好地支持透明图像生成模型的训练。
有了LayerDiffusion框架,ComfyUI用户就可以直接把任何已有的散射模型“托管”到这个框架里进行微调,使其快速获得生成透明图像的能力。生成效果非常惊人,完全不逊色于商业透明素材库里的专业素材。更棒的是,这个框架不仅可以生成单层透明图像,还可以生成多层图像。这为各种创意设计提供了极大的便利。
例如,用户可以提供两个文字提示,一个是“火焰”,一个是“木屋的桌子”,让模型生成两层透明图像——一个是火焰,一个是桌子。然后我们可以自由调整这两层的堆叠与混合,就可以得到火焰在桌子上的不同效果。这样的操作极大地丰富了图像创作的可能性。
总之,LayerDiffusion为基于散射模型的图像生成带来了透明图像和分层图像的支持,让艺术家和设计师可以超越传统二维平面图像的限制,进入一个崭新多维的创作空间。它也将会彻底改变我们获取透明图像素材的方式——不再需要人工购买或下载现成的资产,AI模型可以为我们实时生成所需的任何透明元素或层次关系。相信未来这项技术还会ProtocolMessageType和强大,带来更多惊喜。

官方图样
二、ComfyUI中的Node介绍
截至3月2日,官方仅仅发布了Stable Diffusion WebUI(forge)的插件,这令很多ComfyUI用户非常着急。根据官方内容,ComfyUI的支持还未列为高优先级任务,何时能够支持还遥遥无期。不过高手在民间,今天Github上已有大神huchenlei发布了最新的ComfyUI的插件。
插件地址:GitHub - huchenlei/ComfyUI-layerdiffusion: Layer Diffusion custom nodes

官方指南里,需要的一个node:Apply Mask to Image,来自另一个工具:comfyui-tooling-nodes
这里主体使用了两个node:
1、 Layer Diffusion Apply
该节点用于修饰用于KSample的model,输入model,输出也是model。输出的model链接到KSampler的Model输入。该节点还带有2个参数:method和weight。
- method
其中method包含两个方法:Attention Injection以及Conv Injection。
[Attention Injection]
Attention Injection是LayerDiffusion中实现控制透明图像生成的一种方法。它通过在预训练好的Stable Diffusion模型的self-attention层中注入透明度attention map,以控制生成图像的透明区域。
具体来说,首先利用辅助网络来预测目标透明图像的透明度attention map。然后在Stable Diffusion模型的self-attention计算中,将这个透明度attention map与原始的attention map进行concat拼接,送入后续的attention运算。透明度attention map中,透明区域的值接近1,不透明区域的值接近0。这样,原始的attention map与透明度attention map共同作用,可以指导模型仅在指定的透明区域生成透明效果。
Attention Injection的优点是可以精确控制图像的透明区域,同时对原有模型的干扰很小。但需要训练额外的网络来预测透明度attention map,增加了一定计算量。
[Conv Injection]
Conv Injection是LayerDiffusion中另一种控制透明图像生成的方法。它通过在Stable Diffusion模型的中间卷积层中注入透明度feat map来控制生成结果。
具体是,一个辅助卷积网络会预测目标图像的透明度feat map,然后将其添加到Stable Diffusion模型中途的卷积层作为额外的输入通道。透明区域的feat map通道值接近1,不透明区域接近0。这样,Stable Diffusion在生成图像时,会把透明度信息融入到特征中,从而控制最终输出的透明效果。
与Attention Injection相比,Conv Injection增加的计算量更小,但控制效果较粗糙。它通过全局的特征融合控制透明效果,不能像Attention Injection那样精确指定透明的区域。
综上,Attention Injection和Conv Injection都是LayerDiffusion实现控制生成透明图像的有效方法,各有优劣。可以根据实际需求选择使用。
- weight
0表示完全不透明,1表示完全透明。weight值在0到1之间表示半透明的透明度。
2、Layer Diffusion Decode
该节点用于解码转化为影响图像生成的信号。具体解释如下:
- Attention Injection
在Attention Injection中,decode的作用是将融合了透明度attention map的attention转化为影响图像生成的信号。
具体来说,经过attention计算得到的融合attention map,还不能直接影响最终的图像输出。需要通过后续的decode计算,将attention转化为影响图像生成的信号,最终反映到输出结果中。
这里的decode可以看作是attention的解析过程。它将attention中编码的透明度信息,解码出来,转化为模型生成透明的具体操作信号。
- Conv Injection
在Conv Injection中,decode的作用也是将透明度feat map转化为影响图像生成的信号。
经过卷积计算后,特征图中已经包含了透明度信息。但这些特征还需要进一步的decode,才能转换为模型生成透明的具体操作。
这里的decode可以视为特征的解析过程。它将特征中编码的透明度,解码出来,转化为模型对图像透明效果的实际控制。
综上,在两种方法中,decode都起到将透明度信息从attention或特征中解析出来的作用。将透明度控制信号转换为模型生成透明图像的实际执行操作。这个过程非常关键。
该节点有2个输入,一个是Sample,接受从KSample输出的Latent。一个是Images,用于接受VAE Decode输出的Image。然后经过解码生成两个输出:Image是包含主体信息的前景RGB图像, MASK是控制透明度的蒙版。
3、Apply Mask to Image
该节点来自comfyui-tooling-nodes,其作用是将前景图像加上透明度蒙版最终合成最终图像。
完整的Workflow可以参考下图:

三、在Ultimate SD Upscale 中放大图像
因为最终输出的图像是包含Alpha通道的4通道图像,该图像无法使用Ultimate SD Upscale进行放大。可LayerDiffusion目前还无法直接支持Tile放大。但是实际工作中,我们常常需要使用Ultimate SD Upscale进行图像放大以获得更加精细的输出。尤其在输出全身像的时候,原始输出图片常常脸崩,只有经过Ultimate SD Upscale放大以后才能获得高质量的图像。这时候如何使用LayerDIffusion来获得高质量的透明图像呢。经过实验,可以通过下面方法使用。
1、放大Mask

首先通过Convert Mask to Image将蒙版转换成单通道图像,使用Image Resize将单通道图像放大,这里需要注意的是放大后的尺寸必须和原图放大的尺寸一致,否则后期蒙版和原图无法合并。
2、放大原始图
使用Ultimate SD Upscale进行图像放大。

这里放大的图像使用Layer Diffusion Decode的Image输出,其他输入与KSample输入一致。Upscale Model我习惯使用4x-UltraSharp.pth,这个影响不太大。
3、合并图像生成放大的透明图
最后,将放大后的Mask和Image进行合并,生成最终的透明图像。这里还是使用Apply Mask to Image节点完成。
最终放大透明图的workflow如下:

四、总结
因为我更喜欢使用ComfyUI来完成自己的工作,所以对LayerDiffusion支持ComfyUI这件事更加关注。自从2月28日LayerDiffusion发布以来,日日夜夜都在关注项目进度。今天发现终于等到了ComfyUI-layerdiffusion的发布。
希望各位能够痛快的进行工作吧。



为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取
一、ComfyUI配置指南
-
报错指南
-
环境配置
-
脚本更新
-
后记
-
.......

二、ComfyUI基础入门
-
软件安装篇
-
插件安装篇
-
......

三、 ComfyUI工作流节点/底层逻辑详解
-
ComfyUI 基础概念理解
-
Stable diffusion 工作原理
-
工作流底层逻辑
-
必备插件补全
-
......

四、ComfyUI节点技巧进阶/多模型串联
-
节点进阶详解
-
提词技巧精通
-
多模型节点串联
-
......

五、ComfyUI遮罩修改重绘/Inpenting模块详解
-
图像分辨率
-
姿势
-
......

六、ComfyUI超实用SDXL工作流手把手搭建
-
Refined模型
-
SDXL风格化提示词
-
SDXL工作流搭建
-
......

由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取


营销七
如何训练LorA
对于很多刚学习AI绘画的小伙伴而言,想要提升、学习新技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
如果你苦于没有一份Lora模型训练学习系统完整的学习资料,这份网易的《Stable Diffusion LoRA模型训练指南》电子书,尽管拿去好了。
包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
由于内容过多,下面以截图展示目录及部分内容,完整文档领取方式点击下方微信卡片,即可免费获取!



篇幅有限,这里就不一一展示了,有需要的朋友可以点击下方的卡片进行领取!

相关文章:
激动人心的LayerDiffusion终于可以在ComfyUI中使用了
一、什么是LayerDiffusion 随着Stable Diffusion等散射模型的蓬勃发展,人工智能图形生成进入了一个崭新的阶段。我们可以仅仅通过文字提示,就可以让AI模型为我们生成逼真的图像。但是,目前主流的AI生成模型大多只能生成普通的RGB图像,对生成具有透明通道的图片能力还非常有限。…...
【JVM】finalize() 方法的定义与作用
finalize() 方法的定义与作用 定义 finalize() 方法是 Java 中的一种特殊方法,定义在 java.lang.Object 类中。它在对象被垃圾回收之前由垃圾回收器调用,用于执行清理操作。 方法签名: protected void finalize() throws Throwable作用 …...
这10个前端库,帮我在工作中赢得了不少摸鱼时间!!
文章目录 前言1、dayjs2、 lodash3、 Quill4、 crypto-js5、 viewerjs6、 localforage7、 vconsole8、 uuid9、 copy-text-to-clipboard10、 classnames前言 通过高效的工具提高工作效率,从而有更多的时间来处理其他重要的任务,或者……摸鱼。没错!就是摸鱼。毕竟,提高效率…...
(2024最新)CentOS 7上在线安装MySQL 5.7
在CentOS 7上安装MySQL 5.7并配置允许远程连接,以下是详细步骤: 1. 添加MySQL官方存储库 首先,下载并添加MySQL的官方存储库。默认情况下,添加的存储库可能会包含最新的MySQL版本(如MySQL 8.0),…...
【C++高阶】C++继承学习手册:全面解析继承的各个方面
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:模板进阶 🌹🌹期待您的关注 🌹🌹 继承 📖1. 继承的概念及定义…...
使用GPT-soVITS再4060下2小时训练声音模型以及处理断句带来的声音模糊问题
B站UP主视频 感谢UP主“白菜工厂1145号员工”的“熟肉”,我这篇笔记就不展示整一个训练和推理流程,重点写的4060该注意的一些事项。如何解决断句模糊的问题,在本篇笔记的最末尾。 相关连接: 原项目github UP主的说明文档 1、训…...
如何对stm32查看IO功能。
有些同学对于别人的开发板的资源,或者IO口,或者串口等资源不知道怎么分配。 方法1、看硬石、野火、正点原子的开发板,看下他们的例子,那个资源用什么。自己多看几个原理图,多看几个视频,做一下笔记。以后依…...
docker构建jdk17镜像
资料参考 参考自黑马教程:10.Docker基础-自定义镜像_哔哩哔哩_bilibili 更多详细语法声明,请参考官网文档:https://docs.docker.com/engine/reference/builder 初步准备 1、下载jdk17包(linux版),我这边版…...
Android Uri转File path路径,Kotlin
Android Uri转File path路径,Kotlin /*** URI转化为file path路径*/private fun getFilePathFromURI(context: Context, contentURI: Uri): String? {val result: String?var cursor: Cursor? nulltry {cursor context.contentResolver.query(contentURI, null…...
iOS界面设计要点:四大模块解析
UI设计不是艺术设计,这限制了我们从设备和现有技术开始设计。因此,熟悉每个平台的设计规则已经成为每个设计师的第一课,也是每个设计师必要的专业知识。 今天小边给您带来了iOS设计规范,希望帮助您快速熟悉iOS平台设计规范&#…...
数字取证技术(Digital Forensics Technology)实验课II
数字取证技术(Digital Forensics Technology)实验课II 本文是我本学期的教学课题目,不包含任何博客知识分享,无关的读者可忽略; 实验练习题 (♞思考):请对工作邮件进行签名;“problem3_1.txt"里存储的是由John Doe撰写的真实的邮件,而"problem3_2.txt"里存储的…...
Redis缓存的使用
1.缓存穿透 描述:查询数据在redis不存在,请求打到数据库 解决方法: 缓存空值 当出现Redis查不到数据,数据库也查不到数据的情况,我们就把这个key保存到Redis中,设置value"null",并设…...
力扣LCP 08.剧情触发时间
力扣LCP 08.剧情触发时间 前缀和 二分 对increase求前缀和 在前缀和数组上做二分 找到符合要求的最小时间 class Solution {public:vector<int> getTriggerTime(vector<vector<int>>& increase, vector<vector<int>>& requirements)…...
Elasticsearch-IndexTemplate和DynamicTemplate 有什么区别
Elasticsearch中的Index Template和Dynamic Template是两种不同的概念,它们在索引管理中扮演不同的角色: ### Index Template(索引模板) 1. **目的**:用于定义新索引的默认设置,包括映射、设置、别名等。 …...
list集合自定义排序
一、基本类型排序 1.list中只有数字或字符串 //升序排序 List<T> ,T为数字或字符串 Collections.sort(list); //降序排序 Collections.sort(list,Collections.reverseOrder());2.list中为对象 基于jdk.18 import lombok.Data;Data public class User {private int i…...
PHP Cookies:应用与管理
在Web开发中,Cookies是一种在客户端(通常是浏览器)存储少量数据的机制。PHP作为一种服务器端脚本语言,提供了对Cookies的全面支持,使得开发者可以轻松地设置、读取和删除Cookies。Cookies通常用于存储用户的会话信息&a…...
【GD32F303红枫派使用手册】第十四节 DAC-输出电压实验
14.1 实验内容 通过本实验主要学习以下内容: DAC工作原理 使用DAC输出电压 14.2 实验原理 14.2.1 DAC工作原理 我们上几章学习了ADC,本章我们来学习DAC。ADC是模-数转换,即模拟量转换为数字量,DAC正好相反,即数-…...
java 使用Log4j进行日志记录
要在Java项目中使用Log4j进行日志记录,需要经过以下步骤: 添加Log4j依赖:在项目的pom.xml文件中,添加Log4j依赖。例如: <dependency><groupId>log4j</groupId><artifactId>log4j</artifa…...
【问题解决】adb remount 失败或刷机无法连接设备(KaiOS)
问题描述 1、设备无法adb remount成功, 2、通过fastboot无法识别设备,一直卡住 3、已经识别到9008端口,但是设备与刷机工具connect fail,甚至软件crash 解决方案 1、安装高通驱动工具:QDLoder HS-USB Driver QDLoade…...
为什么电容两端电压不能突变
我们先从RC延时电路说起吧,图1是最简单的RC延时电路,给一个阶跃的电压信号,电压会变成黄色曲线这个样子,这是为什么呢? 图1 电压跳变后,电源负极电子移动到电容下极板,排斥上极板电子流动到电源…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
