前言
IP-Adapter 是一款用于文本到图像扩散模型的图像提示适配器,它可以通过提取图像中的风格和元素,并将其嵌入到文生图扩散模型中,从而实现将一张参考图像的风格或主题迁移应用到另一张图像上。
IP-Adapter 还具有很好的拓展性,可以灵活的和其他插件配合使用,比如 ControlNet,从而实现很多惊艳的效果。
1、IP-Adapter 技术原理
IP-Adapter 的关键技术是其创新的解耦交叉注意力机制。在标准的文本到图像扩散模型中,交叉注意力层主要针对文本特征进行优化,但这样一来就弱化了模型对图像特征的精细处理能力。为了解决这个问题,IP-Adapter 引入了针对图像特征的交叉注意力层,将其与原有的文本特征交叉注意力层并行工作,实现捕捉和整合图像特征,从而确保图像的详细信息得到充分保留和利用。
IP-Adapter 实现原理
2、安装 IP-Adapter 依赖环境
(1)安装 IP-Adapter 自定义节点
我们通过 ComfyUI 管理器来安装 IP-Adapter 节点:点击 Manager,在弹出的 ComfyUI 管理器界面中点击 Custom Nodes Manager 打开自定义节点管理界面,然后搜索 “IP-Adapter”,在搜索结果中,选择 ComfyUI_IPAdapter_plus 这项,点击 Install 即可安装。该插件会被安装到这个路径:ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus
。
安装 IP-Adapter 节点
安装成功后需要重启 ComfyUI。
(2)安装 CLIPVision 模型
我们在 ComfyUI 点击 Manager,在弹出的 ComfyUI 管理器界面中点击 Model Manager 打开模型管理界面,然后搜索 “CLIPVision H”,然后点击 Install 即可安装。模型会被下载到这个路径:ComfyUI/models/clip_vision/
。
安装 CLIPVision 模型
(3)安装 IP-Adapter 常用模型
IP-Adapter 相关模型有很多种,我们在模型管理界面搜索 “ip adapter”,可以看到它们。
这些模型整体上大致分为 ip-adapter 系列、ip-adapter-face 系列和 ip-adapter-faceid 系列,并且各自产生了不同的迭代版本。大家选择模型时可以参考下面的规则:
-
模型名字中带 “face” 或 “faceid” 的,通常着重参考输入图片中的脸部信息,如果想要着重参考图片整体信息,可以选择名字不带 “face” 和 “faceid” 的模型。
-
ip-adapter-faceid 相对 ip-adapter-face 系列的模型使用了比较新的技术,它会使用人脸识别模型中的人脸 ID 嵌入替代 CLIP 图像嵌入。
-
模型中有的是适配 Stable Diffusion 1.5 的,有的是适配 Stable Diffusion XL 的,大家可以根据自己使用的大模型版本来做选择。
-
模型名字中带 “plus” 的,通常效果会更好一些。
这里我们选择下载这几个模型:
-
ip-adapter-plus_sd15.safetensors
-
ip-adapter-plus_sdxl_vit-h.safetensors
-
ip-adapter-faceid-plusv2_sd15.bin
-
ip-adapter-faceid-plusv2_sdxl.bin
这些模型会被下载到这个路径:ComfyUI/models/ipadapter/
。
此外,我们还可下载两个跟 IP-Adapter 搭配使用的 LoRA 模型:
-
ip-adapter-faceid-plusv2_sd15_lora.safetensors
-
ip-adapter-faceid-plusv2_sdxl_lora.safetensors
这些 LoRA 模型会被下载到这个路径:ComfyUI/models/loras/ipadapter/
(4)安装 InsightFace 库和相关模型
如果要用到 IP-Adapter 人脸相关的能力时,我们可能需要用到 InsightFace 库。InsightFace 相关库和模型的安装,我们已经在《使用 InstantID》一章已经讲过,这里就不重复了。
所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~
3、IP-Adapter 风格迁移工作流
下图是一个风格迁移的工作流:
IP-Adapter 风格迁移工作流
你可以在给公众号「关键帧Keyframe」发消息 “工作流” 来获得该工作流文件 ipadapter-workflow.png。
输入一张梵高的《星空》作为 IP-Adapter 的风格参考,将 weight_type 选为 style transfer,即风格迁移,将使 IP-Adapter 捕捉参考图像中的艺术风格并将其应用到目标图像中,最后添加提示词 “1 cat”,即可生成一张星空风格的猫咪。
风格迁移
我们可以在基础的文生图工作流上来添加和修改一些结点来创建这个工作流,下面我们来介绍一下这些节点:
(1)加载参考图节点
在 ComfyUI 界面中用鼠标双击空白处搜索 “Load Image” ,然后点击搜索结果下拉框中的 Load Image 即可创建节点。
(2)IP-Adapter 相关节点
在 ComfyUI 界面中用鼠标双击空白处,然后分别搜索 “IPAdapter Model Loader”、“Load CLIP Vision” 和 “IPAdapter Advanced”,我们就能搜到并添加:加载 IPAdapter 模型节点、加载 CLIP Vision 模型节点和应用 IPAdapter 节点。
我们可以把它们和加载参考图的 Load Image 节点放在一起组成一个 Group 分组方便操作和管理:
IP-Adapter 相关节点
IPAdapter Model Loader 节点加载我们上面下载的 IP-Adapter 模型。需要注意的是,这个模型选择 SD1.5 版本还是 SDXL 版本需要与我们在 Load Checkpoint 节点选择的模型是 SD1.5 版本还是 SDXL 版本一致。我们上面的工作流用到的主模型是一个 SDXL 模型,而且我们这里是做风格转换,所以这里我们选择 ip-adapter-plus_sdxl_vit-h.safetensors 模型。
Load CLIP Vision 节点加载我们上面下载的 CLIPVision 模型。
IPAdapter Advanced 节点的参数:
-
weight:该权重参数调整 IPAdapter 对最终输出的整体影响。其范围通常为 0.0 到 1.0,默认值为 1.0,允许用户控制所应用效果的强度。
-
weight_type:该参数指定 IPAdapter 应用方式,有 linear 等选项。其中 style transfer 表示风格迁移。
-
combine_embeds:该参数指定组合嵌入的方法,有 concat、add、subtract、average、norm average 等选项。这会影响如何合并不同的嵌入以产生最终输出。
-
start_at:该参数控制 IPAdapter 效果在图像处理管道期间何时开始发生。范围从 0.0 到 1.0,默认值为 0.0。
-
end_at:该参数决定了 IPAdapter 效果何时停止。范围从 0.0 到 1.0,默认值为 0.0。
-
embeds_scaling:该参数指定嵌入的缩放方法,有 V only、K+V 等选项。这会影响嵌入在处理过程中的缩放方式。
IPAdapter Advanced 节点的输入点:
-
model:该参数指定用于处理的 AI 模型。连接 Load Checkpoint 节点的 MODEL 输出点。
-
ipadapter:该参数指定的是要应用的具体 IPAdapter 实例。连接 IPAdapter Model Loader 节点的 IPADAPTER 的输出点。
-
image:该参数指定要处理的主要输入图像,它是所有后续转换和调整的基础。连接加载参考图 Load Image 节点的 IMAGE 输出点。
-
image_negative:该可选参数提供用于负向调整的图像,有助于平衡某些影响。我们这里没有用到它。
-
attn_mask:该可选参数用于提供注意掩码,在处理过程中引导 IPAdapter 的焦点。我们这里没有用到它。
-
clip_vision:该可选参数指定集成 CLIP 视觉的模型,它用来增强节点理解和处理视觉信息的能力。连接 Load CLIP Vision 节点的 CLIP_VISION 输出点。
IPAdapter Advanced 节点的输出点:
- MODEL:连接 KSampler 节点的 model 输入点。
(3)Load Checkpoint、KSampler 等其他节点
相对于文生图工作流,其他节点变化主要是:
-
Load Checkpoint 节点的 MODEL 输出点连接到了 IPAdapter Advanced 节点的 model 输入点。
-
KSampler 节点的 model 输入点连接到了 IPAdapter Advanced 节点的 MODEL 输出点。
其他就没什么变化了。
接下来,在这个工作流里导入你的参考图,输入提示词,点击 Queue 即可运行工作流生成和参考图风格类似的新图了。
4、IP-Adapter 元素迁移工作流
下图是一个元素迁移的工作流:
IP-Adapter 元素迁移工作流
你可以在给公众号「关键帧Keyframe」发消息 “工作流” 来获得该工作流文件 ipadapter-workflow-2.png。
它和上面讲到的风格迁移工作流唯一的差别就是把 IPAdapter Advanced 节点的 weight_type 参数改为了 composition。这表示 IPAdapter 会提取参考图中的元素来引导生成具有相似元素的新图。
我们上面使用的参考图中主要的元素是:女孩、剑。所以,即使我们在提示词中没有提到跟“女孩”和“剑”有关的词,只是输入了一个表示风格的 “realistic style”,生成的新图也依然带着“女孩”和“剑”的元素,而新图的风格则按照提示词的引导生成了写实风格。
元素迁移
5、IP-Adapter 风格+元素迁移工作流
下图是一个风格+元素迁移的工作流:
IP-Adapter 风格+元素迁移工作流
你可以在给公众号「关键帧Keyframe」发消息 “工作流” 来获得该工作流文件 ipadapter-workflow-3.png。
从生成结果可以看到,该工作流实现了风格和元素迁移:
风格+元素迁移
它和上面讲到的风格迁移工作流比较类似,只是略微做了一些改动:
(1)增加了一个的 Load Image 节点
这个节点用于加载元素参考图。
(2)将 IPAdapter Advanced 节点换成 IPAdapter Style & Composition SDXL 节点
我们可以双击空白区域,搜索 “IPAdapter Style & Composition SDXL” 来添加它。
相对于 IPAdapter Advanced 节点,IPAdapter Style & Composition SDXL 节点有一些不同:
-
将 image 输入点分为了 image_style 和 image_composition 两个输入点,这里的意思很明确,它们会分别连接一张风格参考图和一张元素参考图。
-
使用 weight_style、weight_composition 参数替代了 weight、weight_type 从而分别设置风格迁移和元素迁移的权重。
-
新增 expand_style 参数用来指定是否增强输出图像中的风格特征。
6、IP-Adapter 换脸工作流
从上面的实例中,我们已经看到了 IP-Adapter 的强大能力,其实除了支持风格和元素的迁移外,IP-Adapter 还支持人脸特征迁移。
下图是一个 IP-Adapter 换脸工作流:
IP-Adapter 换脸工作流
你可以在给公众号「关键帧Keyframe」发消息 “工作流” 来获得该工作流文件 ipadapter-workflow-4.png。
输入一张人脸参考图,再通过提示词 “1 girl with white hair” 即可生成一张保持参考图人脸特征的白头发女孩。
从生成结果可以看到,该工作流实现了人脸特征迁移:
人脸特征迁移
这个工作流也可以在上面讲到的风格迁移工作流上略加改动得到:
(1)增加一个 LoraLoaderModelOnly 节点
用它来加载我们上面下载的适配 IP-Adapter 的 LoRA 模型。
这里的 LoRA 模型需要根据我们 Load Checkpoint 节点选择的主模型是 SD1.5 版本还是 SDXL 来决定其版本,二者保持一致即可。
我们在 Load Checkpoint 节点里选择的主模型是一个 SD1.5 模型,所以这里我们选择的 LoRA 模型为 ip-adapter-faceid-plusv2_sd15_lora.safetensors。
然后,我们将 LoraLoaderModelOnly 节点的 model 输入点与 Load Checkpoint 节点的 MODEL 输出点连接起来。
(2)增加一个 IPAdapter InsightFace Loader 节点
这个节点用来加载 InsightFace 进行人脸分析。它的参数如下:
-
provider:该参数指定用于运行人脸分析模型的计算提供程序。有 CPU、CUDA、ROCM 等选项,此参数确定在模型执行期间应用的硬件加速和优化技术。例如,选择 CUDA 可利用 NVIDIA GPU 进行更快的计算,而 CPU 则使用中央处理单元。
-
model_name:该参数用于指定你本地下载到
ComfyUI/models/insightface/models/
路径下的 InsightFace 模型。
(3)更换 IPAdapter 模型
将 IPAdapter Model Loader 节点的模型选择为 “faceid” 系列的模型,版本(SD1.5 或者 SDXL)也需要和主模型一致。
我们这里选择的模型是 ip-adapter-faceid-plusv2_sd15.bin。
(4)将 IPAdapter Advanced 节点替换为 IPAdapter FaceID 节点
这个节点是应用 IPAdapter 人脸特征迁移的核心节点,它的参数相对 IPAdapter Advanced 节点不同处如下:
- weight_faceidv2:增加了该参数专门调整 FaceID V2 模型的影响。其范围从 -1 到 5.0,默认值为 1.0。这允许对面部识别强度进行微调。
其他参数基本和 IPAdapter Advanced 节点作用类似。
输入点相对 IPAdapter Advanced 节点不同处如下:
-
model:该输入点改为连接到 LoraLoaderModelOnly 节点 MODEL 输出点。
-
insightface:增加了该输入点来引入 InsightFace 进行人脸分析。连接 IPAdapter InsightFace Loader 节点的 INSIGHTFACE 输出点。
输出点相对 IPAdapter Advanced 节点不同处如下:
- face_image:增加了该输出点来输出提供已应用面部识别效果的处理后的图像。这是输入图像经过所有调整和操作后的最终视觉表现。我们这里没有用到它。
其他地方基本上和风格迁移工作流一致。
为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取
一、ComfyUI配置指南
- 报错指南
- 环境配置
- 脚本更新
- 后记
- …
二、ComfyUI基础入门
- 软件安装篇
- 插件安装篇
- …
三、 ComfyUI工作流节点/底层逻辑详解
- ComfyUI 基础概念理解
- Stable diffusion 工作原理
- 工作流底层逻辑
- 必备插件补全
- …
四、ComfyUI节点技巧进阶/多模型串联
- 节点进阶详解
- 提词技巧精通
- 多模型节点串联
- …
五、ComfyUI遮罩修改重绘/Inpenting模块详解
- 图像分辨率
- 姿势
- …
六、ComfyUI超实用SDXL工作流手把手搭建
- Refined模型
- SDXL风格化提示词
- SDXL工作流搭建
- …
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取