ComfyUI 中你不得不了解的插件,IPAdapter 基础的使用

2024-05-24 11:20

本文主要是介绍ComfyUI 中你不得不了解的插件,IPAdapter 基础的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 什么是 IPAdapter?

IPAdapter 是一个轻量级的适配器,它的作用是将一张图像或几张图像的风格迁移到另一张图像上去,可以把它当作只有一张图像的 lora。通俗的讲就是垫图。

IPAdapter 接受一张图像作为输入,将其编码为Token,并和标准的提示词输入混合作用于图像的生成。

图片

2 ComfyUI_IPAdapter_plus 的安装

第一步安装插件 ComfyUI_IPAdapter_plus

图片

图片

第二步下载模型到 ComfyUI 目录,下载地址:https://github.com/cubiq/ComfyUI_IPAdapter_plus?tab=readme-ov-file 或者公众号内回复 IPA 获取模型下载链接

目前作者插件支持的模型有以下

  • clip_vision 视觉模型:即图像编码器,下载完后需要放在 ComfyUI /models/clip_vision 目录下

    • CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors

    • CLIP-ViT-bigG-14-laion2B-39B-b160k.safetensors

  • IP-Adapter 模型:下载完后需要放在 /ComfyUI/models/ipadapter 目录下

    • ip-adapter_sd15.safetensors:基本模型, 平均强度

    • ip-adapter_sd15_light_v11.bin:与ip-adapter_sd15相同,但更兼容文本提示

    • ip-adapter-plus_sd15.safetensors:比 ip-adapter_sd15 更接近参考图像

    • ip-adapter-plus-face_sd15.safetensors:人像模型

    • ip-adapter-full-face_sd15.safetensors:更强的脸模型,但效果不一定更好

    • ip-adapter_sd15_vit-G.safetensors:使用 ViT-bigG 视觉编码器

    • ip-adapter_sdxl_vit-h.safetensors:使用 ViT-H 视觉编码器

    • ip-adapter-plus_sdxl_vit-h.safetensors:更接近参考图

    • ip-adapter-plus-face_sdxl_vit-h.safetensors:SDXL人像模型

    • ip-adapter_sdxl.safetensors:SDXL 基本模型

需要注意,其中名字带有 sd15 适用于 sd15 大模型,带有 sdxl 的适用于 sdxl 大模型

其中名字带有 vit-h 的使用 ViT-H 视觉编码器,名字带有 vit-G 的使用 ViT-G 视觉编码器;

SDXL 大模型默认使用 ViT-G,SD15 大模型默认使用 ViT-H。

3 基础工作流

我们先从基础工作流开始,我们只使用 IPAdapter 引导图像扩散,而不使用提示词

图片

3.1 节点说明

其主要在文生图的工作流上添加了以下几个节点

图片

1)IPAdapter Advanced(应用IPAdapter(高级))

  作用:读取并转换图像特征

  输入:

  • model:接受 Unet 模型的输入

  • ipadapter:接受 ipadapter 模型

  • image:接受图像的输入

  • image_negative:接受负面图像输入,简单说就是传入不想要的元素。比如说我们不想要参考图的某种颜色,我们就可以将有该颜色的图片传入到 image_negative 中

  • attn_mask:接受图像遮罩,收到后,只会识别图像遮罩的部分

  • clip_vision:接受视觉编码器模型输入

  参数:

  • weight:参考权重

  • weigth_type:IPA的权重类型

  • combine_embeds:图像特征和其他问题提示词的组合方式

  • start_at:作用开始时间

  • end_at:作用结束时间

  • emdeds_scaling:

  输出:

  • model:输出经过 ipadapter 引导的大模型

2)IPadpter Model Loader

作用:IPadpter模型加载器

3)Load CLIP Vision

作用:CLIP视觉模型加载器

3.2 使用 IPAdapter 生成更好的图片

通常情况下,使用 IPAdapter 会导致生成的图像过拟合(burn),这时候需要降低一点CFG并提高一点迭代步数,可以看下面不同 CFG 和 步数下的对比。可以看到 CFG 在 6 的时候图像更加柔和。

图片

当然,我们还可以通过 image_negative 来输入图像消除过拟合的情况并平滑我们的画面。

我们需要在原工作流中增加一个 IPAdapter Noise(IPAdapter噪波节点,该节点接受原始图像,将其翻转并添加噪点后输入到 image_negative 中,能够对图像进一步去噪重绘。

图片

下面来看下该节点的详细说明:

图片

输入:

  • image_optional:接受原始图像输入

参数:

  • type:原始图像的类型

  • strength:添加的噪波强度

  • blur:输入图片的模糊程度

输出:

  • IMAGE:添加噪波的图像

  • IMAGE:添加噪点后的图像

我们还可以通过提示词配合 IPAdapter 来生成更好的结果。

输入提示词 A beautiful girl wearing pearl earrings,并适当降低 IPAdapter 的权重为0.7,查看生成的结果,效果非常不错。

图片

最后来看下优化后的对比图

图片

4 IP Adapter Plus Model 对比

ip-adapter-plus_sd15.safetensors 模型相比 ip-adapter_sd15.safetensors 生成的结果图像更加接近于原图。

下面看下同参数下 ip-adapter-plus_sd15 生成的图像对比。

图片

5 Prepping Images 预处理图像

IPAdapter 只支持方形的参考图,默认会自动居中裁剪。

图片

如果我们想要参考输入图片的脸部,这时候可以使用 Prep Image For ClipVision(CLIP视觉图像处理) 节点。

图片

5.1 Prep Image For ClipVision(CLIP视觉图像处理)节点

作用:将图像的最小边缩小到 224px,其它边按比例缩放,并按裁剪位置,裁剪输入图像到 224*224 的分辨率。

输入:

  • image:接受图像的输入

参数:

  • interpolatio:图像缩放时的插值算法。主要是作为图像图像缩放后新位置像素的计算方式。

  • crop_position:裁剪位置。

    • top/bottom/left/right/center/pad:以顶部/底部/左部/右部/居中/填补方式裁剪。使用该设置参考图像的不同位置。

  • sharpening:输出图像的锐化程度,图像模糊的情况下,可以适当增加锐化,提高图像清晰度。

6 多张输入图像的参考

IPAdapter 能够同时参考多张图片的风格。借助 Batch Images(图像组合批次)节点输入多张参考图。

图片

那么多参考图什么时候使用?我们以下面的例子分析下。输入4张参考图,并输入提示词1girl,red skirt,调整 IPAdapter 的强度为 0.7

图片

然后将输入的参考图像改为两张,可以看到输出的结果,虽然有细节上的变化,但是大致的构图和颜色是不变的。这是因为我们输入的参考图或多或少都表现出了相同的概念,红色的衣服,红色的头发等

图片

不难发现在使用 IPAdapter 时,提供相同元素的参考输入是没有意义的。因此我们在增加输入参考图像时,要考虑我们想要在结果图像中添加什么。

比如下面的,我们在输入的参考图中添加了一张蝴蝶背景的照片。可以看到输出结果图像发生很好的变化效果。

图片

7 ip-adapter-plus-face_sd15 模型

该模型是专门训练用来参考脸部的模型的,它会尽可能描述脸部的特征,眉毛形状、头发颜色等,来生成相似的脸部,因此我们输入的参考图需要尽量的聚焦于脸部。

因为只参考了脸部,所以我们需要输入提示词来描述生成图像的其他信息。

我们传入一张人脸照片,并输入提示词 A fairy woman wearing a long dress, with a heroic posture like a movie, dramatic lighting, close-up 一个穿着长裙的精灵女性,电影般的英雄姿势,戏剧性的灯光,特写

图片

8 SDXL 模型

接下来看 IPAdapter 在 SDXL 大模型的使用情况如何

将我们的 ipadapter 大模型选择为 ip-adapter_sdxl.safetensors,并选择适用于 SDXl 的 CLIP 视觉模型。

通常情况下,SDXL 对原图像有更高的参考性。

图片

图片

我们再来看下 ip-adapter_sdxl_vit-h.safetensors的效果,注意带 vit-h 的模型需要使用适用于 sd15 的 CLIP 视觉模型。最后生成的结果一言难尽!!

图片

图片

最后看下SDXL的脸部参考模型 ip-adapter-plus-face_sdxl_vit-h.safetensors 的效果如何。

效果也不是很好,事实上,原始的 IPAdapter 模型都是会参考原图像的风格的,面部模型只是更多的参考面部特征,生成的结果和原图的面部也不是很像,后续会讲到的 insightfaceinstantID 有更好的效果。

图片

图片

9 IPadapter 应用图生图

我们输入一张宇航员的图像作为图生图的底图,将降噪幅度选择为 0.35。

图片

图片

然后输入提示词 A woman wearing a spacesuit in space,减少 IPAdaper 的强度到 0.7 再看下结果

图片

图片

10 ControlNet

我们还可以在控制图像构图的情况下,增加 IPAdaper 的参考。

下面我们使用 Canny 来控制图像的构图看下生成的图像结果。

生成的结果保留构图的同时,也一定程度上参考了 IPAdaper 输入图像的风格。

图片

图片

11 IPAdaper 应用放大图像

这里我们来对比下在重绘放大时,使用 IPAdaper 参考和不使用的差异。我们将原图像放大两倍后,采用0.5的去噪强度进行重绘。

图片

明显可以看到使用了 IPA 后的放大图像是更像原图的,不使用IPA则更偏向于模型。

图片

12 Embedding 嵌入组

通常在基础工作流中,我们加载 CLIP 视觉模型后会占用我们显存,我们希望能够编码一次后就可以卸载 CLIP 模型。

这时候我们可以将 CLIP 视觉模型处理后数据保存为 Embedding,后续就可以用直接使用而降低显存了。

图片

在 CLIP 模型一直在的时候,显存大概占用 5G 左右。

图片

这里主要使用到以下两个两个新节点:

1)IPAdapter Encode(IPAdapter 编码)

作用:将输入图像经 CLIP 视觉编码后输出 embeddings。

输入:

  • IPAdaper:接受 IPAdapter 模型

  • image:接受图像输入

  • mask:接受图像遮罩输入

  • clip_vision:接受 CLIP 视觉模型输入

参数:

  • weight:控制强度

输出:

  • pos_embed:正向嵌入组

  • neg_embed:反向嵌入组

2)IPAdapter Embeds(应用IPAdapter(嵌入组))

作用:和 IPAdapter Advanced(应用IPAdapter(高级))一样,不过使用的是正反向接受的是 pos_embed 和 neg_embed 的输入。

插件中还提供了保存 Embeding 的节点,后续可以直接使用保存的 Embbeding 文件,而不用再加载图像和 CLIP 模型,节省显存消耗。

图片

其主要使用到了 IPAdapter Save Embeds(保存嵌入组) 节点来保存 Embedding 文件,其文件保存路径为 ComfyUI 的 output 目录下。

图片

然后将保存的 Embedding 文件放到 ComfyUI 的 input 目录下。使用 IPAdaper Load Embeds(读取嵌入组)节点加载Embeddings。

图片

可以看到直接使用 Embedding 的情况下,显存占用 4G 左右,节省了 1G 左右的显存。并且你还可以直接将 Embedding 文件发送给其他人使用。

图片

 

为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。

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

 

一、ComfyUI配置指南

  • 报错指南

  • 环境配置

  • 脚本更新

  • 后记

  • .......

img

二、ComfyUI基础入门

  • 软件安装篇

  • 插件安装篇

  • ......

img

三、 ComfyUI工作流节点/底层逻辑详解

  • ComfyUI 基础概念理解

  • Stable diffusion 工作原理

  • 工作流底层逻辑

  • 必备插件补全

  • ......

img

四、ComfyUI节点技巧进阶/多模型串联

  • 节点进阶详解

  • 提词技巧精通

  • 多模型节点串联

  • ......

img

五、ComfyUI遮罩修改重绘/Inpenting模块详解

  • 图像分辨率

  • 姿势

  • ......

img

六、ComfyUI超实用SDXL工作流手把手搭建

  • Refined模型

  • SDXL风格化提示词

  • SDXL工作流搭建

  • ......

img

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

img

 

这篇关于ComfyUI 中你不得不了解的插件,IPAdapter 基础的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

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

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三