文章目录
- 参考内容
- 一、训练流程
- 下载相关文件
- ① 需要下载的权重文件
- ② 下载数据集
- 二、训练代码
- 两种训练方式:
- ①采用.sh文件
- ②常规的训练
- 测试代码
- 生成的结果
- 四、报错
- NVIDIA的驱动太老需要更新
- 生成出全黑图
参考内容
diffusers库提供的官方训练代码
利用到的fill50k数据集
一、训练流程
下载相关文件
① 需要下载的权重文件
因为这里是是基于SD1.5进行训练的,所以我们需要先去huggingface的官方库当中下载SD1.5模型的权重文件:
huggingface提供的SD1.5的权重
注意下载文件时,文件的命名需要与huggingface上的保持一致,很多时候他会自动增加一个前缀
需要下载的内容如下
每个文件里面的json文件,
而对于权重文件,我们统一下载bin结尾的文件
② 下载数据集
利用到的fill50k数据集
需要下载数据集
然后把其中的zip文件解压
然后打开fill50k.py文件,将其中的路径参照如下的,换为你自己的文件名称
就是将这里的三个路径进行修改
metadata_path = "/media/dell/DATA/fill50k/train.jsonl"
images_dir = "/media/dell/DATA/fill50k/"
conditioning_images_dir = "/media/dell/DATA/fill50k/"
二、训练代码
两种训练方式:
①采用.sh文件
新建一个run.sh文件,然后把我们的参数放进去
python train_controlnet.py \
--pretrained_model_name_or_path="/media/dell/DATA/models/stable-diffusion-v1-5" \
--output_dir="outputs" \
--dataset_name="/media/dell/DATA/fill50k"\
--resolution=512 \
--learning_rate=1e-5 \
--validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
--validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
--train_batch_size=4 \
--num_train_epochs=10 \
--checkpointing_steps=6000
终端授予run.sh文件权限
chmod 777 run.sh
终端输以下命令,即可进行训练,
bash run.sh
这种训练方式在于可以很好的修改参数,但是不好调试
②常规的训练
在配置中配置参数
配置好后run即可,这种方式就是常规的训练方式,可以使用debug模式进行训练
环境配置没什么问题基本就可以开始训练了,如果报错大概率就是包没装,报错没装哪个包就装那个包就OK
#三、 测试
测试代码
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from diffusers.utils import load_image
import torch
base_model_path = "/media/dell/DATA/models/stable-diffusion-v1-5"
controlnet_path = "/media/dell/DATA/diffusers-main/examples/controlnet/outputs/checkpoint-6000/controlnet"
controlnet = ControlNetModel.from_pretrained(controlnet_path)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
base_model_path, controlnet=controlnet,
)
#controlnet = ControlNetModel.load_from_checkpoint(controlnet_path)
# speed up diffusion process with faster scheduler and memory optimization
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
# remove following line if xformers is not installed or when using Torch 2.0.
#pipe.enable_xformers_memory_efficient_attention()
# memory optimization.
#pipe.enable_model_cpu_offload()
#记得加入这一行
pipe.safety_checker = lambda images, clip_input: (images, None)
#不然会报错
control_image = load_image("./conditioning_image_2.png")
prompt = "pale golden rod circle with old lace background"
pipe.to("cuda")
# generate image
generator = torch.manual_seed(0)
image = pipe(
prompt, num_inference_steps=40, generator=generator, image=control_image
).images[0]
image.save("./output.png")
生成的结果
文本条件:silver circle with powder blue background
控制的条件图像
利用训练了6000step的权重,生成的结果图像
可以看到生成的效果并不好,需要调整学习率和增加训练的步数
四、报错
NVIDIA的驱动太老需要更新
RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from
这里在python终端看了一下
#python环境下
import torch
print(torch.__version__)
发现自己的pytorch的版本是2.4.0的,对应的cuda版本要为12.1,太高级了,这里还是选择2.4.0的pytorch,但是cuda版本选择c为11.8的就不会报错了,
torch-2.4.0+cu118-cp38-cp38-linux_x86_64
注意这里不能把pytorch换成2.0.1。因为这里换了之后,后面xformers的相关包会一致报错,因为其要求pytorch的版本要为2.4.0。
然后最后就可以跑通了
生成出全黑图
报错:Potential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed.
** 在代码中加入这个就可以了(我是加入这个就OK了)**
这个不能放在图片生成后,要放在图片生成代码的前面
pipe.safety_checker = lambda images, clip_input: (images, None)