魔搭ModelScope社区 14小时前
同“西游”,见“万相”冠军|皮影西游LoRA创作分享
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了算法工程师Diohim基于Wan2.1模型,创作皮影戏风格《西游记》LoRA模型的全过程。从主题选取、数据集构建、模型训练优化等方面,详细介绍了作者的经验与心得。通过对数据集的精心构建、训练参数的调整以及迭代优化,最终成功生成了具有皮影戏风格、人物一致性,且场景泛化性良好的视频作品。作者还分享了在训练过程中遇到的问题及解决方案,为AIGC爱好者提供了宝贵的参考。

💡 灵感来源于中国传统文化,作者选择皮影戏与《西游记》相结合,旨在传承和发扬传统文化艺术,并通过AIGC技术降低创作成本。

🎬 数据集构建方面,作者通过与皮影动画艺术家合作,获取了高质量的皮影戏动画素材。为了提高泛化性,作者对画面进行裁剪、镜头跟踪和分镜处理,并采用Gemini 2.0进行细致的打标,确保标签的准确性和多样性。

⚙️ 在模型训练方面,作者采用LoRA结构,并针对性地调整了训练参数,如提高模型理解能力、减少显存占用、增加训练稳定性、加速收敛等。通过迭代优化,最终训练出人物一致性高、场景泛化性好的皮影戏风格视频模型。

2025-06-16 18:01 浙江

冠军作品-创作皮影西游LoRA模型的全过程

冠军作品

模型

diohim-皮影西游记模型(AI西游记)

链接

https://www.modelscope.cn/models/diohim/Puppet_Show_of_Journey_to_the_West

部分作品展示

1、自我介绍 

大家好,我是贯一(ID:Diohim),职业是算法工程师,非常喜欢AIGC图像视频(也训练过文本、多模态模型),目前发布的AIGC模型不多,也正在持续迭代中,欢迎各位与我交流。

非常感谢魔搭举办本次比赛,让我有此契机,深入了解视频模型训练、Wan-2.1,对西游故事也有新的理解。我本次是有两个参赛模型:皮影风格和黏土风格。接下来我将从主题选取、数据集构建、模型训练优化三方面,分享我个人的心得体会。这也是我首次训练视频LoRA,有许多不足之处,希望各位不吝批评指正(鞠躬)。

2、灵感来源 

足够的中国传统风格:皮影+西游记(故事传统+场景传统

中华文化瑰宝非常丰富,以往大部分“数字艺术”技术仅是复制,如果能借助生成模型进行创作,更接近“传承”的本质。很多民间传统文化艺术因其社会性成本较高而难以传承,甚至逐渐消失,如果能用相对较低成本的大模型进行创作,将会是一件非常有趣、也有意义的事情。这也是我一直在关注和喜欢做的事。

既然是视频模型,而不是静态图像,那么可以尝试的方式就是两类:1是将本身偏静态的画面,让它动起来,例如水墨画、剪纸、壁画;2是将原本就是动的画面,用AI再次创作,例如戏曲、木偶戏(如爍爍俊)、皮影戏。

小时候经常看皮影戏,其动作、光影等画面呈现都非常中式而有趣,但现在却很少看到,那么能不能做一个皮影戏的场景、结合传统《西游记》故事呢?

《西游记》-> 多人物 

西游记中的人物形象鲜活,不同人物各有特色,我希望能够有多人物,这样才是“西游记”。

较大的动作幅度

无论是孙悟空的七十二般变化,或是天兵天将、妖魔鬼怪、佛祖神仙之间的打斗,动作都是千变万化的,那么能不能创作出一个生成动作幅度较大的模型,这也是视频模型相对图像模型的优势所在(同时也是难点)。

《西游记》复杂的场景 

九九八十一难里,师徒一行走过千山万水,有多样而丰富的背景和场景,因此我也尽可能追求有较复杂的场景。

中文!发挥UMt5优势

Wan2.1首次是首次采用UMT5作为文本编码的开源视频大模型,这意味着你可以直接输入中文,并且理解能力较好。不像采用只支持英文的clip模型,也不像t5或mT5虽然支持中文,但理解能力不好。同时,对于西游记场景,有非常多中文词汇也不太好翻译成英文(金箍棒、九齿钉耙、猪八戒、毗卢帽、九环锡杖、袈裟、白龙马、美猴王)。如果要翻译成英文,大概会有3种方式:

-英文意译

Monkey King、Monk Pig(猪八戒)、White Dragon Horse

因为非常意译,容易跟已有预训练模型中的理解有语义冲突,孙悟空Monkey King还好,因为出现的内容比较多,但西游记因为其他场景的训练数据不多,容易造成语义污染,模型需要先把这个词原来的意思忘掉,再学习新的语义,有点周折,这也是dreambooth要加上一个偏僻的新词的原因,起到正则化的作用,避免语义污染。这种翻译方式可能还容易有歧义,有人也称猪八戒为Pigsy、Pig,那可能模型就认不出来了,除非你增加很多数据,这又会增加训练成本。

-偏僻的新词

例如zbj(猪八戒)、blm、swj(沙悟净):

不太直观,不看注释,swj我都不知道是啥。

-拼音

Sun Wukong、Zhu Bajie

对于模型看来,可能类似2,而且既然都是拼音了,不如直接用中文。

因此,对于西游记场景,不如直接、干脆用中文。

当然我也尝试对比过,发现中文确实好一点,或者说在同等方便程度下,效果好一点。当然最后有一些人物会带有拼音,这是gemini打标自带的,我也懒得改。

3、数据构建 

我对LoRA的模型结构没有太多调整,就是用普通的LoRA,所以更多的是从数据集构建、训练参数方面做调整。

3.1思路皮影戏我不会制作,只会看🤣(当然还有一键三连)。那么我要么通过文生视频、文生图&图生视频来创作,要么找已有的视频来学习。前者我尝试了目前各类工具和模型,效果都很差,可能是皮影戏+西游记场景在日常生活中/预训练数据中比较少见。那么我尝试寻找已有的大神做的视频。

3.2获取数据集这其中,我关注已久的博主——王利民老师(ID:皮影动画王)制作的皮影戏动画之精美无与伦比,也数次斩获国际大奖。因此我联系了王利民老师,表明来意,征求其许可,毕竟我认为模型的训练数据来源,应当充分尊敬创作者本人。王老师也非常慷慨同意了,在此再次感谢王利民老师!(其实这也表明,与其直接拿来训练,与创作者本人礼貌沟通,是可以获得支持的,模型训练者也可以更放心大胆去专注模型本身)

3.3数据集画面制作多分辨率:由于原视频画面是固定横向比例的,有广阔的背景,为了模型学习到更丰富的细节,要么把训练时的分辨率开得很大(成本太高,而且有背底模的训练分辨率),那么把训练数据放大,让画面有更多细节占据,我选择了后者,所以首先是对画面进行裁剪,让人物主体比较占据画面。有时候还需要对画面人物的移动做镜头跟踪,相当于人物本身没有太多位移(但背景在变)。而对于本身整体画面比较广阔的场景,我希望模型能学习到精美的场景,就会给于较宽的比例,这时候人物的描述不会非常清楚,重点描述场景。

多样化:为提高泛化性,同一人物不同背景、穿着,不同动作尽可能凑两三个。

分镜:最开始我视频长度不限,后面发现太长的视频会极大增加训练资源的消耗,同时得到的效果很差,因此我按照分镜的思路,把动作进行拆分,例如孙悟空先从右上方翻跟斗跳入画面,先跳到左边打败了妖怪,然后跳到右边打败了妖怪,再从后脑勺揪出汗毛变出小猴子,这就拆成了3个视频,这也符合分镜的思想。我的个人想法是:本身这个分镜动作是客观的,只不过连起来人类会赋予更多主观的情节和意义,但这不是现有模型或1.3B参数量下的LoRA能直接理解的。

3.4打标我写了脚本,把不同视频都做了抽帧。然后用gemini 2.0进行打标。

    首先不同视频各抽一帧,让gemini总结他们的共同点,之后会把这些词都加在各个数据集上(无外乎就是“皮影风格”、“剪影”、“平面”、“镂空雕刻工艺”这几个词),后面也并不是全部都是一样的词,而是会适当替换掉同义词,以免模型跟这个词绑定,而是能更多理解到其语义。

    然后针对每一个数据集,分别抽帧,告诉gemini这是个视频的几个画面,从视频连贯的角度描述视频整体的内容。

    最后手工矫正一下,尤其是一些特有的名词,以及一些画面的“文学含义”,太文学模型难以理解(我都难以理解🤣)。

在打标的过程中,由于画面细节较多,所以我尽可能细致地打标(标签解耦),否则模型容易学不到东西还过拟合,同时也能提高泛化性。(尝试过粗标签,很难拟合)

打标时,我也想到几种方式,因为这不是静态画面,既有变化的画面,还有人物的动作。那么应该怎么描述?容易想到:

先画面,再动作

先动作,再画面

先总后分(总的时候动作和画面一起,分的时候动作和画面也一起)

先重点后非重点

我分别做了尝试,对于1、2来说,如果画面比较丰富、或动作比较丰富,在靠后的文字描述里就学不太清楚了,不知道是不是我方法的问题;对于3来说,训练时倒没什么太大问题,但在推理时,用这个方式就会出现重复的内容,一个人会变成两个,场景也会重叠,这是一个普遍的现象,或许是模型就是线性地理解,先总后分,本质上内容就是出现了两次。最后经过对比,4的效果比较好,训练和推理的prompt也比较一致。

其他:

    水印的处理:训练时加上水印prompt,推理时去掉,就去掉了水印,这得益于模型的理解能力。

    武器的处理:在答辩时,经老师提醒,因为西游记武器、法器的特殊性,最好是能单独拎出来学习,我这个版本没有单独拎出来,所以孙悟空手握金箍棒时总是在舞棍,因为缺少手握不动的数据,也没有单独把金箍棒拎出来,每次有“金箍棒”这个词时,模型都能看到手里舞棍的孙悟空,所以可能误以为这就是该词的意思。这也是我这个版本的不足之处。

最终数据集数量:1:1 (1条)、2:1(1条)、3:4(28条)、4:3(13条)、16:9(13条),不同分辨率分别归到不同文件夹里。

为直观起见,展示数据集例子:(可以看到标签非常详细,我也没有太多人工修改)

    皮影风格,平面,半身,剪影,镂空雕刻工艺,侧面,关节连接感。

    画面主体是唐僧骑着马正在行走,面朝左边,唐僧头戴一顶精致的僧帽("毗卢帽"),毗卢帽顶部竖立着一个细长的、尖顶的金色装饰物。帽檐为红色并有金边,翘起呈现船状,有云龙、如意等佛教元素雕刻纹理,毗卢帽两侧附有飘带,飘带上也有精致的雕刻纹理。

    唐僧身披一件华丽的红色锦襕袈裟,袈裟的表面织满了金色的网格状纹路(也称"田相纹",是佛教僧服特有的标志性图案),在月光下显得熠熠生辉。袈裟的边缘镶有深色的滚边,更显庄重。袈裟宽大而自然地垂落,覆盖着他的身体,只露出内里一袭淡黄色的僧衣领口,细节之处可见其衣着的层次感。

    唐僧手握"九环锡杖",锡杖顶部有多个金环,杖身为红色。

    唐僧端坐在马背上,身姿挺拔而稳健,双手置于身前,虽然握缰的细节被遮挡,但能感受到他正轻轻驭马前行。他的姿态透露出一种历经风霜的沉稳和前往西天的坚定信念。

    白马位于画面的左下方,与唐僧相伴而行。白马呈现出神骏的姿态,身体线条流畅而富有力量感。浅棕色的毛色上,精心雕刻着白色的纹路,这些纹路勾勒出马匹健硕的肌肉和飘逸的鬃毛,极具艺术性。

    马头朝向前方,圆睁的眼睛充满了灵性,张开的嘴巴似乎在无声地嘶鸣,仿佛也感受到了月夜的静谧与庄严。

    白马佩戴着华丽的马鞍和辔头。马鞍上装饰着精致的图案和金色的垂坠,显得富丽堂皇。红色的缰绳连接着马头和唐僧的手,象征着他们之间的羁绊。马的头部和耳朵处还装饰着花朵状饰物,耳朵处的装饰物附有流苏,更添一份祥瑞之气。

    画面的背景被一轮硕大而明亮的满月所占据,月亮散发出柔和而皎洁的光芒,将整个画面笼罩在一片宁静而神圣的氛围之中。月亮的表面呈现出淡淡的纹理,更显真实感。

    月亮的周围是深邃的蓝色夜空,色彩由深至浅地渐变,营造出夜晚的深邃感和层次感。

    整个画面弥漫着一种庄重、宁静而又充满神圣感的氛围。皎洁的月光洒在唐僧和白马身上,更显其圣洁与不凡。唐僧端坐在白马上,神情肃穆,展现出他不畏艰险、一心求取真经的坚定意志。白马的造型神骏,也象征着旅途的艰辛与陪伴。皮影戏独特的艺术表现手法,通过精细的镂空、流畅的线条和庄重的色彩,将唐僧师徒西行路上的场景刻画得令人印象深刻。

    4、模型训练 

    训练参数1. 提高模型理解能力:多分辨率,并按照数据集质量进行不同repeat

    [[directory]]

    path = '/root/d5/34'

    num_repeats = 20

    ar_buckets = [[576768]]

    resolutions = [[576768]]

    [[directory]]

    path = '/root/d5/43'

    num_repeats = 20

    ar_buckets = [[768576]]

    resolutions = [[768576]]

    [[directory]]

    path = '/root/d5/169'

    num_repeats = 16

    ar_buckets = [[1024576]]

    resolutions = [[1024576]]

    [[directory]]

    path = '/root/d5/11'

    num_repeats = 16

    ar_buckets = [[768768]]

    resolutions = [[768768]]  

    [[directory]] 

    path = '/root/d5/21' 

    num_repeats = 20 

    ar_buckets = [[1024512]]

    resolutions = [[1024512]]

    2. 减少显存:分块交换

    blocks_to_swap

    = 28

    ,也就是和内存之间进行交换,这取决于模型是否支持,而Wan2.1是支持的。3. 减少显存:内存增量分配:

    PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

    4. 增加训练稳定性:帧分桶、平均抽帧

    frame_buckets = [1, 25, 33, 65, 97, 113, 153, 169, 193, 225, 257, 265]

    因为对于皮影戏来说,关节连接的动作有快有慢,并不是那么高的帧率,而且我的数据集的帧率基本一致。如果采用向前或向后截断,由于我的数据集是手工裁剪,本身没有冗余的前后画面,反而会因为截断导致画面和prompt对不上,因此在diffusion-pipe脚本上增加了average平均抽帧方法。

    5. 加速收敛:采用Prodigy优化器(lr = 1 betas = [0.9, 0.99] weight_decay = 0.0),而不是AdamW或AdamW8bit。

    6. 其他:rank = 64、warmup_steps = 16、gradient_accumulation_steps = 4 、 micro_batch_size_per_gpu = 1

    7. Loss与资源消耗

    训练集的Loss和校验集的Loss的变化趋势是相同的,表明没有直接性的过拟合。

    最后在它快翘起来的时候我立马给它停了!虽然校验集的Loss也翘起来了,这表明模型可能还在学习,不过我目测差不多了,大概是4090*2训练了11h,总共10个epoch,这比我预想的资源消耗要低很多,毕竟这可是视频大模型,这也得益于Wan2.1的3D因果VAE,不需要完全独立编解码每一帧,会捕捉到其不同帧之间随时间的变化关系。

    内存占用:20k

    显存占用:初始占用19.5k,第50个epoch时开始占用22k

    8. 迭代优化

    相对于固定的参数,以上的经验大多也是我迭代、优化模型的结果。这里简要讲一下我的优化思路:

    -对于优化器、学习率这些模型的超参数:调了又调,改了又改,最后发现不如直接Prodigy

    -对于

    blocks_to_swap

    、batch_size:能开多大开多大(其实也就是1)-对于prompt:这是我优化得比较多的,因为我是第一次炼视频模型LoRA没啥经验,所以我刚开始训练时,每一个epoch我都保存下来,后面固定参数进行横向、纵向测试:即对于同一个提示词,分别打印其在不同的epoch里的输出,发现一些有意思的现象:

    尽管有些标签没打上,而模型也可以学习到,但它学习的过程比较曲折:

    5、成果展示 

    总而言之,以上是我的尝试过程,希望对于像我一样的新手,可以从我的“翻车”经验中少走一些“弯路”。最后展示一下成果,分为两方面,1是训练集的场景,一般还可以(毕竟经过了横纵向的prompt优化);2是大改场景,打印训练集里未曾出现过的画面,来测试其人物一致性、不同场景的泛化性。

    1. 训练集复杂场景

    中国皮影戏风格,平面,剪影,侧脸,全身,关节连接感。

    画面左边是孙悟空("行者孙"服饰),他有着猴子的面孔,头戴金箍,身穿黄色带花朵花纹的服装,脚穿靴子。

    孙悟空双臂后摆,其中一只手拿着金箍棒,右腿前屈,左腿后蹬,重心降低,身体微向前探,做出充满动感的对峙姿势,孙悟空面向右边,头往后仰,然后身体前倾,从嘴里猛地喷出一长串火焰。这股火焰迅速地横跨画面,直冲向右侧地面上躺卧着的白骨精。白骨精穿着华丽的服饰,头戴繁复的头饰,有两根竖起的金色雉鸡翎。

    在火焰接触到白骨精时,白骨精的身体开始着火。

    画面的背景古旧的、带有纹理的纸张,有朦胧、风格化的山峦剪影,层叠起伏,营造出一种深远或险峻的氛围。

    天空上方边缘有一些云纹图案。

    人物脚下的地面是深色的、不平坦的岩石或焦土区域。

    2. 泛化性测试这些是原始数据集所没有的场景,人物是一致的,而背景、动作不同。可以看到在动作较为复杂的大闹天宫里,效果还不是很好,但基本的场景下的动作相对还比较连贯。

    出乎意料的是,在雪山、森林、沼泽地、沙漠里的比较广阔的场景里表现还不错。雪山的雪的纹理、地面人物影子,以及背后雪山的线条;森林的绿色透光的荧幕效果、大树的纹理;沼泽地人物在水面踩踏的涟漪,这些雪山、森林、沼泽在训练集中都是没有的,表明了Wan2.1强大的模型能力。

    而且这些几乎都是一次生成的结果,并没有太多抽卡,表明模型的稳定性还可以。

    以上可以从ModelScope的页面直接看到:欢迎各位进行尝试,也可以在评论区将遇到的问题反馈给我。https://modelscope.cn/models/diohim/Puppet_Show_of_Journey_to_the_West,

    点击阅读原文,即可跳转品牌馆查看更多~


    👇点击关注ModelScope公众号获取

    更多技术信息~

    阅读原文

    跳转微信打开

    Fish AI Reader

    Fish AI Reader

    AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

    FishAI

    FishAI

    鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

    联系邮箱 441953276@qq.com

    相关标签

    皮影戏 西游记 LoRA模型 AIGC 模型训练
    相关文章