sd-0 / README.md
alfredplpl's picture
Update README.md
7381fe3 verified
metadata
license: openrail++

はじめに

このモデルはStable Diffusionを0から作りたい人のモデルです。どこから作るかは個々人にお任せします。

SDXL

単一ファイル

sdxl_0_n.safetensorsはU-Netをランダムな値に置き換えています。作り方は以下のとおりです。

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でフルファインチューンをしてください。学習率は1e-4がおすすめです。(Stable Diffusion XL公式リポジトリより) また、SDXLの場合、OpenCLIPの都合上、泣き顔などができないため、テキストエンコーダーの学習を行うこともおすすめします。

また、学習しようとしても、損失関数の値が1になって下がらないようですが、念の為、 sdxl_0.safetensorsはU-Netを0に置き換えています。作り方は以下のとおりです。

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などを使ってダウンロードしてください。 作り方は以下のとおりです。

from diffusers import StableDiffusionXLPipeline
import torch

pipe = StableDiffusionXLPipeline.from_single_file('/path/to/sdxl_0_n.safetensors')
pipe.save_pretrained('/path/to/sd-0')