Google ColabでAUTOMATIC1111を使ってAI画像を生成してみたメモ

## 概要
[前回はローカルでCPUを使って動かした][*1]が、1枚に3分程度かかってしまい、数をこなすのは向いていなかった。
今回は、速度改善を目指して、Google ColabでAIイラスト作成を行う。

作成された画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/e1b0002d-0ac0-139e-9a0d-818bdac2f613.png)

用語|説明
--|--
Google Colaboratory|Pythonの実行環境を用意してくれており、ノートブックの単位でソースを管理できる。
ノートブック|実行可能コードとリッチテキストを1つのドキュメント上で表したもの。GoogleDriveの「Colab Notebooks」ディレクトリに保存される
Stable Diffision|AIお絵描きツール
AUTOMATIC1111|Stable Diffisionのパラメータ入力などを行いやすくしたWebGUI
SukiyakiMix-v1.0|[StableDiffusionのおすすめモデルを紹介 ｜ アニメ調イラストのクオリティを劇的に向上させるカスタムモデル](https://murasan-net.com/index.php/2023/02/15/stablediffusion-custom-model/) より、今回使用した学習model

## Google Colabへの登録
[画像生成AI「Stable Diffusion」を低スペックPCでも無料かつ待ち時間なしで使う方法まとめ](https://gigazine.net/news/20220824-stable-diffusion-google-colaboratory/)を参考にしていく。


### Google Colaboratoryへアクセス。
公式サイトへアクセス
https://colab.research.google.com/?hl=ja

### ログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/eea37aa0-0855-bd25-f8db-edec6b873efc.png)

### ノートブックの環境確認
ノートブックを触るのは初めてなので、動作確認をした。
興味がない人は読み飛ばしても構わない。

#### ノートブックを新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/a962ac60-2520-96a9-381e-cf6c870b7798.png)

#### ノートブックの設定
* GPUを使用するように設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/c58a36eb-624b-dea9-ea87-de8564b491f0.png)

#### ノートブックの位置確認
Googleドライブの「Colab Notebooks」ディレクトリに保存される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/d78999d3-c69b-7859-c5df-8b0570ff6633.png)

#### 環境の確認

動作確認として、下記コードを実行。`Tesla T4`であることを確認。
書いたコードにマウスオーバすると出てくる 実行ボタンをクリックで起動できる。 
同じノートブック上で行った環境設定はコードブロックが別でも引き継がれる。ランタイムのメモリサイズに注意。

```py
!nvidia-smi
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/a1a237cd-dccc-5dbf-0873-05d2e124e0e4.png)



```
Sun Feb 26 04:12:54 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12    Driver Version: 525.85.12    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   60C    P0    28W /  70W |      0MiB / 15360MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

## modelのダウンロード
[StableDiffusionのおすすめモデルを紹介 ｜ アニメ調イラストのクオリティを劇的に向上させるカスタムモデル](https://murasan-net.com/index.php/2023/02/15/stablediffusion-custom-model/) より、[Sukiyaki](https://huggingface.co/Vsukiyaki/SukiyakiMix-v1.0) モデルを選んだ。
fp16とfp32があるが、Colabはメモリ制限があるため、fp16のほうを使用することとする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/25b16a8c-ded0-c861-bbeb-a64bb991c8d5.png)

GoogleDriveの `MyDrive/StableDiffision/models/SukiyakiMix-v1.0-fp16.ckpt`にダウンロードしたファイルを保存した。



## AUTOMATIC1111の準備

[AUTOMATIC1111をGoogle Colabで使用する方法](https://murasan-net.com/index.php/2023/02/10/automatic1111-colab/)
より

完成したノートブック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/a21caa84-0c4a-94ca-1cc2-ab84692c6348.png)

### Colab Note の確認
[AUTOMATIC1111の公式リポジトリ](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Online-Services)から[maintained by Akaibu](https://colab.research.google.com/drive/1kw3egmSn-KgWsikYvOMjJkVDsPLjEMzl)のノートブックをコピーする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/0d2365d8-49e3-4c3a-a3d4-062893072d19.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/9b0c447a-95f3-4513-bb81-094da1c6dfd4.png)


### Goolgle Driveの許可
コピーしたノートブックに追記していく。
GoogleDriveに保存したmodelを使うため、まずはノートブックからGoogleDriveへのアクセスを許可する。
下記をノートの先頭に入力して実行。


```
from google.colab import drive
drive.mount('/content/drive')
```

実行すると許可を求められるので、承認していく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/3d1bfc97-bcd1-7ffe-f815-d551d245a05c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/0eae86be-d5a4-954e-66c2-46c425e06a2e.png)

許可をすると、以下のようにマウント完了が通知される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/788a361c-b95d-fcc5-1dfc-1a5836c3c0d7.png)

フォルダを確認すると、 `drive`というフォルダが作成されていることが確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/377b41e9-ac37-56b1-8986-3d6ea9a36cff.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/f2d4cab3-3bd8-ed62-8551-0751f9b183e2.png)

### WebUIのダウンロード
GITHUBからAUTOMATIC1111のダウンロードを行う。
元のノートブックはmodelをダウンロードする設定となっているが、今回はGooleDriveに保存済なので、最後の3行をコメントアウトして実行する。

```py
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui

#@title SD1.5
# get a token from https://huggingface.co/settings/tokens
#user_token = "" #@param {type:"string"}
#user_header = f"\"Authorization: Bearer {user_token}\""
#!wget --header={user_header} https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt -O /content/stable-diffusion-webui/model.ckpt
```

### Google Drive からmodelをコピー

下記を追記して実行

```py
!cp /content/drive/MyDrive/StableDiffision/models/SukiyakiMix-v1.0-fp16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
```


### 起動

なんとなく`me:qwerty`(`user:password`)を書き換えたが、これはどっちでもいいと思う。

```py
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth hoge:hugaHuga!" REQS_FILE="requirements.txt" python launch.py
```

実行すると、リンクが表示されるのでクリック。
AUTOMATIC1111のページが表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/678db346-f2b6-6b2e-0283-66d399e4a62e.png)

## 画像の生成
### パラメータの設定

[パラメータの設定](https://murasan-net.com/index.php/2023/02/09/automatic1111-setup/#index_id10)を参考に、パラメータを設定する。

項目|日本語|説明
--|--|--
Sampling method|サンプラー|サンプラーを変更することで、ニュアンスの異なる画像を生成
Sampling steps|ステップ数|設定値が高いほど高精細な画像になりますが、生成時間が長くなります。100～120程度に設定するのが時間、精度を考慮するとバランスが良い
Batch count|生成枚数|枚数
CFG Scale|スケール|Guidance Scale（ガイダンススケール）。画像生成プロセスが入力されたプロンプト（呪文）にどれくらい忠実に描画を行うかを制御する.デフォルト値は7.5。1が設定された場合は、プロンプトは完全に無視。
Seed|シード|同じパラメーター、プロンプト、シードを設定すると同じ画像が生成される。-1だとランダム



[パラメータ解説](https://murasan-net.com/index.php/2023/02/07/stable-diffusion-parameter/)より。

### 実行
パラメータを下記のように入力し、「Generate」ボタンを押した。
30秒程度で1枚が出力された。


項目|値
--|--
プロンプト|takamori aiko
Sampling method|Euler a
Sampling steps|20
Batch count|1
CFG Scale|7
Seed|10


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/c386aca4-8ba8-b541-7c38-396bfab63f27.png)

以上！

## 2023.03.21 追記 LoRAを試す。
### ソースコード修正
[【保存版】Kohya版LoRAインストール＆設定、WebUIでの使用法まで解説 キャラ学習手順備忘録 - 完成品を使用してみる](https://economylife.net/kohya-lora-install-use/#toc18)を参考に、高森藍子さんのLoRA([AikoTakamoriV1.safetensors](https://mega.nz/folder/dr5hlagI#tb-yb4kAgPwYObpLpzxuCw/file/ligjEbID)[*](https://mega.nz/folder/dr5hlagI#tb-yb4kAgPwYObpLpzxuCw/file/Qn5zTBwS))を設定してみた。
`safetensors`ファイルをダウンロード後、グーグルドライブに配置。
modelのコピーに追記。

```diff
!cp /content/drive/MyDrive/StableDiffision/models/SukiyakiMix-v1.0-fp16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
+ !mkdir -p /content/stable-diffusion-webui/models/Lora/
+ !cp /content/drive/MyDrive/StableDiffision/AikoTakamori/AikoTakamoriV1.safetensors /content/stable-diffusion-webui/models/Lora/
```

### LoRAを使う

AUTOMATIC1111を再起動する。
Generateの下の花札ボタンを押すと、Loraを選べるようになるので、タブを選択。表示されている`AikoTakamoriV1`をクリックすると、プロンプトに`<lora:AikoTakamoriV1:1>`が入力される。最後の`:1>`が強度で、ここを`:0.8>`などにすることでLoRAの影響力をコントロールできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/d5e2a5fa-2bb0-2a2e-70aa-971a35f42d7c.png)

### 出力
後は通常通り、「Generate」ボタンをクリックで生成できる。
出力してみた結果とプロンプトを書いておく。

![00015-74607907251615536.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/31d72597-e537-8757-3e95-9da820d8ca4e.png)


項目|値
--|--
プロンプト|`<lora:AikoTakamoriV1:0.8>, 1girl, single hair bun, brown hair, Long side locks, long bangs, black eyes, flat chest, soft expression smile,  white background, simple background, blank background,  simple flat background, green frills cardigan`
ネガティブプロンプト|nsfw, lowers, bad anatomy, bad hands, text error, bad hands, missing fingers, extra digits, fewer digits, cropped, worst quality, low quality, standard quality, signature, watermark, username, blurry, jpeg artifacts, Humpbacked , more than 2 thighs, The background is incoherent, disappearing arms, extra legs, mutation, {{bare shoulders}}, duplicate, cloned face, artifacts
Sampling method|Euler a
Sampling steps|50
Batch count|1
CFG Scale|7
Seed|74607907251615542
width|512
Height|730


## 参考

[WindowsでPython知らないレベルの私でもStable Diffusionを動かせたメモ][*1]
[画像生成AI「Stable Diffusion」をGoogle Colabで動かしたメモ][*10]
[colab：AUTOMATIC1111で高速にモデルを切り替える][*11]
[Google Colab で Stable Diffusion 2.0 を試す - diffusers版][*12]
[Stable DiffusionをGoogle Colaboratoryで動かしてAI画像生成を試す][*13]
[[Pythonプログラミング]Google Colabでstable diffusionを便利に使うテクニック][*14]
[Colab版導入][*15]


- GIGAZINE
  - [GIGAZINE - 画像生成AI「Stable Diffusion」を低スペックPCでも無料かつ待ち時間なしで使う方法まとめ][*3]
  - [GIGAZINE - 画像生成AI「Stable Diffusion」AUTOMATIC1111版でイラストの画風・絵柄を学習＆適用できる「Aesthetic Gradients」使い方まとめ][*2]
  - [GIGAZINE - 好みの画像を探してモデル名やプロンプトをサクッと確認できるAIイラスト投稿サービス「MajinAI」レビュー][*4]
- [イラストを描画できるAI！Stable Diffusionの使い方 ｜ Pythonのコード付きで解説（Google Colab対応）][*9]
  - [AUTOMATIC1111のセットアップから使い方までを解説 ｜ Stable Diffusion高機能Web UIの活用法][*5]
  - [StableDiffusionのおすすめモデルを紹介 ｜ アニメ調イラストのクオリティを劇的に向上させるカスタムモデル][*6]
  - [AUTOMATIC1111をGoogle Colabで使用する方法 ｜ Stable Diffusion高機能Web UIの活用法][*7]
  - [StableDiffusionのPrompt（呪文）を自然言語処理モデルGPT-3で自動生成する方法][*8]
- LoRA
  - [完成品を使用してみる](https://economylife.net/kohya-lora-install-use/#toc18)
  - [AIKO Takamori](https://mega.nz/folder/dr5hlagI#tb-yb4kAgPwYObpLpzxuCw/file/ligjEbID)

[*1]:https://qiita.com/hibohiboo/items/c8e2067de36cdef21814
[*2]:https://gigazine.net/news/20221101-automatic1111-stable-diffusion-webui-aesthetic-gradients/
[*3]:https://gigazine.net/news/20220824-stable-diffusion-google-colaboratory/
[*4]:https://gigazine.net/news/20230226-majinai-prompt-search/
[*5]:https://murasan-net.com/index.php/2023/02/09/automatic1111-setup/
[*6]:https://murasan-net.com/index.php/2023/02/15/stablediffusion-custom-model/
[*7]:https://murasan-net.com/index.php/2023/02/10/automatic1111-colab/
[*8]:https://murasan-net.com/index.php/2023/01/20/stablediffusion-prompt-gen-catchy/
[*9]:https://murasan-net.com/index.php/2022/10/26/stable-diffusion-summary/
[*10]:https://ima.hatenablog.jp/entry/2022/08/24/234500
[*11]:https://programmingforever.hatenablog.com/entry/2022/12/03/205615
[*12]:https://note.com/npaka/n/n5fd3d8ecf1e6
[*13]:https://blog.14nigo.net/2023/02/stablediffusiongooglecolab.html.html?m=1
[*14]:http://www.otupy.net/archives/40902315.html
[*15]:https://wikiwiki.jp/sd_toshiaki/Colab%E7%89%88%E5%B0%8E%E5%85%A5