当前位置:   article > 正文

基于云服务器使用DreamBooth训练主体_ckpt2diffusers.py

ckpt2diffusers.py

资源整理

参考教程:StableDiffusion/NAI DreamBooth自训练全教程 - 知乎 (zhihu.com)

云服务器平台:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL

镜像链接:CrazyBoyM/dreambooth-for-diffusion/dreambooth-for-diffusion

代码仓库:CrazyBoyM/dreambooth-for-diffusion: AIGC模型训练工具箱 (完整封装、一体化训练stable diffusion, 可训练定制自己的独特大模型风格、人物,开箱即用,内含详细教程)


话不多说,结合我看的教程,对我自己的训练过程进行一个具体的记录。

环境搭建

根据我之前的文章《云服务器平台AutoDL--基本介绍与使用感受-CSDN博客》,无需自己搭建环境,直接在AutoDL平台选择一个3090机器拉取镜像,镜像链接(其中包含如何使用的视频教程)如下:CrazyBoyM/dreambooth-for-diffusion/dreambooth-for-diffusion: 首个完整封装、一体化训练stable diffusion dreambooth的镜像环境,可训练定制自己的独特大模型风格、人物,开箱即用,内含详细教程。 - CG (codewithgpu.com)

创建的实例如下:

(因为我训练了几次,每次的参数、训练内容都不太一样,为了保留过程,我分开在多个机器上进行了训练,所以有好几个实例)

其中每个服务器实例的具体配置如下:

图中的实例根据需求对数据盘进行了150GB的扩容

在上述镜像中,已经直接将所有需要使用的命令写在了文件夹下的“运行.ipynb”文件中。

一些基本的操作(文件夹位置的移动、工作路径的切换...)在这个.ipynb文件中已经描述的很清楚了,本文不再赘述。

根据教程所述,在拉取的镜像中已经包含了两个官方提供的模型,如下图所示。

其中,nd_lastest.ckpt用于二次元图像训练,v1-5-pruned.ckpt用于三次元图像(偏写实风格)训练。

虽然但是,在我拉取的镜像中并没有用于三次元训练的模型文件,然后我又去hugging face上进行了下载和上传。

下载地址:runwayml/stable-diffusion-v1-5 at main (huggingface.co)

这个写实风格的模型文件因为参数比较丰富,因此较大,一共有7.7G,上传起来比较缓慢。

hugging face似乎是有着大用处的,以后有时间一定好好研究一下!

基于此,我分别进行了二次元图像和三次元图像的训练,接下来分别进行讲解。

二次元图像训练

数据集准备

互联网图像搜集,这里就使用了比较可爱的海绵宝宝形象。

使用镜像中提供的程序将图像剪裁成512*512的大小。

模型文件转换

转换ckpt检查点文件为diffusers官方权重,转换二次元风格模型:

  1. !python tools/ckpt2diffusers.py \
  2. --checkpoint_path=./ckpt_models/nd_lastest.ckpt \
  3. --dump_path=./model \
  4. --vae_path=./ckpt_models/animevae.pt \
  5. --original_config_file=./ckpt_models/model.yaml \
  6. --scheduler_type="ddim"

运行效果如下图所示。

训练过程

二次元图像在开始训练前需要给图片加上描述,具体过程参考.ipynb文件。

修改train_object.sh文件中的相关设置,修改的部分如下图所示。

然后运行该文件。

!sh train_object.sh

中间过程命令行输出如下图所示。

训练到最后的命令行输出如图所示。从图中可以看出训练2000步只需要20min不到的时间,并且最终的训练用时18:42和一开始预估的17:37来去不大。

图像生成

修改test_model.py文件,主要将调用路径改为训练好的模型,然后结合实际生成效果,调整提示词、生成步数、每次生成的张数。

运行test_model.py

!python test_model.py

几个生成的结果如图所示。

Prompt: a photo of spongebob_squarePants, dark background, look ahead

Prompt: a photo of spongebob_squarePants, white background, sad

三次元图像训练

数据集准备

我在网上又搜集了霉霉的图片,然后准备代入模型训练。

还是通过tools/handle_images.py将搜集到的图像裁剪成512*512的大小。这里我没有再另外将图像下载到本地进行显示。

模型文件转换

这次转换的是v1-5-pruned.ckpt模型文件。

  1. !python tools/ckpt2diffusers.py \
  2. --checkpoint_path=./ckpt_models/v1-5-pruned.ckpt \
  3. --dump_path=./model \
  4. --original_config_file=./ckpt_models/model.yaml \
  5. --scheduler_type="ddim"

训练过程

修改模型的输入输出文件夹,修改相关的prompt,这次我将训练的总步数设置为10000步,每1000步进行一次模型保存,具体的训练过程如下:

图片多了之后这里的预生成似乎也慢了很多。

 从图中可以看出10000步的训练时间大概在1.5h左右。

这里需要注意的是,如果中间过程保存的模型较多(比如500步保存一次)可能会使免费的50GB数据盘跑爆,请根据实际需求进行扩容或调整模型保存的间隔步数。

另一个需要注意的问题是,扩容之后我虽然没有跑爆数据盘,但是我确实没有拿到第10000步的训练模型,训练过程中我离开了,等我离开足够长的时间再回来,发现.ipynb中运行的cell卡住了,没有报错也没有再继续输出了,查看模型文件夹,也是空的,但是第9000步的训练模型确实是完成了,时间有限,我也没再跑了。

图像生成

这里的prompt在开头都是与训练时相同的a photo of <taylor> person,后面跟的提示词分别是in white/pink/blue dress,设置的生成步数为30,最终生成的图像如下:

这是每次生成三张,生成几次之后挑选出来的比较好的结果。这里使用的模型基本是第2000/3000步训练时保存的模型。

说句题外话:从PPT复制时同时选中三张图片,粘贴过来就自动合成了一张,布局与PPT中一致,以后可以用于并列放图。

至此我的所有复现过程全部讲解完毕。

反思

最终训练后的模型生成图像的效果不是太好,经过分析后可能的原因如下:

1. 训练步数过长可能过拟合,过短可能学习不充分;

最终展示的结果并没有使用最终的训练模型,使用9000步存下来的模型效果也就那样,对比2000/3000步出来的结果并没有明显的优越性,训练时长上去了GPU还要花更多的钱。

2. 训练输入图像3-5张就够了;

训练效果的好坏似乎与输入图像的张数多少没有直接关系。

3. 训练时的相关参数未调试。

由于我并不研究图像方面,对于相关参数调整会带来的效果并不清楚,时间有限,也没有进行深入研究。

其他的资源

有机会可以再看下(其实我也不懂为什么他训练出来的效果就这么好呜呜呜)。

runwayml/stable-diffusion: Latent Text-to-Image Diffusion (github.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/751522
推荐阅读