File size: 2,136 Bytes
0321ad8 527f912 90f2fc7 527f912 9f7e6c5 ca6a846 eba5bc9 3885c65 527f912 90f2fc7 9f7e6c5 3885c65 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
---
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.safetensors')
pipe.save_pretrained('/path/to/sd-0')
```
|