还有高手?!SD人物姿态控制—OpenPose姿态检测大战Normal法线贴图

2023 / 9 / 7

还有高手?!SD人物姿态控制—OpenPose姿态检测大战Normal法线贴图

写在最前面

本人没有学过多少计算机视觉的专业知识,只是作为一个SD绘画的使用者根据自己的使用经验写出了这篇对比文章。

本文用到的资源:

  1. openpose-dwpose姿态检测

  2. normal法线贴图(此链接导向Controlnet官网)

  3. pose studio (根据发行商CLIP STUDIO PAINT描述,此程序于2015年停止注册服务,目前仅能通过特殊手段激活。我使用的是特殊手段激活版本,度盘链接 ,下载后解压,按照安装说明操作即可)内有很多姿态预设,相比传统的openpose-editor,这里的编辑更加方便,同时输出的结果还可以在Normal法线贴图中使用。

  4. Anything3.0 (为了保证大家可以自行复现研究,我使用了每个人都可以获取的模型)

控制人物姿态的手段

早期的AI绘图,是没有多少姿态控制力的,我们唯一能控制人物姿态的手段就是【提示词】,输入了【提示词】之后,我们唯一能做的就是不断【抽卡】,直到得到姿势合理画面美观的图片。

但是,随着想要画出的东西越来越多,画面元素的不断增加导致提示词也不断增加,然而AI的注意力又是有限的,所以我们所书写的姿态【提示词】也变得愈发难以在画面中体现出来。

早在Controlnet诞生之前,就有人在图生图中利用自己绘制的,有一定完成度的画稿来控制AI绘制的人物姿态,但这本质上也并非针对姿态的控制,而是一种图生图的转绘。之后Controlnet诞生了,AI绘画的可控性大幅增加,在人物姿态的控制上,也涌现出了以下几种方法:

1. lineart或scribble线条加工

利用已经绘制的线稿来控制人物姿态。

2. depth深度图

这个方法并不推荐,我也极少看到有人用这个方法来控制人物姿态,但是在我学习人物姿态控制的过程中,确实在讨论区看见有人这么做了。测试之后发现随机性实在是太强,根本称不上‘’控制‘’。不过depth深度图似乎和画面的前景后景有关,可能确实有一些特殊的情况,可以使用depth进行姿态控制。

3. segment语义分割

这个方法,与其说是控制画面人物的姿态,不如说是控制画面各个元素的位置,并且仍然具有一定的随机性。

4. Tile分块处理

本质上仍然是图像的转绘,Tile对图像进行模糊化,在此之上AI对模糊图片进行图生图处理,生成出来的图片人物,虽然姿势上能确保高概率与原图片人物相同,但是整个画面受原图片影响会非常大。或许你会说“回送是一个解决办法,但实际上,回送中如果你使用Tile,那么你绝对无法削减原图片的影响,甚至还会增大它。如果你在回送中不使用Tile,同时降低重绘幅度,这或许可行,但概率还真不好说。

5. IP2P(Ininstruction Pix2Pix)语义转绘

IP2P的本质类似于英语中的虚拟语气,常见的IP2P的语法如下(具体语法可以参考官方给出的文档 ):

但是它的过程是随机性的,在结果生成之前,你完全无法知道哪些地方会被AI修改,哪些地方不会。使用IP2P来进行姿态控制,基本上就是把一个现实中有特定动作的人转绘成动漫中的模样。使用下来,我个人觉得偏色很严重,需要一点色彩修复的能力,另外如果你想要的图片效果和你提供的图片效果差距过大,IP2P很可能会乱搞一通。

6. Openpose姿态检测

这个相信大家都很熟悉,随着技术的发展,openpose也出现了针对面部和手部的特化识别,之后还出现了”更厉害“的dwpose(因为在一些动作识别上,dwpose做的并不如openpose,但从最终的总体效果上来看,dwpose还是更胜一筹,所以用”更厉害“)。

7. Normal法线贴图

法线贴图是相对openpose来说更加强势的姿态控制方法。之所以用“强势”来形容,是因为尽管它提供了更精确的姿态控制(甚至能控制人物衣着),但它似乎也会使背景简单化,这在后文的对比中会详细解释。

姿态控制法的“强势”排行榜

canny,lineart,softedge,hed等线条处理>scribble涂鸦转绘>Normal法线贴图>Openpose姿态检测

这个排行榜的意义不是让我们只使用Openpose,而是告诉我们怎样根据自身情况合理选择最佳的姿态控制方法,有时候,Openpose不能处理的复杂动作,前面三种方法都能很好地处理。

先说研究结论:

  1. 在面对复杂动作时,尤其是角色肢体在平面投影上有重叠的情况时,Normal比Openpose更合适。

  2. 在简单动作上,如果你想快速画出想要的姿势,同时也不想反复修缮背景的话,那么建议选择Openpose。如果你愿意用心打磨人物和背景,那么更合理的工作流应该是先用Normal精准地控制人物姿势,此时生成的图片背景较为简单,但没关系,你可以用AI背景移除工具,抠出人物之后,再重新为其添加蒙版,同时重绘蒙版之外的部分,这样生成的图片,可能会存在蒙版边缘的接缝问题,但没关系,你低重绘幅度回送一遍或者两遍,或者用一次Tile,问题就解决了。

  3. Normal的泛用度比Openpose更高,但是使用时必须选择较低的权重(测试表明最好在0.4-0.5之间)。

  4. 没有绝对的孰强孰弱,具体情况还请自行随机应变,这个研究只是为了方便你更快速地确定用什么姿态控制法合适,也是让更多的人知道,在Openpose失效的时候,你还有很多办法来控制人物姿态。

Openpose姿态检测大战Normal法线贴图

测试方法

我将5种姿势(既有简单的也有复杂的)混合在一起,固定以下生图参数:

Steps: 40

Sampler: DDIM

CFG scale: 8

Seed: 3685242425

Size: 540x960

Model: Anything-V3.0

Clip skip: 2

变量仅有提示词和controlnet姿态图,其中提示词仅根据姿态图改变姿态提示词,这样做的目的是让所生成的图像中的人物姿态最大程度地吻合姿态图。

测试组1— —跳跃

使用的姿态图

使用的提示词

flower field,((one yellow-haired girl)),((yellow eyes and hair)),solo,upper-body,run,sailor\*shirt,pleated\*skirt,jumping,close-up,masterpiece,best quality,highres,from\_above,

Openpose-dwpose处理结果和生图结果

Normal-bae的处理结果和生成结果

测试组2— —祈祷

使用的姿态图

使用的提示词

flower field,((one yellow-haired girl)),((yellow eyes and hair)),solo,upper-body,run,sailor\*shirt,pleated\*skirt,standing,pray,close-up,masterpiece,best quality,highres

Openpose-dwpose处理结果和生图结果

Normal-bae的处理结果和生成结果

测试组3— —撑腰

使用的姿态图

使用的提示词

flower field,((one yellow-haired girl)),((yellow eyes and hair)),solo,upper-body,run,sailor\*shirt,pleated\*skirt,Hands on waist,close-up,masterpiece,best quality,highres

Openpose-dwpose处理结果和生图结果

Normal-bae的处理结果和生成结果

测试组4— —躺着

使用的姿态图

使用的提示词

flower field,((one yellow-haired girl)),((yellow eyes and hair)),solo,upper-body,run,sailor\*shirt,pleated\*skirt,lying in the flowers,close-up,masterpiece,best quality,highres,from\_above,

Openpose-dwpose处理结果和生图结果

Normal-bae的处理结果和生成结果

测试组4— —躺着

使用的姿态图

使用的提示词

flower field,((one yellow-haired girl)),((yellow eyes and hair)),solo,upper-body,sailor\*shirt,pleated\*skirt,sitting,close-up,masterpiece,best quality,highres,

Openpose-dwpose处理结果和生图结果

Normal-bae的处理结果和生成结果