如今要拍摄一组写真,需要服装、道具、灯光、场地、布景、拍摄、后期等过程。整个过程需要统一才能形成好的写真效果。现在有了AI绘图技术,我们可以实现通过AI绘图,只用计算机计算就得到一组接近真实的写真照吗?答案是可以的!
其实基于现有的很多AI工具,都能实现真人AI写真,之前我介绍过了Stable Diffusion的WebUI和ComfyUI,今天我们仍然以所有AI绘图工具中,控图能力最强的Stable Diffusion为例,为大家深入浅出地介绍如何使用Stable Diffusion进行真人AI写真的创作。
话不多说,我们先看效果,下图是我做过的一部分AI写真,有男人,女人,和小孩
一、如何实现
现在,我们来整理一下思路,如何利用AI实现真人写真?大致上,我们大概可以想到以下几个思路:
• 网图AI换脸• AI绘图换脸• 真人训练AI绘图
在以上思路中,我们进一步分析拆解,可以发现其实可以得到以下几个关键步骤
• AI换脸• AI绘制人物• 真人模型训练
我们就以其中最小关键步骤为切入点来讲解
二、AI换脸
在Stable Diffusion中进行AI换脸是十分容易的,主要得益于WebUI强大的第三方插件商店,目前常用的roop和faceSwap两款插件,可以非常方便快速的实现AI换脸
1. 环境准备
要使用AI换脸插件,我们需要先安装在需要的环境 准备环境的过程中,可能出现各种安装错误,这里不一一列举,大家有问题可以提出来,我看到会为大家解答!
1. 安装Microsoft C++ 生成工具
1. 进入https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/ 页面,点击“下载生成工具”。2. 打开下载的exe文件,选择“使用C++的桌面开发”,然后点击“安装”。安装会占用大约9G空间,建议选择非系统盘并预留空间3. 安装完成后,最好重启电脑。
2. 安装insightface
1. 打开命令行窗口(Win+r,输入cmd,回车,可快速打开命令行窗口)2. 进入stable-diffusion-webui的Scripts目录下:”X:\\xxx\\stable-diffusion-webui根目录\\venv\\Scripts”3. 输入命令pip install insightface==0.7.3(安装特定版本)
以下换脸示例中,我们就以马斯克的一张网图为原型进行换脸替换
2. roop
roop插件是WebUI中的其中一款换脸插件
安装
通过代码仓库安装:扩展->从网址安装->扩展的git仓库网址
输入https://github.com/s0md3v/sd-webui-roop.git再点击安装即可
通过插件商店安装:扩展->可下载->加载扩展列表
输入roop搜索,再点击安装即可
下载模型
下载 inswapper_128.onnx 模型:https://huggingface.co/ezioruan/inswapper_128.onnx/tree/main 将下载的 inswapper_128.onnx 模型替换到 /models/roop/ 目录中。
使用
安装完成之后,重启sd-webui,我们就能在文生图和图生图都看到roop插件了。roop插件的界面基本上也一目了然,大概看看就知道怎么使用了。 Roop只会修改五官、眉毛以及脸型,不会改变肤色
1. 文生图我们用以下咒语先画一个帅哥出来
best quality,masterpiece,1boy,male focus,solo,facial hair,necktie,realistic,formal,suit,brown background,black necktie,looking at viewer,upper body,beard,brown hair,shirt,jacket,tongue,white shirt,black jacket,collared shirt,stubble,brown eyes,black suit,
这时,我们还没启用roop,现在我们再启用roop,把马斯克的脸替换上去
于是,我们就得到了这样的图片
2. 图生图文生图如此,那图生图其实也大同小异,我们随便从网络抓一个帅哥图片
然后调整我们的SD参数
按照普通的图生图模式,把重绘幅度拉低到0.3-0.6之间就行,当然最重要的还是启动roop换脸插件
于是,我们最终得到这样的融合图片
进阶使用
上面流程中,我们使用默认参数即可,其实它的界面上还有一些可调整的参数
1. 逗号分割的面部编号 即我们可以选择替换图片中的第几个人脸,从左往右从0开始(比如我们图片有两个人,我们要替换右边的人脸,则填1),非常适合多人脸替换,我们可以挨个进行替换2. 面部修复/面部修复强度 可以选择面部修复算法为CodeFormer或GFPGAN• CodeFormer:对输入图片均有增强效果,如头发,脖子,衣领,脸部,修复有有纹理效果,更接近真实。适合男士脸部• GFPGAN:修复后的图片比较光滑,有磨皮效果。适合女士脸部3. 放大算法/放大倍数 即对输入图片进行放大,可以选择不同的放大算法来保证图片放大后的质量
注意:请确保输入图像的脸部不要被头发帽子等遮挡物遮挡
3. faceSwap
那另一款换脸插件faceSwap其实也和roop非常类似
安装
通过代码仓库安装:扩展->从网址安装->扩展的git仓库网址
输入https://github.com/glucauze/sd-webui-faceswaplab.git再点击安装即可
通过插件商店安装:扩展->可下载->加载扩展列表
输入faceSwapLab搜索,再点击安装即可
使用
通过faceSwap换脸,我们得到以下效果
具体过程就不赘述了,同roop一样,文生图和图生图均能换脸
进阶使用
faceSwap,相比于roop来说,要稍微强大一点,它提供的功能更全,提供配置参数更多,不过大体和roop差不多,包括面部序号、面部修复、放大算法以及后重绘等。值得一提的是,faceSwap提供了一个非常轻量的人脸模型训练功能,它只需要你提供少量图片(当然图片越多效果越好),就能轻松训练一个轻量模型,跟直接替换相比,使用训练的模型进行换脸,可以使得最终结果更像,在插件界面可以选择自己训练好的人脸模型
总体来说,不管是roop还是faceSwap,他们都提供了一种快速便捷的AI换脸功能,在很多场景下,这样的方式,其实就能完成真人AI写真了。
当然,如果你亲自去尝试了,你还是会发现这样的换脸插件在某些情况下,图片是很难达到预期的,包括脸部融合度,包括画面精细度等。
因此,如果需要让写真更加“真”,我们需要继续探索其他的方式!
三、AI绘制人物
在聊真人模型训练之前,我们先要学会如何用SD绘制人物的图片。首先,让我们绘制一个美女出来吧!
1. 大模型
首先确定你要绘制的画面风格,选择一个大模型,一般来说,我会将大模型粗暴的分为写实、动漫、2.5D三大类,然后再去细分不同的画风 比如以下是我收藏的一些写实大模型
我们就以国风大模型为例,选择“国风汉服写实”大模型
2. lora模型
根据实际情况选择是否使用lora模型,lora模型可以是画风lora、可以是人物lora、也可以是特定部位lora 比如以下是我收藏的一些lora模型
这里,我不需要选择lora模型
关于模型下载,我一般使用c站和国内的liblib
C站:https://civitai.com
liblib:https://www.liblib.art/
下载模型之后,保存网站上的首图首图,以及作者的一些出图建议,能更加方便下次使用
3.咒语(提示词)
提示词,是出图的关键,Stable Diffusion会根据你的提示词的内容、关系、以及权重等,来决定它会如何进行降噪出图。一般来说提示词分为几个部分
1. 画质画风词
画质词:(masterpiece:1.2), best quality, highres,extremely detailed CG,perfect lighting,8k wallpaper, 真实系:photograph, photorealistic, 插画风:Illustration, painting, paintbrush, 二次元:anime, comic, game CG, 3D:3D,C4D render,unreal engine,octane render,
画风词:Cyberpunk 赛博朋克 8bit/16bit pixel 像素风 studio ghibli 宫崎骏风格 pixel style 皮克斯风格 Chinese ink style 水墨画
2. 画面主体描述
人物、年龄、发型,头发颜色情绪表情,衣服装束,正在干什么
3. 环境/场景/灯光/构图
比如下雨天的咖啡厅,正面视觉、人物特写
4. Lora(如果需要)
加载lora、hypernetwork等触发内容
5. 负面提示词
负面提示词基本可以通用,包括一些低画质,多手多脚之类的
负面词:NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)),((grayscale)), skin spots, acnes, skin blemishes, age spot, (ugly:1.331), (duplicate:1.331),(morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (missing arms:1.331),(extra legs:1.331), (fused fingers:1.5), (too many fingers:1.5), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit,bad hands, missing fingers, (((extra arms and legs))), NSFW:not Suitable For Work不适合在公开场合出现的图片
我们使用以下提示词来画一个国风汉服写实美女
best quality,masterpiece,absurdres,Highly detailed,ultra-fine painting,extreme detail description,Professional,1girl,full body,hair ornament,holding,necklace,orange with white chest pleated skirt,red waistband,red with white waistband,tang style outfits,transparent background,hanfu,tang style outfits,
4. 其他参数
这里的很多参数都还有各自能继续深究的点,今天重点不在这,就先略过了,有必要可以出文单独分析
1. 采样方法:不同的采样方法适用于不同画风2. 迭代步数:理论上迭代步数越高,画面越精细,出图时间也越长,但也和采样方法对应,有的采样方法可以在很少的步数内就出图,后续增加的迭代步数所换来的收益就不大了3. 高分辨率修复:开启高分辨率修复可以让SD对图像进行二次高清重绘放大4. 放大算法:不同的放大算法有不同放大效果,一般写实画风推荐4x-UltralSharp或8x_NMKD_Superscale_150000_G,动漫画风推荐R-ESRGAN 4x Anime6B5. 宽高:定义出图尺寸,一般需要参考大模型作者或lora作者给出的参考尺寸,需要更大尺寸图片可以再通过后期放大6. 随机种子数:方便重现出图
最终我以如下参数(图中标注为关键参数),来绘制一张国风汉服美女图
四、lora模型训练
学会绘制美女之后,下一步我们就需要使用自己训练的lora模型去和绘制的美女融合了,那么我们就需要学习如何训练lora模型
训练步骤
训练一个自己的lora模型分为几个步骤
1. 准备数据集:准备好需要训练的lora的数据来源2. 图片预处理:如果是炼制人物脸部lora,那么尽量让画面纯净,仅包含人物上半身,且只有想要训练的人脸3. 数据集打标签:这一步的作用是告诉AI你的图片包含什么元素
对于标签:如果你想保留人物的某个特征,就删掉对应标签,这样AI就会认为这个人就是这个特征;如果你想灵活调整某个特征,那就要把这个特征打上标签。举个例子:如果你有红色头发,你不打红色头发标签,那么炼制的lora模型很大概率会一直出红头发,即保留了这个特征
4. 开始训练:这个过程的时间长短,取决于你的电脑配置5. 测试lora:除了测试训练出来的lora出图是否和原图像以外,也要测试lora的泛化程度,是否存在和原图过于拟合的情况等工具
lora训练的方式有很多,有通过执行脚本训练,也有通过界面训练。目前比较常用的lora训练工具有sd-trainer和赛博炼丹炉。 注意训练lora对配置有一定要求,显存至少需要6G,我个人是3060ti 8G的显卡,20张图片的训练时长在三个半小时左右
炼丹工具在结尾给下载地址
1.sd-trainer
一般来说,我们直接选用新手模式进行训练即可,当你真正掌握了其中参数的含义之后,再去尝试专家模型 新手模式下,我们一般只需要修改训练用的底模(即基于什么大模型进行训练),数据集目录,和模型保存名称即可,其他参数如训练轮数,学习率等,都可以在熟悉了训练流程之后再做调整 其中,WD1.4标签器可以帮助对目录下的图片自动打标签(对应前面数据集打标签步骤)
2.赛博炼丹炉
赛博炼丹炉相对来说界面更加友好,基本上按照界面提示一步一步走即可
1. 选择大模型,训练风格,召唤词根据自己的需求,来选择大模型和风格
2. 上传数据集图片上传训练数据集,训练人物lora尽量为半身像,最好包含人物各个角度的照片
3. 设置预处理参数设置训练分辨率(1.5模型一般默认为512×512),模式以及是否勾选脸部加强(训练人物脸部lora要勾选)
4. 数据集打标签
点击预处理之后,炼丹炉会对图片进行人脸识别和裁剪,以及自动打标签
我们需要对标签再做一遍筛选,看看AI识别的标签是否正确,进行一遍校正
5. 开始训练没有问题之后,就可以开始训练,训练时间取决于你的电脑配置lora测试
不管是sd-trainer还是赛博炼丹炉,训练完成之后,都会得到几个训练好的模型文件,模型文件数量根据你的配置决定,对于赛博炼丹炉来说,默认是每一轮训练结束都生成一个lora模型文件 以下是我之前训练的lora模型
训练完成之后,我们就要对这些模型进行测试了,我们需要以1-10(假如训练为10轮,生成了10个lora模型)的全部模型和0.1-1的全部强度两个维度来进行测试,这块我们可以使用stable diffusion的xyz脚本来进行一个测试,最终确定哪个模型下的哪个强度,是我们训练效果最好的
我之前训练的lora模型的真人原型,后续出图示例也以这个原型为准
比如我之前训练的模型有iris_20240125002809-000001.safetensors到iris_20240125002809-000010.safetensors,那么我就可以在正向提示词引入lora时,使用参数替换
<lora:iris_20240125002809-MODEL:STRENGTH>
并且在最下方选择使用XYZ脚本进行出图
配置正向提示词加入“银色头发”,这样,我们能测试lora的泛化程度
(silver hair:1), best quality, masterpiec8K.HDR. highresabsurdres:1.2, Kodak portra 400, film grain, blurrybokeh:1.2, lens flare, (vibrant color:1.2),1girl, red dress, looking at viewer
这样,就能得到一个以模型和强度为维度的二维xyz图表
通过观察xyz图表,我们就可以很快的找到在相似度和泛化度都很合适的lora模型以及使用强度(既很相像,又能出现银色头发)
五、真人AI写真
经过以上一系列步骤,我们就真的可以开始出AI写真了 使用训练的lora模型出真人AI写真,也有几种方式
1. lora文生图直出
这个很好理解,直接用到我们上面提到的绘制美女的方法,加上我们提炼的lora即可
best quality,masterpiece,absurdres,Highly detailed,ultra-fine painting,extreme detail description,Professional,1girl,full body,hair ornament,holding,necklace,orange with white chest pleated skirt,red waistband,red with white waistband,tang style outfits,transparent background,<lora:iris_v1_000006_0.7-1:0.8>,hanfu,tang style outfits,
不难发现,虽然生成的美女很漂亮,但是她和原型差的太多了,主要原因是人脸在画面占比太小导致,如果是半身像或近摄,这个相似度会更高
2. 文生图+lora换脸
为了解决全身像相似度太低的问题,有一种解决方式是使用SD中的强大的修脸工具——ADetailer。可能大家知道ADetailer能修复崩坏的人脸,但是不知道大家有没有注意到,ADetailer是可以配置提示词的,也就是说,我在修脸的时候,可以用上自己的lora来进行修脸
提示词中,我们去掉人物lora,仅仅使用ADetailer中的lora,我们再试一次
best quality,masterpiece,absurdres,Highly detailed,ultra-fine painting,extreme detail description,Professional,1girl,full body,hair ornament,holding,necklace,orange with white chest pleated skirt,red waistband,red with white waistband,tang style outfits,transparent background,hanfu,tang style outfits,
这样一来,这个美女就和原型很像了,但是你可能也发现了,原型的人物脸型更饱满,而这个美女,是个很明显的锥子脸,虽然更好看了,但是相似度也就降低了,那这个我们有办法解决吗?
当然了,如果对方要求,我就是想要锥子脸,那么到这一步,就够了
3. lora文生图+lora换脸
解决脸型问题,其实也不难,还记得我们之前去掉了提示词中的人物lora的引用吗?其实只要这里也引用lora,情况就会好很多。首先,我们在文生图时,就以我们的人物lora为基准出图,那么脸型一定是相像的,其次,我们再使用ADetailer进行lora换脸,相当于对自己的脸型再做一次换脸,那它的融合度一定是更高的
best quality,masterpiece,absurdres,Highly detailed,ultra-fine painting,extreme detail description,Professional,1girl,full body,hair ornament,holding,necklace,orange with white chest pleated skirt,red waistband,red with white waistband,tang style outfits,transparent background,<lora:iris_v1_000006_0.7-1:0.8>,hanfu,tang style outfits,
4. 文生图+图生图+lora换脸
除了lora文生图以外,我们也可以去掉人物lora来出图,正常绘制美女图,然后通过图生图的ADetailer加lora去做脸部替换,可以通过批量出图,总会有融合度高的脸型。当然了,这种方式也适用于直接使用网图来进行lora换脸
以上就是通过lora来AI出图的几种方式了,我们再做个简单的总结
lora文生图直出人脸占比大的近摄画面相似度高,脸部边缘无融合问题人脸占比小的全身像画面相似度低半身像,特写像文生图+lora换脸解决全身像相似度低的问题可能出现绘制人物与lora脸型等特征不像的问题,Adetailer易出现脸部边缘边界线全身像lora文生图+lora换脸解决脸型不像的问题Adetailer易出现脸部边缘边界线全身像文生图+图生图+lora换脸不要求出图过程,可用任意图片脸部替换Adetailer易出现脸部边缘边界线其他图片脸部替换
六、AI画手的问题
这个问题,从根上来说,是目前AI算法的通病,很难彻底解决,尽管我们会在负面提示词加很多防止手部崩坏的提示词
missing fingers,extra fingers,fused fingers,too many fingers,bad hands,mutated hands,badhandv4
但是你画多了就会发现,并没有什么用,手该崩还是崩,唯一可能好点的可能是某些比较好的模型,对手部训练的比较好,不太容易崩坏 如果你看的足够仔细,你可能也发现了我上面的示例图中,就有手部崩坏的问题。
不管是手部崩坏,还是六指琴魔,解决问题的关键有几个思路:
1. 尽量隐藏手
没错,既然手画的不好,那我们就把手藏起来!有两种方式,要么直接把图片裁切截掉;要么我们可以通过ControlNet的openPose改变人物姿态,让她的手伸出屏幕外
2. 手部优化lora
我个人也收藏了好几个手部优化的lora,有的时候是管用的,有的时候修复的手反而和画面不够融合;并且使用lora优化手,其lora本身很可能会侵入我的整体画面结构,甚至是改变画风
3. ControlNet深度手部细化
4. ADetailer修手
5. 图生图手部重绘
总之,目前还没有解决手部难题的完美方案,只能是多多尝试吧!
其他方式
其实实现AI写真,还有很多方式,但因为我没有亲自尝试,就不再细写
1. EasyPhoto:据说是个非常厉害的插件,最少只要8张照片,就能完成AI写真,但我本人因为电脑配置问题,在训练模型那一步显存就扛不住了,所以没继续尝试2. ComfyUI方式:以上内容都是基于WebUI的AI写真方式,我暂时还没尝试使用ComfyUI进行AI写真,后续准备尝试一下,使用ComfyUI之后,我的电脑甚至可以出SDXL图,很想知道以SDXL来出真人AI写真是什么体验,应该会非常惊艳!
最后做完之后,配合剪映等工具,还可以一键出片炫酷的写真集视频