ComfyUI中IPAdapter插件使用详解:功能、安装及应用场景
ComfyUI中IPAdapter插件使用详解:功能、安装及应用场景
IPAdapter是ComfyUI中的一个强大插件,它能够将一张或多张图像的风格迁移到另一张图像上,类似于LoRA的功能。本文将详细介绍IPAdapter的安装、配置以及在各种场景下的应用,包括基础工作流、模型对比、图像预处理、多图参考、SDXL模型应用等多个方面。
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
目前作者插件支持的模型有以下:
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模型都是会参考原图像的风格的,面部模型只是更多的参考面部特征,生成的结果和原图的面部也不是很像,后续会讲到的insightface、instantID有更好的效果。
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文件发送给其他人使用。