0xf

日記だよ

apple/ml-stable-diffusion を試す(2)

apple/ml-stable-diffusion を試す - 0xf続き。といってもちょっと見ていただけですが。

タフな男はいつでもビールを飲んでいる

よく見かける細部が怪しい画像がいろいろ生成できる。

ControlNet

テキストからイメージ生成するだけでなく画像を入力に使えるControlNetさん。

利用するには、ControlNet自体のモデルを変換するのと、モデルをControlNet対応に変換するのが必要ぽい。

ControlNet 自体のモデルの変換

lllyasviel (Lvmin Zhang) でいっぱい公開されている。Stable Diffusion 1.5向けってされたものが多そう。

for line in lllyasviel/control_v11p_sd15_softedge lllyasviel/control_v11p_sd15_inpaint lllyasviel/control_v11p_sd15_scribble  lllyasviel/control_v11p_sd15_lineart lllyasviel/control_v11p_sd15_normalbae lllyasviel/sd-controlnet-canny lllyasviel/control_v11e_sd15_shuffle lllyasviel/sd-controlnet-openpose lllyasviel/sd-controlnet-seg lllyasviel/sd-controlnet-mlsd lllyasviel/sd-controlnet-depth
do
  python3 -m python_coreml_stable_diffusion.torch2coreml --attention-implementation ORIGINAL --convert-unet --convert-controlnet ${line}  --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o model_original --model-version runwayml/stable-diffusion-v1-5
done

Stable Diffusion 1.5 のモデルをControlNet対応に変換

たぶん必要。--unet-support-controlnet を指定する。ControlNet使わない版と出力されるファイルが区別されるようなので別に出してる。

python3 -m python_coreml_stable_diffusion.torch2coreml --attention-implementation ORIGINAL --convert-unet --unet-support --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o model_original --model-version runwayml/stable-diffusion-v1-5

python3 -m python_coreml_stable_diffusion.torch2coreml --attention-implementation ORIGINAL --convert-unet --unet-support-controlnet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o model_original --model-version runwayml/stable-diffusion-v1-5

使ってみる

入力された画像の使い方(線画として使う、など)によって複数の種類のControlNetがあり、複数適用させることができる。フォトショップのフィルタのようなものだが、順番にラスタ処理が重なっていくようなわかりやすさはなく、自分にとってはまだ結果は予想可能な感じではない。

MODEL=runwayml/stable-diffusion-v1-5
CONTROLNET1="lllyasviel/control_v11p_sd15_softedge"
CONTROLNET2="lllyasviel/sd-controlnet-canny"
CONTROLNET1_INPUT="./input_images/a.jpg"
CONTROLNET2_INPUT="./input_images/b.png"
SEED=999
PROMPTTXT="The dog looks up at you with stern eyes. There are many bottles of alcohol lying on the floor."
python3 -m python_coreml_stable_diffusion.pipeline --prompt "${PROMPTTXT}" -i model_original -o ./output_images/ --compute-unit CPU_AND_GPU --seed "${SEED}" --model-version "${MODEL}" --controlnet "${CONTROLNET1}"  --controlnet-input "${CONTROLNET1_INPUT}" 

タフな犬はいつでもビールを飲んでいる

ビールと犬

ガチャみたいなもんで、繰り返すといいものが出てくるのではないか、という気持ちに駆られて無限に繰り返してしまうのもわかる。しかし一回の生成に40秒かかるんだよな。SEED変えながらバックグラウンドでひたすら生成させる人が出てくるのもわかる。プロンプトに一言二言付け加えるとがらっと出力が変わるので「呪文」を探してしまうのもよくわかる。