书画家点赞!基于飞桨绘制中国水墨山水画

项目简介
水墨画是中国画的一个分支,水墨山水就是纯用水墨不设颜色的山水画体。其相传始于唐,成于宋,盛于元,明清两代有所发展。作画讲究立意隽永,气韵生动,形成了整套以水墨为主体的表现技法。其笔法糸以勾斫、皴擦、点染为主导,长于结构和质感的表现;其墨法糸于墨的浓淡干湿,泼破积烘为主导,“水晕墨章”、“如兼五彩”的效果,长于体积和气韵的珍现。[7]
AIGC(AI-Generated Content,AI 生成内容)是一种新型的内容创作方式,其利用扩散模型、生成对抗网络、大型预训练模型等人工智能技术,对已有数据进行学习和模式识别,以适当的泛化能力生成相关内容。[8]中国水墨山水画算的上中国文化的瑰宝。最近 AIGC 技术这么火,碰巧家中有位长者亦石[1]画得一手好山水,那么就来看看,当中国水墨山水遇上 AIGC,模型学的如何,画得可有意境。本文使用 shanshui_style 和 shanshui_gen_style 两个模型,利用飞桨的 PaddleNLP 的 PPDiffusers 中的 Textual Inversion[3]技术学习画作的风格,预训练模型为 runwayml/stable-diffusion-v1-5。
megemini/shanshui_style 该模型可以生成水墨山水画。
m egemini/shanshui_gen_style 该模型可以生成水墨山水画的具像图片
megemini/shanshui_gen_style 模型的来历:
笔者看到官方例子[4]中的 StableDiffusionMegaPipeline 有个 img2img,出于好奇,就用水墨画作为输入,结果就是类似下图中 megemini/shanshui_gen_style 风格的图片。当时,确实是有点被震惊,感觉很像是水墨画的一种具像,有种中西艺术揉合的样子,然后就用这些由水墨画生成的图片,又训练了 Textual Inversion 的 style,最后就有了 megemini/shanshui_gen_style。
来看看这两个模型的表现如何:
案例一
Model: megemini/shanshui_style
Prompt: A fantasy landscape in < shanshui-style >

案例二
Model: megemini/shanshui_style
Prompt: A fantasy landscape in < shanshui-style >

案例三
Model: megemini/shanshui_style
Prompt: A fantasy landscape in < shanshui-style >

案例四
Model: megemini/shanshui_gen_style
Prompt: A fantasy landscape in < shanshui-gen-style >

案例五
Model: megemini/shanshui_gen_style
Prompt: A fantasy landscape in < shanshui-gen-style >

案例六
Model: megemini/shanshui_gen_style
Prompt: A fantasy landscape in < shanshui-gen-style >

展示一下当时震撼到我的图(runwayml/stable-diffusion-v1-5 生成):
原图

生成(并用于此模型的训练)

Prompt:A fantasy landscape
原图

生成(并用于此模型的训练)

Prompt:A fantasy landscape
原图

生成(并用于此模型的训练)

Prompt:A fantasy landscape
原图

生成(并用于此模型的训练)

Prompt:A fantasy landscape
原图

生成(并用于此模型的训练)

Prompt:A fantasy landscape,trending on artstation
如上图所示,第一张生成的图片上面的文字并非真的是通顺的文字,但是,其风格学习能力已经非常惊人。我将这些图片发给亦石老师,请其帮忙评价,他先是发问:“这画是谁的作品?”。当得知这些作品是基于飞桨实现绘制时,他立马发来 5 个大拇指表情。接下来,就看看怎么一步步训练这些模型,并生成图片。项目已经发布在 AI Studio 上,欢迎一起交流学习。
链接
https://aistudio.baidu.com/aistudio/projectdetail/6103948
水墨山水画之 shanshui_style 模型
模型训练
数据
这里我将家人的一些水墨画放到了项目中的 ./train_shanshui/ 目录下面 (传播时要注明作者哦~),您也可以自己添加自己喜欢的画作。

工具
本项目使用的是 Textual Inversion,PaddleNLP 的 PPDiffusers 封装了 train_textual_inversion.py,可以很方便地调用。
方法
这里学习的是风格,也就是利用模型学习水墨山水画的风格。
预训练模型
这里用的是 runwayml/stable-diffusion-v1-5。万事具备,只需一行命令就可以训练模型了,训练之前记得要安装必要的包。
几个主要的参数:
模型预测
模型预测利用 PPDiffusers 的 StableDiffusion Pipeline。这里注意,要在 prompt 中加入训练阶段 placeholder_token 参数设置的 token <shanshui-style>。另外,生成图片的分辨率越高,貌似生成的图片质量越好。

水墨山水画具像图之 shanshui_gen_style 模型
模型训练
数据
这里需要利用 Stable diffusion 的 img2img,将之前用到的水墨画先生成具像图,作为此模型的训练数据。

工具
同 shanshui_style,这里依然用的是 Textual Inversion,PaddleNLP 的 PPDiffusers 封装了 train_textual_inversion.py。
方法
同 shanshui_style,这里学习的是风格,也就是利用模型学习水墨山水画具像之后的风格。
预训练模型
同 shanshui_style,这里用的是 runwayml/stable-diffusion-v1-5。这里单独介绍一下如何用 img2img 生成图片:

只需要将 ./train_shanshui/ 目录下面的图片通过上面的 img2img 方法生成具像图片,然后保存下来即可。这里已经提前生成好了,保存在 ./train_shanshui_gen 目录下。您可以直接使用,也可以换个 prompt 重新生成一下 ~有了这些图片,就可以训练 shanshui_gen_style 模型了,方法跟 shanshui_style 一样。
模型预测
同样,模型预测利用 PPDiffusers 的 StableDiffusion Pipeline。这里注意,要在 prompt 中加入上面 placeholder_token 设置的 token < shanshui-gen-style >。

HuggingFace 模型与应用
AI Studio 项目详细介绍了如何在 AI Studio 中使用 HuggingFace[5],有需要的同学可以看看。该项目提供了一个可以将模型上传到 HuggingFace 的方法:**upload_lora_folder
链接
https://aistudio.baidu.com/aistudio/projectdetail/5513258
使用前请确保已经登录了 HuggingFace Hub!
虽然名字是 lora 相关的,但是没关系,模型上传之后手动修改一下 Model card 即可。
这里已经将两个模型上传上去了:
模型 megemini/shanshui_style 可以生成水墨山水画。
模型 megemini/shanshui_gen_style 可以生成水墨山水画的具像图片。
另外,我在 AI Studio 上建了相关的应用,即如何使用 Gradio[6]自建应用[9]:https://aistudio.baidu.com/aistudio/projectdetail/6103948
又可以水一期的话题了,并且操作起来很简单。总之,多看多学多试。欣赏别人的 AIGC 成果,远没有自己摸索来的有成就感,不多说了,快来试试吧!
参考资料
[1] 亦石
https://baike.baidu.com/item/%E4%BA%A6%E7%9F%B3/18606991?fr=aladdin
[2]【飞桨黑客松】AIGC - DreamBooth LoRA 文生图模型微调, https://aistudio.baidu.com/aistudio/projectdetail/5513258
[3] Textual Inversion 微调代码, https://github.com/PaddlePaddle/PaddleNLP/tree/develop/ppdiffusers/examples/textual_inversion#textual-inversion-%E5%BE%AE%E8%B0%83%E4%BB%A3%E7%A0%81
[4] Community Examples,https://github.com/PaddlePaddle/PaddleNLP/tree/develop/ppdiffusers/examples/community#community-examples
[5] HuggingFace, https://huggingface.co/
[6] gradio, https://gradio.app/docs/
[7] 水墨山水画,https://baike.baidu.com/item/%E6%B0%B4%E5%A2%A8%E5%B1%B1%E6%B0%B4%E7%94%BB/4728942?fr=aladdin
[8] AIGC:从入门到精通, https://zhuanlan.zhihu.com/p/610229253
[9] 【Hackathon 4th AIGC】当中国水墨山水遇上 AIGC,https://aistudio.baidu.com/aistudio/projectdetail/6103948
评论