两种模型权重的存储格式,即diffusers格式和ckpt格式:
区别
- diffusers
diffusers格式其实包含:feature_extractor, scheduler, text_encoder, tokenizer, unet, vae这些文件夹以及model_index.json这个文件。大的二进制文件主要位于text_encoder,unet和vae文件夹下。
- ckpt
后缀为.ckpt的文件就是ckpt格式。一般可能会看到safetensors, 它是ckpt转换得到的,防止别有用心之人在ckpt文件中加入恶意代码。
safetensor和ckpt文件都能直接用于AUTOMATIC111这个为T2I模型开发的WebUI上,而diffusers不行。而diffusers提供的一些代码example又非常有借鉴意义,但一旦使用,其存储类型是一系列目录,这就催生了两种各格式相互转化的需求。
相互转化
使用diffusers官方提供的转化脚本完成转化,这些转换脚本在diffuser源代码仓库的scripts文件夹下:
主要涉及两个文件:
convert_original_stable_diffusion_to_diffusers.py
convert_diffusers_to_original_stable_diffusion.py。
- diffusers to ckpts
python convert_diffusers_to_original_stable_diffusion.py --model_path model_dir --checkpoint_path path_to_ckpt.ckpt
还有两个参数:
–half:数值存为fp16
–use_safetensors:ckpt存为safetensors
- ckpts to diffusers
使用convert_original_stable_diffusion_to_diffusers.py脚本,一个典型的使用场景是把ckpt文件(自己训练的或者是SD官方发布的)解包成diffusers的目录形式上传hugging face或者是自己使用。需要注意的是diffuser的目录存储形式实际上提供了比ckpt文件更多的(实际上多得多)信息。下面提供一个范例:
python convert_original_stable_diffusion_to_diffusers.py
–checkpoint_path path_to_ckpt.ckpt
–dump_path model_dir
–image_size 512
–prediction_type epsilon