AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

admin 2024年1月22日14:51:45评论55 views字数 8173阅读27分14秒阅读模式

首先介绍一下,腾讯的PhotoMaker 一个AI绘画开源项目,通过堆叠 ID 嵌入自定义逼真的人类照片,这是一种高效的个性化文本到图像生成方法,它主要将任意数量的输入ID图像编码到堆栈ID嵌入中,以保存ID信息。这样的嵌入,作为统一的ID表示,不仅可以全面封装同一输入ID的特征,还可以容纳不同ID的特征,以便后续集成。这为更有趣和更实用的应用铺平了道路。此外,为了推动PhotoMaker的训练, 与基于测试时微调的方法相比,PhotoMaker 具有更好的 ID 保留能力,但可显著提高速度、获得高质量的生成结果、强大的泛化能力和广泛的应用。

PhotoMaker这一工具目前已经发布了源码和体验空间 无需训练LoRA,保持人脸一致,生成多种风格的肖像。

项目地址:photo-maker.github.io

github:TencentARC/PhotoMaker: PhotoMaker (腾讯ARC/PhotoMaker:PhotoMaker (github.com))

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

相关工作

「文本到图像扩散模型」 。扩散模型在文本条件下的图像生成方面取得了显著进展,近年来吸引了广泛关注。这些模型的显著性能可以归因于高质量的大规模文本-图像数据集、基础模型的持续升级、条件编码器的引入以及可控性的改善。由于这些进展,Podell 等人开发了目前最强大的开源生成模型 SDXL。鉴于其在生成人像方面的出色性能,基于这个模型构建了PhotoMaker。然而,我们的方法也可以扩展到其他文本到图像合成模型。

「扩散模型中的个性化」 。由于扩散模型具有强大的生成能力,越来越多的研究者尝试基于它们进行个性化生成。目前,主流的个性化合成方法主要分为两类。一种依赖于在测试阶段的额外优化,例如 DreamBooth 和 Textual Inversion 。鉴于这两个开创性的工作都需要大量的时间进行微调,一些研究试图通过减少微调所需的参数数量或通过使用大型数据集进行预训练来加速个性化定制的过程。尽管取得了这些进展,它们仍然需要对预训练模型进行大量的微调,使该过程耗时且受到应用的限制。最近,一些研究尝试使用单个图像进行单次前向传递的方式进行个性化生成,从而显著加速了个性化过程。这些方法要么利用个性化数据集进行训练,要么在语义空间中对图像进行编码。我们的方法专注于基于上述两种技术方法生成人像。具体而言,它不仅依赖于构建以 ID 为导向的个性化数据集,还依赖于获取在语义空间中表示人物 ID 的embedding。与先前基于embedding的方法不同,PhotoMaker 从多个 ID 图像中提取堆叠的 ID embedding。提供更好的 ID 表示的同时,所提出的方法可以保持与先前基于embedding的方法相同的高效性。

堆叠 ID embedding

「编码器」 。沿用最近的研究,我们使用 CLIP图像编码器 ε 提取图像embedding,因为它与扩散模型中的原始文本表示空间对齐。在将每个输入图像馈送到图像编码器之前,填充了除特定 ID 的身体部分之外的图像区域,以随机噪声消除其他 ID 和背景的影响。由于用于训练原始 CLIP 图像编码器的数据主要由自然图像组成,为了更好地使模型能够从屏蔽的图像中提取与 ID 相关的embedding,在训练PhotoMaker 时微调了图像编码器中的一部分Transformer层。还引入了额外的可学习映射层,将从图像编码器中获取的embedding注入与文本embedding相同的维度。设|=1...表示从用户那里获得的 N 个输入 ID 图像,因此我们获得了提取的embeddings |=1...,其中 D 表示映射维度。每个embedding对应于输入图像的 ID 信息。对于给定的文本提示 T,使用预训练的 CLIP 文本编码器 ε 提取文本embedding ×,其中 L 表示embedding的长度。

「堆叠」。最近的研究表明,在文本到图像的模型中,个性化的字符 ID 信息可以由一些唯一的标记表示。我们的方法也有类似的设计,以更好地表示输入人物图像的 ID 信息。具体而言,在输入标题中标记相应的类别词(例如,男人和女人)(见第后面章节)。然后,提取文本embedding中类别词位置的特征向量。这个特征向量将与每个图像embedding ei融合。我们使用两个 MLP 层执行这样的融合操作。融合后的embedding可以表示为¯|=1...。通过结合类别词的特征向量,此embedding可以更全面地表示当前输入的 ID 图像。此外,在推断阶段,这个融合操作还为定制生成过程提供了更强的语义可控性。例如,可以通过简单地替换类别词来定制人的年龄和性别。

在获得融合的embedding之后,沿长度维度将它们连接起来形成堆叠的 ID embedding:

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

这个堆叠的 ID embedding可以作为多个 ID 图像的统一表示,同时保留每个输入 ID 图像的原始表示。它可以接受任意数量的 ID 图像编码embedding,因此其长度 N 是可变的。与 DreamBooth-based 方法相比,该方法通过输入多个图像来微调模型以进行个性化定制,我们的方法本质上是同时向模型发送多个embedding。在将同一 ID 的多个图像打包成批作为图像编码器的输入之后,通过单次前向传递即可获得堆叠的 ID embedding,与基于微调的方法相比,这显著提高了效率。同时,与其他基于embedding的方法相比,这种统一的表示既可以保持良好的 ID 保真度和文本可控性,因为它包含更全面的 ID 信息。此外,值得注意的是,尽管在训练过程中只使用了同一 ID 的多个图像来构建这个堆叠的 ID embedding,但在推断阶段可以使用来自不同 ID 的图像来构建它。这种灵活性为许多有趣的应用打开了可能性。例如,可以混合现实中存在的两个人,或者混合一个人和一个著名的角色 IP。

「合并」。使用扩散模型中固有的跨注意力机制来自适应地合并堆叠的 ID embedding中包含的 ID 信息。首先用堆叠的 ID embedding替换原始文本embedding t 中与类词对应的位置上的特征向量,得到更新的文本embedding 

基于 ID 的人物数据构建

由于PhotoMaker 在训练过程中需要采样同一 ID 的多张图像来构建堆叠的 ID embedding,因此需要使用按 ID 分类的数据集来推动PhotoMaker 的训练过程。然而,现有的人物数据集要么没有标注 ID 信息,要么它们包含的场景丰富度非常有限(即,它们只关注脸部区域)。因此,在本节中,将介绍一种构建以不同 ID 分类的人物文本-图像数据集的流程。图 2(b)说明了提出的流程。通过这个流程,可以收集一个以 ID 为导向的数据集,其中包含大量的 ID,每个 ID 都有多张图像,包括不同的表情、属性、场景等。这个数据集不仅有助于PhotoMaker 的训练过程,还可能激发未来潜在的基于 ID 的研究。数据集的统计信息在附录中显示。

「图像下载:」 首先,列出了一份名人名单,可以从 VoxCeleb1 和 VGGFace2获得。根据名单在搜索引擎中搜索并爬取数据。每个名字下载了大约 100 张图像。在下载过程中,为了生成更高质量的肖像图像,过滤掉了最短边分辨率小于 512 的图像。

「人脸检测和筛选:」 首先使用RetinaNet检测脸部边界框,并过滤掉检测到的尺寸较小的边界框(小于256 × 256)。如果一张图像不包含任何满足要求的边界框,将过滤掉该图像。然后,对剩余的图像进行ID验证。

「ID验证:」 由于一张图像可能包含多张脸,需要首先确定哪张脸属于当前的身份组。具体而言,将当前身份组的所有脸部区域发送到ArcFace中,以提取身份embedding并计算每对脸部的L2相似度。将每个身份embedding计算得到的相似度与所有其他embedding相加,以得到每个边界框的分数。选择具有多张脸的每个图像的分数最高的边界框。在选择边界框后,重新计算每个剩余边界框的分数。通过ID组计算分数的标准差δ。经验性地使用8δ作为阈值,以过滤掉不一致ID的图像。

「裁剪和分割:」 首先根据检测到的脸部区域使用更大的正方形框裁剪图像,同时确保在裁剪后脸部区域能够占据图像的超过10%。由于需要在将其发送到图像编码器之前从输入ID图像中去除不相关的背景和ID,因此需要为指定的ID生成掩码。具体来说,使用Mask2Former 执行“人”类别的全景分割。保留与与ID相对应的脸部边界框具有最高重叠的掩码。此外,选择丢弃mask未被检测到的图像,以及在边界框和掩码区域之间没有重叠的图像。

「字幕和标记:」 使用BLIP2 为每个裁剪图像生成字幕。由于需要标记类别词(例如,男人、女人和男孩)以促进文本和图像embedding的融合,使用BLIP2的随机模式重新生成不包含任何类别词的字幕,直到出现一个类别词为止。在获得字幕之后,将字幕中的类别词单数化,以便专注于单个ID。接下来,需要标记与当前ID相对应的类别词的位置。只包含一个类别词的字幕可以直接标注。对于包含多个类别词的字幕,计算每个身份组的字幕中包含的类别词的数量。出现次数最多的类别词将成为当前身份组的类别词。然后,使用每个身份组的类别词来匹配并标记该身份组中的每个字幕。对于不包含与相应身份组的类别词匹配的类别词的字幕,使用依赖解析模型根据不同的类别词对字幕进行分割。通过SentenceFormer 计算分割后的子字幕与图像中特定ID区域之间的CLIP分数。此外,通过SentenceFormer 计算当前段的类别词与当前身份组的类别词之间的标签相似度。选择标记与CLIP分数和标签相似度的乘积最大的类别词。

(+1)×

原理:

首先分别从文本编码器和图像编码器中获取文本嵌入和图像嵌入。

然后,通过合并相应的类嵌入(例如,男人和女人)和每个图像嵌入来提取融合嵌入。

接下来,沿长度维度连接所有融合嵌入,形成堆叠 ID 嵌入

最后,将堆叠的 ID 嵌入提供给所有交叉注意力层,以便自适应地合并扩散模型中的 ID 内容。 

需要注意的是,虽然在训练时使用了相同ID和遮罩背景的图像,但可以直接输入不同ID的图像,而不会出现背景失真,从而在推理过程中创建一个新的ID。

在基本提示下演示了PhotoMaker的生成功能。我们在每张图片下方显示条件反射提示。

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

通过这个项目可以快速制作特定人脸的AI绘画作品,相比传统的技术效果会好很多,效率也高很多。

今天趁热打铁,本地电脑装装看,并且记录,分享一下!

本文主要面向有一定配置基础的人,所以废话我就尽量少说了。

把步骤说清楚,把命令留下,把坑填了,就收工了。

会装的可以结束阅读直接去GitHub了。

想努力一下的可以慢慢看,我尽量把关键信息写清楚。

不想努力的直接拉到最后~~啊哈!

准备工作

准备英伟达显卡!

Windows11+Conda+git

一、克隆代码

打开CMD工具,通过CD命令进入到制定目录,然后克隆代码。

git clone https://github.com/TencentARC/PhotoMaker.gitcd PhotoMaker

二、创建虚拟环境并激活

官方推荐的版本信息如下:

  • Python >= 3.8(推荐 Anaconda or Miniconda

  • PyTorch >= 2.0.0

使用Conda工具,创建一个虚拟环境,创建成功之后激活虚拟环境。

conda create -n photemaker python=3.10conda activate photomaker

三、安装依赖

常规安装方法如下:

pip install -r requirements.txt

由于在Windows下面安装,又会有些不一样。需要修改一下这个文件。

注释掉下面三项:

#torch==2.0.1#torchvision==0.15.2#pytorch-cuda==11.8

运行上面的安装命令,装完之后,单独安装一下Torch!

安装过程网络不好的,可以设置conda镜像,pip镜像。

四、下载模型

这个项目用到了两类模型,一个是PhotoMaker,还有一个是基于SDXL的基础模型。

运行代码之后会自动下载。

下载部分代码如下:

from huggingface_hub import hf_hub_downloadphotomaker_path = hf_hub_download(repo_id="TencentARC/PhotoMaker", filename="photomaker-v1.bin", repo_type="model")

当然,你也可以手动下载。那就得明白各种路径的问题!

模型默认会下载在C盘,大概7G左右,准备好足够的硬盘空间。

C盘扛不住的,可以设置环境变量:

SET HF_HUB_CACHE=./models

这样C就解脱了,压力给到D>E>F。

五、 运行测试

喜欢研究代码的,可以直接根据项目主页上提供的演示代码来运行项目。

但是本文以配置为主,就不展开讲代码了。

直接运行网页版Demo:

python gradio_demo/app.py

运行成功之后,打开网址,就可以使用了。

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

从文章来看,配置过程简直小菜一碟!

而实际安装过程肯定没有那么顺利!

这就叫,搞定之后云淡风轻,搞的过程痛不欲生

下面来说说我遇到的几个问题。

六、 遇到的问题

但凡涉及网络的问题,我都不认为是问题。大家都知道有这个问题,但是不能说是什么问题。(如果需要帮助可以后台私信作者)

1.pytorch-cuda包找不到!

ERROR: Could not find a version that satisfies the requirement pytorch-cuda==11.8 (from versions: none)ERROR: No matching distribution found for pytorch-cuda==11.8

这个问题上面有提到,直接安装就会报这个错误。原因大概是,这个依赖文件,就不是为Windows用户准备的。

所以,我的选择是,直接注释掉。

2.Torch版本的问题

如果只是简单使用:

pip install torch

那肯定是不行滴,Linux玩家专属。

Windows需要:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

你可以不指定GPU,但是必须带个尾巴!

3.Fork异常

ValueError: cannot find context for 'fork'

看到这个问题时,我就默默说了句fxxk。

鬼知道什么问题!

经过查询,基本确定和操作系统差异有关。

把源代码中的fork换成spawn就可以了。

4.无法导入photomaker

ModuleNotFoundError: No module named 'photomaker'

所有问题都解决之后,根据官方主页上提供的运行命令,运行app.py就会出现这个错误了。

VSCode里面可以看到导入正常,但是运行命令就是为出现这个问题。

可能是我对Import的路径问题理解不够深刻。

我先是暴力解决,直接把gradio_demo文件下面的两个文件拖动到上一级目录了。

然后直接用如下命令:

python app.py

后来思考了一下它的导入机制。我只要在根目录创建一个run.py。

里面添加一行代码:

import gradio_demo.app

这样就不用去移动那两个文件,直接使用:

python run.py

这样就可以了。

上面的问题都解决了,你应该可以在Windows正常运行这个项目了。但是不要以为这就万事大吉了

你还要面临最后一个考验:OOM

我开头说了,不想努力的拉到最后,因为硬件不够硬,就直接不用努力了。

「实现细节:」 为了生成更逼真的人物肖像,采用 SDXL 模型 (stable-diffusion-xl-base-1.0)作为文本到图像综合模型。相应地,训练数据的分辨率被调整为 1024 × 1024。采用 CLIP ViT-L/14 和一个额外的映射层来获取初始图像embedding 。对于文本embedding,保留 SDXL 中原有的两个文本编码器进行提取。整体框架在 8 个 NVIDIA A100 GPU 上使用 Adam进行优化,持续两周,batch size大小为 48。设置 LoRA 权重的学习率为 14,其他可训练模块的学习率为 15。在训练期间,随机采样与当前目标 ID 图像相同 ID 的 1-4 张图像,形成一个堆叠的 ID embedding。此外,为了通过使用无分类器引导来提高生成性能,有 10% 的概率使用空文本embedding来替换原始更新的文本embedding 。还使用了 50% 的概率的mask扩散损失 ,以鼓励模型生成更忠实于 ID 的区域。在推断阶段,使用延迟主题调节来解决文本和 ID 条件之间的冲突。使用 50 epoch的 DDIM 采样器。无分类器引导的尺度设置为 5。

「评估指标:」 与 DreamBooth一样,使用 DINO和 CLIP-I指标来衡量 ID 的保真度,并使用 CLIP-T指标来衡量提示的保真度。为了进行更全面的评估,还计算了生成图像与具有相同 ID 的真实图像之间的面部相似性,通过检测和裁剪面部区域。使用 RetinaFace 作为检测模型,面部embedding是由 FaceNet 提取的。为了评估生成的图像的质量,使用 FID 指标。重要的是,由于大多数基于embedding的方法往往将面部姿势和表情纳入表示中,生成的图像在面部区域缺乏变化。因此,我们提出了一个指标,名为面部多样性,用于衡量生成的面部区域的多样性。具体而言,我们首先检测和裁剪每个生成图像中的面部区域。接下来,计算所有生成图像的所有面部区域对之间的 LPIPS 分数,并取平均值。这个值越大,生成的面部区域的多样性就越高。

「评测数据集:」 评估数据集包括 25 个 ID,其中包括来自 Mystyle的 9 个 ID,以及自己收集的额外的 16 个 ID。请注意,这些 ID 不会出现在训练集中,以评估模型的泛化能力。为了进行更全面的评估,还准备了 40 个提示,涵盖了各种表情、属性、装饰、动作和背景。对于每个 ID 的每个提示,生成了 4 张图像进行评估。

应用场景

在这一部分,将详细介绍PhotoMaker 能够赋予的各种应用。对于每个应用,我们选择与相应设置最适合的比较方法。比较方法将从 DreamBooth、Textual Inversion 、FastComposer 和 IPAdapter中选择。优先使用每种方法提供的官方模型。对于 DreamBooth 和 IPAdapter,使用它们的 SDXL 版本进行公平比较。对于所有应用,选择了四个输入 ID 图像来形成PhotoMaker 中的堆叠 ID embedding。还公平地使用四张图像来训练需要测试时优化的方法。

与其他应用联合:

git clone https://github.com/StartHua/Comfyui-Mine-PhotoMaker.git

这款comfyui-photomaker与photomaker联合使用

使用步骤:

1.安装 torch torchvision 这个百度 google自行安装了(根据自己电脑选择合适的安装,如果不确定自己电脑是否安装了可以暂时跳过报错再回头安装)

2.安装依赖requirements.txt (要使用comfyui自带的python环境)

3.启动ComfyUI 会自动下载模型photomaker-v1.bin 缓存到modes目录

4.第一运行会默认下载模型SG161222/RealVisXL_V3.0缓存到modes目录

5.注意触发词trigger_word 在正向提示词里面只能出现一次(人家就是这样设计的没辙)

这些步骤与上述类似,这里就不再赘述了

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

速度实现:

  • A100 50步 23秒

AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!

最后...

不管你会没会,不能白看哦。

点个赞再走

原文始发于微信公众号(小明今天拿站了吗):AI绘画工具详解:“PhotoMaker+ComfyUI” Win11本地安装实录!

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月22日14:51:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AI绘画工具详解:PhotoMaker+ComfyUI Win11本地安装实录!https://cn-sec.com/archives/2406064.html

发表评论

匿名网友 填写信息