--- license: openrail++ --- # はじめに このモデルはStable Diffusionを0から作りたい人のモデルです。どこから作るかは個々人にお任せします。 ## SDXL ### 単一ファイル [sdxl_0_n.safetensors](sdxl_0_n.safetensors)はU-Netをランダムな値に置き換えています。作り方は以下のとおりです。 ```python from safetensors import safe_open from safetensors.torch import save_file import torch tensors = {} with safe_open("/path/to/sd_xl_base_1.0.safetensors", framework="pt", device=0) as f: for k in f.keys(): tensors[k] = f.get_tensor(k) if("model.diffusion_model" in k): tensors[k]=torch.randn_like(tensors[k])*1e-5 save_file(tensors, "/path/to/sdxl_0_n.safetensors") ``` このファイルを[sd-scripts](https://github.com/kohya-ss/sd-scripts)でフルファインチューンをしてください。学習率は1e-4がおすすめです。(Stable Diffusion XL公式リポジトリより) また、SDXLの場合、OpenCLIPの都合上、泣き顔などができないため、テキストエンコーダーの学習を行うこともおすすめします。 また、学習しようとしても、損失関数の値が1になって下がらないようですが、念の為、 [sdxl_0.safetensors](sdxl_0.safetensors)はU-Netを0に置き換えています。作り方は以下のとおりです。 ```python from safetensors import safe_open from safetensors.torch import save_file import torch tensors = {} with safe_open("/path/to/sd_xl_base_1.0.safetensors", framework="pt", device=0) as f: for k in f.keys(): tensors[k] = f.get_tensor(k) if("model.diffusion_model" in k): tensors[k]=torch.zeros_like(tensors[k]) save_file(tensors, "/path/to/sdxl_0.safetensors") ``` ### diffusers diffusersなどを使ってダウンロードしてください。 作り方は以下のとおりです。 ```python from diffusers import StableDiffusionXLPipeline import torch pipe = StableDiffusionXLPipeline.from_single_file('/path/to/sdxl_0_n.safetensors') pipe.save_pretrained('/path/to/sd-0') ```