激动人心的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 电压跳变后,电源负极电子移动到电容下极板,排斥上极板电子流动到电源…...

Redux 与 MVI:Android 应用的对比
Redux 与 MVI:Android 应用的对比 在为 Android 应用选择合适的状态管理架构时可能会感到困惑。在这个领域中,有两种流行的选择是 Redux 和 MVI(Model-View-Intent)。两者都有各自的优缺点,因此在深入研究之前了解它们…...

《MySQL是怎样运行的》读书笔记(三) B+树索引
前言 从前面数据存储结构中我们已经知道了页和记录的关系示意图: 其中页a、页b、页c ... 页n 这些页可以不在物理结构上相连,只要通过双向链表相关联即可。 在正式介绍索引之前,我们需要了解一下没有索引的时候是怎么查找记录的。下边先只讨论搜索条件…...

微信小程序基础工作模板
1.轮播图 点击跳转官方文档 简单例子 <!-- 顶部轮播图 --> <swiper indicator-dots"true" class"banner" autoplay"true" interval"2000"><swiper-item><image src"../../images/轮播图1.jpg" >…...

简单说一下STL中的map容器的特点、底层实现和应用场景【面试】
特点: 基于红黑树:std::map利用红黑树的自平衡特性,确保操作的平衡性。有序容器:元素根据键的顺序自动排序,排序依据是预定义的键比较函数。唯一键值:容器保证每个键的唯一性,不允许重复键存在…...

Ubuntu22.04之有道词典无法画词翻译替代方案(二百四十九)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

AnythingLLM 的 Docker 使用
AnythingLLM是使用大语言模型LLM的一站式简便框架。官网的介绍如下: AnythingLLM is the easiest to use, all-in-one AI application that can do RAG, AI Agents, and much more with no code or infrastructure headaches. 1. 使用官方docker 最方便的方法是使…...

数组还可以这样用!常用但不为人知的应用场景
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…...

C++模板元编程:编译时的魔法
1. 引言 在C的世界中,模板元编程是一种在编译时执行计算的强大技术。它允许开发者编写高度灵活和高效的代码,这些代码可以在不牺牲性能的前提下,根据类型和值的不同而变化。本文将深入探讨模板元编程的奥秘,并展示如何在现代C开发…...

SQL进阶day10————多表查询
目录 1嵌套子查询 1.1月均完成试卷数不小于3的用户爱作答的类别 1.2月均完成试卷数不小于3的用户爱作答的类别 编辑1.3 作答试卷得分大于过80的人的用户等级分布 2合并查询 2.1每个题目和每份试卷被作答的人数和次数 2.2分别满足两个活动的人 3连接查询 3.1满足条件…...

debug调试_以Pycharm为例
文章目录 作用步骤打断点调试调试窗口 作用 主要是检查逻辑错误,而非语法错误。 步骤 打断点 在需要调试的代码行前打断点,执行后会停顿在断点位置(不运行) 调试 右键“debug”,或者直接点击右上角的小虫子 调试…...