研究 AI 人像 3 个月,谈谈如何做出还原真人的 AI 写真

AI绘图1年前 (2023)更新 小蝶@葫芦娃AI
15.9K 0 0
给大家展示一下 SDXL 大模型的魅力。
对于 AI 人像,这篇文章的研究重点主要是如何让脸更贴近原图。这篇文章就通过一些专题的实践,对还原人脸的一些出图思路、技巧和心得,会从出图思路、优化方向出发,逐步拆解,希望能给大家带来启发。
本篇的重点内容有:
如何根据一张图像还原人脸?
如何使用 stable diffusion 完成的更贴近真人特征的真人转漫画?
如何快速搭建一个可用的人脸 lora 模型?
如何实现基于模板照的人脸替换?
如何发挥 SDXL 能力制作创意写真?

一、初次接触 AI 绘画

使用文生图参照着当时的特征去写的提示词(白色毛衣,中长发,星星背景):
现在已经迭代了一版,使用了 lora 更贴近真人。ControlNet 的出现也对 SD 出图有了更强的控制,能够直接参考人脸特征和其他写真图片的风格。
但学会看图说话,仍然是一个很重要的能力。下面第一个案例,就是讲如何在没有 lora 的情况下实现漫转真人。

二、动漫转真人

第一次接到的 AI 绘画定制来自公众号的一位读者,他需要实现一组动漫形象到真人的图片生成,约 15 至 30 张。这位用户没有要求还原角色的服装和服饰,只希望保留动漫的整体感觉即可。
如何在没 lora 的情况下实现漫转真人,首先就是要根据人物特征反推并细化提示词。

一)出图思路

大家听到漫转人,应该会想到这种图:
这种使用线稿控制出图,选择真人大模型出图就可以,但是需要的是出一套场景变换、人物动作变换的图像,原型要求是迪士尼的茉莉公主。
我问他要了下其他漫转人的样图,他给了冰雪奇缘的艾莎,可以看到发型还是蛮还原的,不过衣服不需要完全一样,只需要做到贴合原角色 。
所以出图思路:
1、写实类大模型,画风精美,需要外国面孔
2、如果有现成的人物 lora ,就可以更好地控制出图,迪士尼公主应该有人会炼
3、提示词改变场景、表情等

二)实操:初步效果

星九选用了比较出名的 absolutereality_v16 模型,是一个非亚洲面孔的写实模型,可从C站找到。
最开始没有找到关于茉莉公主的 lora ,所以还是选择提示词直接出图,给客户先看下效果是否符合预期。
不知道怎么写提示词,先使用 tagger 反推一下:
然后直接用提示词出图看看效果:
tag 上的人种、服饰、装饰、姿势都比较齐全了,不过在服装颜色方面、装饰细节方面还不太对,因此基于这个提示词进行修改,规定服装颜色、头饰等。
茉莉公主这个发带实在不太好还原,但可以出皇冠或者吊坠的图像。
最终发了几个效果图给客户,客户看中下面两张图中,第一个的皇冠,第二个的脸,并且要求后面的是同一张脸。

三)固定人脸

客户希望使用同一个人的人脸,这对我来说是一个挑战。要训练一个可用的 lora 模型需要大量相似的人脸图片,但训练也是需要十几张相同的人脸,所以训练 lora 的方案不太可行。
当时利用 ControlNet 的 reference 解决了这个问题。
为了保持除人脸外的其他部位不变,我使用图生图蒙版把脸部覆盖,重绘区域选择仅蒙版区域
接着选择客户想要的那张脸部图片,开启 reference only 模式,同时开启After Detailer修脸插件。
这里多说一句,现在主流的修脸插件有After Detailer ( 以下简称 AD ) 和 Face Editor ( 以下简称 FE ) ,一般出图都需要开启,不然容易脸部崩坏。
ControlNet 选择 reference 设置,可根据出图效果去调整,此处不想要参考服饰特征,因此只截图人脸部位即可。
只开 ControlNet 出图的话,脸很可能是不正常的,可能会出现,脸部不贴合、比例不对、肤色不统一等问题。截图一下我的中间出图结果:
所以需要开启 AD 修脸,就能把比较奇葩的脸修回来。
不过当时出图是两个月前,现在很多插件模型都更新了,我这两天复现了一下,同样的参数不如当时像了。
由于只使用提示词出图,发型还是很难做到还原,最后还是在 C 站上找到了茉莉公主的 lora ,使得发型更加贴近原角色,可以看下当时的效果。

四)优化流程

通过使用 reference 方法 + 修脸插件,我直接获得了比较还原的人脸效果。这主要得益于所有图片来自同一模型生成,图像风格和质感上具有较高的一致性。如果直接参考我本人的照片进行人脸替换,由于图像风格存在较大差异,直接应用 reference 这种方法的效果就会较差。
但是上述操作是手动绘制了脸部蒙版,有点费时费力了,能 AI 干的就不要手动去干,重绘操作可以用检测脸部的算法来替代,这样就和 roop 功能的原理类似了。这次趁着复盘的机会,我也尝试了几个新的实验来实现换脸效果。

1、直接图生图 roop

使用图生图,调整重绘幅度为 0 ,换脸后图片如下。
直接使用 roop 效果还是不错的,因为这张原图本身就不是特别写实的风格,roop 生成的图像质感还可以接受。而且我发现,roop 对外国人的脸部特征支持要比亚洲脸好。
这个例子中,图片表情是微张着嘴,roop 生成的结果也很好地保留了这一表情细节,和前面使用 reference 模式的效果相比,基本接近。

2、图生图 roop +修脸插件

我尝试了两个不同的修脸插件,发现添加修脸插件可以使生成图像中的妆容更贴近原图效果。比如右边使用 FE 插件生成的图片,妆感明显比直接使用 roop 重建的更重一些,更接近原图。
通过这次对比试验,我意识到修脸插件可以帮助生成图片在妆容、细节方面更接近原图效果。未来在实际生成图片时,我可以根据图片需求,选择性地添加修脸插件来进行人脸调整,使结果更符合预期。

五)总结

通过这一系列实验,我得出两个固定人脸的主要结论:
1.优先考虑使用 roop 方法进行人脸替换。当源图片和生成图片风格相近时,roop 可以达到很好的换脸效果。
2. reference 模式也是常用的控制生成图像的方式之一。但是随着 IP adapter 的出现,其参考图片和控制图像效果有了很大提升。所以在需要参考脸部或其他元素的场景下,我会优先考虑 IP adapter 达到更佳效果。
下一章会着重去讲一下 IP adapter 的使用。

三、真人转动漫

一)出图思路

目前真人转动漫也有几个思路,一个是直接利用线稿,选择相关风格的模型去出图,这样参考的就是原图的整个构图形式,局限性比较大,且对脸部只是近似的还原,不一够形似。
那怎么使漫画的脸更像真人呢?这个可不能拿真人脸去 roop 哈,不然就是这样:
你可以训练 lora ,让模型学会你脸部的特征,再配合模型出图,可以指定画面元素,不过需要数十张照片去练模型,成本高一点。
还有个省事的方法,利用 ControlNet 相关模型去参考脸部特征,一张解决问题。
下面结合几个具体案例,讲一讲出图流程。
测试时使用一个皮克斯风格的大模型直接出图,此模型可以从吐司上直接搜索即可得到。

二)线稿出图

线稿出图,需要最大程度还原整个画面的内容,因此需要进行 tagger 反推。
在控制方面,只需要输入一张图像到 ControlNet ,开启线稿模式即可。
tag 是否贴近画面的对比:
这种方法在出图尺寸、画面修改上略有受限。

二)一张人脸参考出图

使用 ControlNet 的 IP adapter 模型并选择 sd15face,这可以最大限度地参考人脸特征,从而使生成图像中的发型也能够接近原图效果。
另外,IP adapter 无需考虑原图像的尺寸,操作更为灵活方便。
如果只想还原脸部和发型特征,而不保留原图像的背景元素,可以直接选用 face-sd15 模型。
这时不需要写与原图背景相关的提示词,模型只会保留头部的特征。face-sd15 可以非常精准地抓取面部和发型的细节,同时忽略原图中的其他元素。
当然也可以选用 ip-adapter_sd15_plus 这个模型,它能把背景和人的穿着都参考到,最大程度还原,经试验, ip-adapter_sd15 不如 plus 准确。
通过对比这几个 ip-adapter 模型,发现对于精准还原发型和表情,还是 face-sd15 模型的效果最佳。
使用这种控制方式时,可以自己尝试调整权重参数,根据生成结果找到最适合的设置阈值。
另外,这种方法也不受原图线稿限制,可以实现不同姿势的生成。
总体来说,与 MJ 相比,face-sd15 控制方式可控性更强,生成效果也更加逼真。对于需要定制化头像的服务,我会优先考虑使用这种方案进行图像生成。

三)使用 lora 出图

先挂一张我现在的头像
这头像就是我用 Beautiful Realistic Asians v5 底模训练,用 麦橘 v5 出的图,可以比较好地保留麦橘模型的厚涂感。
如果你想保留原模型的质感和风格,那 lora 就不要用同一底模去训练。
这里举个例子,我用 麦橘 v5 出一个宠物合照,最左边是同一底模训练 lora 和出图,右边几个不同底模训练并用 麦橘 v5 出图的,右边两个就比较保留麦橘原画风的感觉。
所以,如果是动漫风的头像也是这个出图思路,比如用原生 sd1.5 去训练 lora,用对应二次元模型出图。
下面就是我用原生 sd1.5 ,使用不同模型出图的例子:
可以看出能够保留原人物的特征,且大模型画风不变。
如果用 ControlNet 参考,同样的模型,出图会是这样:
可以看出,使用一张图去参考,表情和发型主要是依赖于原图。

四)总结

做漫画效果时,看用户想要哪种效果:
1、完全根据原图画面来出,则直接使用 linear 线稿进行控制即可,现在大部分产品的人转漫画,就是这个方式。
2、想用一张真人图参考,最大还原发型,随意变换姿势,可使用 ControlNet 的 IP adapter 模型。
但这个方法比较适用于人转漫,如果想出比较写实或者 2.5d 的画风,就不太像。毕竟漫画讲究个形似就行,但对于写实一点的,对长相还原程度要求比较高。
3、想保持脸部特征不变,但不受发型、姿势、表情限制,保持原模型出图风格不变,可使用 lora 出图,但需要的照片数据更多。
关于训练 lora 的具体注意事项,在下一节真人写真中有更详细的介绍。

四、真人写真

一)出图思路

现在真人写真主要有以下几个思路:
1、摄影馆场景,对人物真实拍摄,AI 修改背景、服饰等。
2、基于已有的写真图像进行换脸。
可使用 roop 换脸,或使用人脸 lora 换脸。
如果 lora 训练得好,会更自然,如果训练得差,出图效果也会很差。
3、基于人脸 lora 出图。
图片风格可以另外使用风格 lora ,如妙鸭的写真模版,适合固定模板的写真。
也可以通过人脸 lora + 提示词直接出图,适合创意场景写真。
本章主要讨论后两个出图方式。

二)换脸法

只进行换脸,无需考虑其他部位出图是否会混乱,能够较大程度地保证照片的质量。
1、roop、face swap 换脸
上面说过 roop 换脸,在茉莉公主的例子中,表现还不错。
现在还有一个常用的换脸方法,就是 face swap ,不过这个技术跟 roop 底层差不多,出图效果也差别不大。
但如果与 lora 比的话,roop 的质感和自然度会差一些,在脸部有遮挡的情况下,容易出现不适配的情况。

2、lora 换脸

在图生图中,重绘幅度调到 0.05(不调到 0 是因为有些修脸插件到 0 会报错),选择 AD、fe 等修脸插件,使用 lora 提示词换脸。
提示词写在修脸插件里,或者写到页面最上面的提示词框都可以,需要加一些质量相关的词,如 best quality, masterpiece, highres, portrait 等,保证出图质量。
如果发现脸部非常模糊,可以考虑去高级选项里找到脸部大小选项,把脸部尺寸调大。这里以 FE 为例:
这样就可以看到脸部会更加清晰了。
如果 lora 训练得好,用 lora 出图会更加自然。
当然,使用这种方法也可能出现脸部不像的情况,这与原图中的表情和五官特征有关。例如,在训练 lora 模型的数据中,如果没有露齿笑的表情样本,就容易导致生成的露齿笑表情不像本人,这也是我在职业照接单时踩得最大的坑。
lora 换脸的应用中,也存在两种情况:
1) 模板图像不是由模型生成的真人照片。
2) 模板图像是模型生成的,且知道对应的生成提示词。
对于情况 1,因为不了解模板图像的妆容细节,直接进行换脸,无法保证生成结果的妆效。
而对于情况 2,由于知道模板图的生成提示词,包含了妆容、光照等信息,所以换脸到其他人脸时,可以最大可能保留模板图像的妆效。
下面来做几个实验。

3、roop 与 lora 对比

使用 beautifulRealistic_brav5 模型作为底模,使用在这个底模上训练过的 lora ,使用 AD 的 mediapipe_face_full 模型进行换脸。
roop 原图为:
使用 angelababy 的写真图,脸部有遮挡的情况:
这里 lora 还是比较相似的,不过由于遮挡,roop 的脸没有还原好。
使用 AD 换脸时,脸部检测框也会涉及到手部,所以手指也有所变形。
换脸的话,妆感会消失,即使 lora 能看出一点妆感,也应该是我人脸 lora 模型本身的妆,而不是原图的妆。
使用职业照写真,露齿笑的情况:
如果是这种笑容的情况, lora 换脸不太容易出图,会形似但不像,无法满足职业照的要求。
当时接过几单职业照写真,大家要的就是这组笑容图像,接了 4 个人,只有一个人的 lora 能够正常出,其他用 lora 都不像,最后其他几个就是 roop 换脸加 p 图,再用美图秀秀手动 P 的妆容。
露齿笑确实属于比较难出的情况:
1)模型本身不擅长画牙齿
2)即使客户数据中有露齿笑,每个人的牙也有各自的特点。
经过我的实验, lora 可以学到牙的特点,但是 roop 出的牙风格都差不多,会很假。
所以,不建议出露齿笑这种高难度的图,即使是妙鸭,只要是有露齿笑的都不会太像我(你也会发现妙鸭只有几个露齿笑模板)
半身写真图
从这组换脸效果来看, lora 的效果就比较好,脸部光泽跟原图比,没有损失太多,但还是会掉妆感。
而 roop 总是有一种过度磨皮和假面感,脸部也变得更加平面了,高光都没有啦。
模板图为模型生成
这里增加一个妆感比较强的 lora 风格:美式证件照
原提示词:high quality, best quality, photorealistic, ultra detailed, extremely detailed face, textured skin, USportrait, 1girl, freckle, many braids, blue long sleeved shirt, red tie, heADset, looking at viewer, blue background, studio lighting, autolinklora:USportrait_20230621151016:0.7autolink, navel,
提示词 1:best quality, masterpiece, highres, portrait, 1girl, lora:aj30_bra:1
提示词 2:high quality, best quality, photorealistic, ultra detailed, extremely detailed face, textured skin, USportrait, 1girl, freckle, many braids, blue long sleeved shirt, red tie, heADset, looking at viewer, blue background, studio lighting, autolinklora:USportrait_20230621151016:0.7autolink, navel, lora:aj30_bra:1
可以看到使用提示词 2 时,可以保留原图像的妆感。
而 roop 和提示词 1,本质都是直接换脸,无法保留原图妆感。

4、相关产品尝试

最近看到很多写真小程序,其中有个叫「绘之境」的,就是用的换脸的逻辑,现在训练 lora 还是免费的,好几个写真模版也是免费的,我就尝试了下。
就紫梦花园这个主图,出了两个照片:
可以见到妆感还在,但还是和海报上的原图有所差别,人脸lora会与原提示词的妆容有一点冲突。
换脸的时候,耳饰也有变化,肯定也是在用修脸插件的时候被检测框选择到了。
换脸模板图本身也是通过模型生成的写真作品,这种换脸产品,本质上与妙鸭中更像一点的功能类似,仅调整脸部特征。
所以这个小程序就是使用模型生成图去换脸的逻辑,本质上是使用了提示词控制妆感。
就我使用来看,这个小程序换脸后的质感还是很不错的,但这也跟我的数据集质量比较好有关。看过有小红书其他人的返图,包括妙鸭这种产品,有的人的脸就是糊糊的,那就肯定是训练数据就不是很清晰,所以说训练 lora 的素材对出图效果来说很重要。

三)lora 直出法

使用人脸 lora,直接文生图直出,自由度很高,可以生成各种创意图像。
或者像妙鸭,另外训练风格 lora,然后使用 ControlNet 控制出图姿势,可以保证一下出图效果不过于混乱。

1、风格 lora + ControlNet 姿势

这就是妙鸭的出图逻辑,用 ControlNet 的 openpose 去控制镜头形式,可以发现妙鸭很多都是半身照,大头照,这样也能避免手部废片。
另外它也支持上传一个姿势去参考,还有开盲盒形式,增加了一些趣味性。
这里拿上面的美式证件照举例,如果我想让它以固定的某个姿势去出图,可以上传一张参考图到 ControlNet 选择 openpose ,这样设置:
这样姿势就很还原了。

2、文生图生成创意写真

最近 SDXL 出来后,模型理解能力更强了,我使用 xxmix-SDXL 模型训练了自己的 lora ,然后使用模型进行文生图出图,得到了很多比较有创意的写真。
大家都很好奇是怎么出的,是不是要另外训练 lora ?其实根本不需要,全靠我的提示词。
先贴几个出图效果:
碎纸为例,提示词可参考
A woman mADe of Chinese art paper, ((with shattered paper skin)), face is mADe of shredded paper, calligraphy and landscape paintings on the paper,
high quality, best quality, realistic, photo, detailed skin, detailed face, realistic, photorealistic,
xxmix girl, autolinklora:ajia_xx_v1:0.8autolink, ajia, black eyes, bust, upper_body
Negative prompt: (worst quality, low quality, illustration, 3d, 2d, painting, cartoons, sketch), tooth, open mouth, nsfw
Steps: 30, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 3717684114, Size: 768×1024, Model hash: ecb947b4ea, Model: XXMix_9realisticSDXL(Test)_Test_v2.0, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ADetailer model: mediapipe_face_full, ADetailer confidence: 0.3, ADetailer dilate/erode: 4, ADetailer mask blur: 4, ADetailer denoising strength: 0.4, ADetailer inpaint only masked: True, ADetailer inpaint pADding: 32, ADetailer version: 23.9.1, Lora hashes: “ajia_xx_v1: e2b01d92cf91”, Version: v1.6.0
就是增强想象力,描述自己想要的场景即可。
最近又出了明星下车照和中秋照片,文生图时,也可结合其他风格效果,比如我使用了工笔画的风格 lora,就会变成工笔画的感觉。
这些提示词都是以下面这个词为基础,添加场景词和 lora 词即可。
high quality, best quality, realistic, photo, detailed skin, detailed face, realistic, photorealistic, xxmix girl,
一个 tip :如果出图时脸部模糊,不一定是 lora 的原因,也有可能是提示词的原因,一些质量提示词还是要有。

四)lora 训练经验

前面我讲了很多关于 lora 模型的使用技巧,可能有些朋友希望进行 lora 模型训练但不知如何开始。那么接下来,我就根据自己的经验,以最简单的方式来讲解一下我是如何训练 lora 模型的。
这里不涉及从 0-1 的安装步骤教程哈,想要更详细的操作,可以看下吴东子写的 lora 训练攻略 ,这章的重点是帮大家排雷踩坑,让大家别在选择工具和调整参数上那么纠结,快速上手训练。

1、炼丹工具选择

如果你在纠结用什么工具炼丹,那我直接推荐秋叶的炼丹脚本,最简单。
视频详情里有网盘链接,一些基本的操作也可以通过视频学习一下。
中途也尝试过赛博炼丹炉等工具,后来他们开发者都不再维护了,而且会有一些 bug,现在已经沦为了我的打标工具(感觉这个工具删除标签啥的很方便)

2、准备数据集

我的主题主要是说人像,所以这里也主要讲训练人像需要注意的点。
1)图像清晰度
数据集的质量要注意,即使是 512*512 的图像,单反拍出来的质量与手机前置的也是不一样的。
需要避免图像噪点大、模糊泛白的情况,也要注意数据的多样性,不要都是同一个光线和颜色,容易过拟合。
2)选大脸还是全身?
虽然有人说自己大脸照训练出来之后,容易都是大头照。但我可以说,这个画面能够通过提示词控制,我上面所展示的 lora 效果,都是大脸照训练出来的。
就 SDXL 模型为例,我的数据集是这样,一共 20 张:
因此,如果你想出人像,优先建议用大脸照训练,后续可以添加些半身、全身照进行混合训练。
我不想训练半身照的原因是,服装确实会对 lora 有所污染。
大脸照我目前还是手动裁剪的,用算法自动检测的总是有点不够准确。
另外,模型直出全身半身的脸,发生崩坏的情况是很正常的,这里出图必须配合修脸插件使用。有了修脸插件,它就能单独针对画面中的脸进行二次修改,一个是把崩坏的脸修改回来,一个是把脸改得更贴近 lora 的样貌。
所以训练大头照,能让模型更注重你面部的细节,这时通过修脸插件修复脸部的效果会更好。

3、打标签

对于大脸照,打标签要容易得多,而且我没有特别多的干预,基本上依赖自动打标。
如果你有赛博炼丹炉,可以选择它来打标,这里我用丹炉做个例子。
打开丹炉后,上传素材,因为我现在已经是大头照了,就不用脸部加强了。
点击预处理,得到标签后,删去与面部特征强相关的词语,我主要是会删除 lips 和 nose 两个词。
再看一下眼神的方向有没有标错,比如眼睛看向旁边,却被标成看向观众:
这种眼睛的朝向标签不够准确,出来之后很可能就是斗鸡眼,应该标成 looking away。
处理好之后点击「打开训练集」,直接把 image 目录复制到秋叶训练包下的 train 文件夹里,改下名字,把 repeat 设置改成 20,开始准备训练。

4、参数设置

有人很纠结参数怎么调,这里我想说,先直接默认,只改底模路径、训练次数之类的,不需要特殊去调整学习率参数。
我使用 20 张人脸训练,习惯 repeat20、epoch10、batch1,这样训练出来基本第 7-10 个 eopch 的模型都是能用的。
优化器可以就用默认的 ADamW8bit ,还是比较好用的。
仅仅依靠 loss 值下降并不能完全判断模型效果。比如,如果训练数据集中包含模糊的图像,模型可能就会学到不正确的面部特征,从而导致最后 loss 非常低,但生成图像质量很差。
所以仅看 loss 指标是不够的,还需要直接评估生成图像的视觉效果,比如清晰度、识别度等,来判断模型的训练质量。从我的经验来看,ADamW8bit 和其他优化器相比,是不太容易过拟合的。

5、模型选择

对于 SDXL 模型,使用同一底模训练和出图即可,不会过于拟合。
SD1.5 模型过拟合的情况会多一些,上面也讲了,如果同一模型训练和出图的结果比较差,想保留原模型质感,可以考虑直接用 sd1.5 基模型去训练,或其他相关底模训练。比如,我可以用 bra 的模型训练 lora ,直接去 magic 出图。

6、训练后测试出图

可以使用 xyz 图表方式测试出图,尽量使用一些比较有创意的词语,原照片上没有的元素。
比如白头发这种特征,或者一些赛博朋克的背景等。
记得测试时的提示词也要好好打,出图的质量和提示词也会有很大关系。

五)总结

本节对换脸和直出法做了详细的实验。
对于换脸:
lora 优先,想保持妆感,需要有相关妆感的 lora。
roop 效果较差,需要美颜微调。
对于 lora 直出:
需要选择一个能力好的基模型,能够调整出各种效果,通过提示词创意出图。
如果需要固定某一风格,可使用风格 lora 进行控制。
五、结语
这就是目前星九在人像出图方面全部的研究,如果对人像比较感兴趣,可以利用上述方法去进行人像出图,不管是漫画头像定制,还是创意写真定制,都是有一定市场的。
即使存在妙鸭等自动化工具,但私人化定制的人像仍有较高需求,因为自动结果难以百分百满足需求,仍需人工微调调整。
总之,深入研究 AI 人像生成技术,开发出适合个人需求的人像服务,我认为依然是一项值得长期投入的方向,这段时间的探索让我对相关技术和方法也有了更深刻的理解,后续会继续关注这方面的技术,期待着下次给大家分享。
© 版权声明

相关文章

暂无评论

暂无评论...