stable-diffusion 生成同一人物不同动作的尝试(基础动作融合)

开发游戏中,美术资源是一大块成本。而游戏中包含很多角色,每个角色需要表现出不同的动作,因此一直在研究的一个课题“是如何用AI去生成同一个角色的多种动作”,此前也尝试过不少方法,研究之路继续进行,以下是一些以前的研究连接。

本次是尝试修改stable-diffusion的生成过程,使得模型可以记录一部分角色信息,从而为后续生成同个角色的其他动作的图像提供可能性。

效果展示

如下图所示,左图是用sd模型+controlnet生成的一张角色图(图中的“特征图”),而如果不采用任何新方法,使用同样参数+另外的controlnet姿态,会生成下图(图中”动作A未融合“)的样式,角色样貌与“特征图”会有一些差异,例如人物衣服的颜色有较大的不同。使用新方法生成的图片如左上图所示(图中”动作A特征融合“),可见角色形态与”特征图“更为接近。

下图是另一个例子,使用新方法后,人物的衣服和裙子样式、头上的发饰都更接近原始的”特征图“,更像是同一个角色的不同动作。

原理说明

要做到”同一角色“,就需要把角色的信息传递给生成模型,目前会有比较多的想法,待一步步尝试。而本文所使用的方法,因实现较为简单,因此先做个实验。如下图所示,展示了diffusion+controlnet的生成过程,在每一个去噪步骤中,都会输入噪声、prompt和openpose姿势图。

有一个简单办法可以保留部分”特征图“的信息,如下图所示,在前几个生成步骤中,使用同特征图的参数,而在后几个步骤中,再改变姿态图。从中可以预想,前几步的生成过程中”特征图“与”新图像“遵循着同样的步骤和参数,相当于”特征图“的一部分生成过程信息传递到”新图像“中。

代码实现

为了实现这个过程,简单修改了stable-diffusion-webui中controlnet插件的代码(插件代码地址:https://github.com/Mikubill/sd-webui-controlnet),在下方新增identity_reserve_step、is_save_identity、is_load_identity三个选项。在生成特征图时,勾选is_save_identity,那么程序会记录生成过程中一些信息;在生成新图像时,勾选is_load_identity,以读取之前保存的信息;identity_reserve_step是一个控制项,指定在前多少个去噪步骤中使用保存的信息。

出于实验性质的考虑,我们此处并不考虑代码质量,仅仅关注实现功能。若后续得到很好的实验结果,再做代码改进。本次主要改动controlnet插件script/hook.py中的代码,因为它包含对unet改动的相关内容。

先是定义两个全局变量,一个用于计数,一个用于保存信息。注意,此处过多考虑代码质量,仅做实验展示。

#identity
identity_count=0
identity_dict = {}

然后修改cfg_based_adder方法,原始unet和controlnet结果相加部分会在这里,两处”##### identity start #####“和”##### identity end #####“中间的内容为插入的代码,具体作用是保存生成信息以及恢复。代码中写死了17、20等数值,它们代表每一次去噪中unet与controlnet结果相加的次数,以及20次去噪步骤。

    def hook(self, model):
        ……
        def cfg_based_adder(base, x, require_autocast, is_adapter=False):

            ##### identity start #####
            global identity_count
            global identity_dict

            param = self.control_params[0]
            
            per_step_length  = 17 #没有反向词17,有反向词34(不完全准确)
            identity_index = identity_count % (20*per_step_length) #20个step

            
            if identity_index == 0:
                print("param.identity_reserve_step",param.identity_reserve_step)
                print("param.is_save_identity",param.is_save_identity)
                print("param.is_load_identity",param.is_load_identity)

            identity_count = identity_count+1
            ##### identity end #####

            (……原始内容……)

            ##### identity start #####
            if  param.is_save_identity == True:
                print("save identity_index " + str(identity_index),identity_count)
                identity_dict[identity_index] = base + x


            if  param.is_load_identity == True and identity_index < per_step_length*param.identity_reserve_step:
                print("read identity_index " + str(identity_index),identity_count)
                return identity_dict[identity_index]
            ##### identity end #####

            return base + x

为了在界面上增加三个参数,修改controlnet.py,增加三个UI控件。

class Script(scripts.Script):
    ……
    def uigroup(self, tabname, is_img2img):
        ……
        with gr.Row():
            identity_reserve_step = gr.Slider(label="identity_reserve_step", value=default_unit.identity_reserve_step, minimum=0.0, maximum=20, interactive=True)
            is_save_identity = gr.Checkbox(label='is_save_identity', value=default_unit.is_save_identity)
            is_load_identity = gr.Checkbox(label='is_load_identity', value=default_unit.is_load_identity)

而相关参数传递涉及较多处代码,这里仿照其他参数的写法,修改了相应的文件,修改内容如下。

更多效果

下图展示更多的生成效果,图中展示两个动作,可见用新方法得到的图像与第一张图更加接近,长袖、长裙、卷发这些元素得到体现。

下图是另一个实例,可见的裙子样式和颜色与原图更加接近。

不足之处

该方法也有一些不足之处,如下所示,当动作变化较大时,一个正面一个侧面,虽说也更像同一个角色,但拟合效果就打了折扣。

关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

👉[[CSDN大礼包:《StableDiffusion安装包&AI绘画入门学习资料》免费分享]]安全链接,放心点击

1.stable diffusion安装包

随着技术的迭代,目前 Stable Diffusion 已经能够生成非常艺术化的图片了,完全有赶超人类的架势,已经有不少工作被这类服务替代,比如制作一个 logo 图片,画一张虚拟老婆照片,画质堪比相机。

最新 Stable Diffusion 除了有win多个版本,就算说底端的显卡也能玩了哦!此外还带来了Mac版本,仅支持macOS 12.3或更高版本

在这里插入图片描述

2.stable diffusion视频合集

我们在学习的时候,往往书籍源码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,一步步带你入坑stable diffusion,科学有趣才能更方便的学习下去。

在这里插入图片描述

3.stable diffusion模型下载

stable diffusion往往一开始使用时图片等无法达到理想的生成效果,这时则需要通过使用大量训练数据,调整模型的超参数(如学习率、训练轮数、模型大小等),可以使得模型更好地适应数据集,并生成更加真实、准确、高质量的图像。

在这里插入图片描述

4.stable diffusion提示词

提示词是构建由文本到图像模型解释和理解的单词的过程。可以把它理解为你告诉 AI 模型要画什么而需要说的语言,整个SD学习过程中都离不开这本提示词手册。

在这里插入图片描述

5.SD从0到落地实战演练

在这里插入图片描述

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名SD大神的正确特征了。

这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值