卷友们好,我是rumor。
关注早的朋友们应该知道,我有个姐妹,她去年回深圳老家了,本来我觉得还ok,还能再约着一起旅游。
谁知道一年多了,我还没出过北京(微笑。
以前有个快乐源泉,就是照她的黑照,但素材库已经好久没新增了。正好最近想学文生图,于是就只能对不起她了。
经过一番折腾,终于有了些效果,发到了B站上,欢迎大家验(三)收(连):
点击文末阅读原文直达B站
下面,我分享一下这次可控生成的步骤,其实非常简单,有一点代码基础就能做。但请谨记,切勿滥用他人的照片,触犯隐私哦。
实现流程
环境部署
这次是基于dreambooth这个算法做的,算法解读请见中森的总结。Github上已经有几个热门的dreambooth实现了,我直接用了我朋友做的库:
https://github.com/CrazyBoyM/dreambooth-for-diffusion
可以直接用他的镜像在autodl上创建实例,也可以部署到自己的机器,我直接用了autodl,创建完登录进去就可以用了。
预处理
我朋友提供了图像裁剪工具,但我建议手动截一下面部,不然自动居中后可能就没了。另外手动处理后记得把图片都保存为.png
格式,不然读不到。
预训练模型下载
如果只用SDv1.5,可以直接:
git clone https://huggingface.co/runwayml/stable-diffusion-v1-5
它的生成风格偏写实,但很多写实照片都很阴间,于是我参考朋友建议,和二次元模型进行了融合,融合比例7:3。
如果要融合权重的话,需要下载这个版本的权重:
https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt
用我朋友的tools/ckpt_merge.py
进行融合,然后再用tools/ckpt2diffusers.py
转换成transformer库可读的版本。
如果要使用新出的SDv2版本,记得把diffusers
库升级到0.9.0
,同样是直接clone下来就能用:
git clone https://huggingface.co/stabilityai/stable-diffusion-2
P.S. 克隆下来之后发现巨大,24个G,直接把目录下的.git
删掉就行,ckpt文件不融合也可以删掉。
但SDv2由于变化较大,很多SDv1的prompt都不适用了,所以我最终还是选择SDv1和二次元权重的融合。
训练与生成
图片和权重都准备好之后,直接用tools/train_dreambooth.py
就可以训练啦,超参数可以用默认的,我语料多,就把学习率调低了点。
对于生成,直接输入自己写的prompt效果会比较差,细节也会比较阴间,比如她去看世界杯这张:
还有更多更阴间的,我自己看了都害怕。
这时候就要开启prompt大法了,我主要在lexica.art
这个网站去搜索相关关键词,最终选出来生成漫威角色的prompt是:
[自定义] as thanos, realistic portrait, symmetrical, highly detailed, digital painting, artstation, concept art, smooth, sharp focus, illustration, cinematic lighting, art by artgerm and greg rutkowski and alphonse mucha
旅游照:
portrait of [自定义], sun glasses, taking a selfie, in front of colosseum, soft focus, 8 k, art by irakli nadar, hyperrealism, hyperdetailed, ultra realistic
最后,其实还是需要很多cherry pick的,大概生成几十张有一张还不错,感觉就是在「搜索模型的记忆」,看我姐妹的脸和哪张模型见过的差不多可以映射上,就会有很好的效果。
当然我认为还跟训练数据数量有关,在搜索prompt时我看过一些AI生成的名人照片,还都不错,但我自己尝试让姐妹跟马斯克握手还是有很大难度,结果都太阴间了。
最最后,欢迎大家投币支持哇!
我是朋克又极客的AI算法小姐姐rumor
北航本硕,NLP算法工程师,谷歌开发者专家
欢迎关注我,带你学习带你肝
一起在人工智能时代旋转跳跃眨巴眼
「我不允许有人还没看过我姐妹跳舞」