AI に絵を生成させるStable DiffusionをCPU使用のDockerで動かしてみた

## はじめに
以前記事にした下記環境で構築を行います。

https://qiita.com/ShogoMatsumoto/items/64fd5ea58d25a54ff7f0

CPUで動くStable DiffusionをWSL上のDockerで動かします。
自分の環境だと1枚の画像生成に10分程掛かりました。

## Dockerfileビルド
ビルド前にメモリー不足だとビルドや実行時にコケる恐れがあるためWSLの設定を変更しておきます。
以下に設定ファイルがあるため確認、変更を行います。無ければ作成が必要です。
`C:\Users\users\.wslconfig`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/69674a8b-a5e0-85e9-960d-e72663d1502a.png)


以下のgithubで公開されている方のDockerfileをダウンロードします。

https://github.com/atinfinity/stable_diffusion.openvino-docker

Ubuntuを起動し、gitで任意の場所でcloneを行います。

`git clone [公開されてるURL]`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/2e22660e-5b70-d36c-03bf-716c00ab74cd.png)

 stable_diffusion.openvino-dockerフォルダに移動し、dockerのビルドコマンドを実行します。
`sudo docker build ./ --build-arg UID=$(id -u) --build-arg GID=$(id -g) -t stable_diffusion:openvino`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/430c5c56-965e-1eb6-cc85-ad17519f7184.png)

## Docker実行

`sudo docker run -it -d -v /home:/root stable_diffusion:openvino bash`

コンテナIDを確認します。
`sudo docker ps -a`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/9ef07b23-e561-9916-43cd-d7fee43518d8.png)

`sudo docker exec -it (CONTAINER_ID) sudo /home/stable_diffusion/openvino_env/bin/python demo.py --prompt "beautiful japanese lady" --output /root/(生成する画像名).png`

初回実行時のみモデルデータをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/62d57c8f-1b4b-15d6-3514-aa2c26142712.png)

エクスプローラーで「**¥¥wsl$**」を入力し、/homeの直下に画像が出力されているのを確認します。

beautiful japanese ladyで自動生成された画像
![test03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/5845fae7-6bbc-eb73-14b6-c9009e69ac08.png)

## Stable Diffusionのprompt

今回の機能はprompt（文字）により画像を出力しています。
実はpromptには規則性があり、出力される画像をより自然に近づけることが出来ます。(通称 呪文)

以下その呪文で出力した画像です。

`sudo docker exec -it (CONTAINER_ID)  sudo /home/stable_diffusion/openvino_env/bin/python demo.py --prompt "illustration of a gorgeous woman, upper shot, shot from below, beautiful face, long waved hair, cute eyes, beautiful costume, fantasy background, beautiful composition, golden hour, overhead sunlight, soft lighting, artstation, deviantart, concept art, digital painting, extremely detailed, sharp focus, ray tracing, 8k, cinematic postprocessing" --output /root/(生成する画像名).png`


![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/d6acaad6-f079-b41d-d484-6628845fac4e.png)


`sudo docker exec -it (CONTAINER_ID)  sudo /home/stable_diffusion/openvino_env/bin/python demo.py --prompt "a beautiful painting portrait of a very old indigenous grand-father in the amazon jungle, matte painting, fantasy art, ayahuasca, highly detailed" --output /root/(生成する画像名).png`


![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/30f0290f-fcdd-fc83-a81f-48a1c396879b.png)



`sudo docker exec -it (CONTAINER_ID) sudo /home/stable_diffusion/openvino_env/bin/python demo.py --prompt "japanese anime of a beaultiful girl,fantasy costume,fantasy background,beautiful composition,cinematic lighting,pixiv,light novel,digital painting,extremely detailed,sharp focus,ray tracing,8k,cinematic postprocessing" --output /root/(生成する画像名).png`


![40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/b48a65ac-9cbe-36aa-d133-2429375ea44f.png)


`sudo docker exec -it (CONTAINER_ID)  sudo /home/stable_diffusion/openvino_env/bin/python demo.py --prompt "Shiba Inu" --output /root/(生成する画像名).png`

![41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752288/0b14975c-d36e-ebd9-c7ad-6f514c3b4f57.png)

柴犬可愛いです。

## ご参考にさせて頂いたサイト様
https://zenn.dev/karaage0703/articles/4901bf68536907
https://github.com/atinfinity/stable_diffusion.openvino-docker
https://github.com/bes-dev/stable_diffusion.openvino
https://tech.isid.co.jp/entry/2022/09/01/StableDiffusion%E5%85%A5%E9%96%80-%E7%94%BB%E5%83%8F%E3%82%BF%E3%82%A4%E3%83%97
https://note.com/yamkaz/n/n9fd522bb012e


これで以上となります。
見て頂きありがとうございました。