「日本語を呪文にしてStable Diffusionで画像生成を行いたい」
「Stable Diffusionで日本人向けの画像を作成したい」
このような場合には、Japanese Stable Diffusionがオススメです。
この記事では、日本語を呪文に使えるJapanese Stable Diffusionについて解説しています。
本記事の内容
- Japanese Stable Diffusionとは?
- Japanese Stable Diffusionのシステム要件
- Japanese Stable Diffusionのインストール
- Japanese Stable Diffusionの動作確認
それでは、上記に沿って解説していきましょう。
Japanese Stable Diffusionとは?
Japanese Stable Diffusionとは、日本語に特化した画像生成モデルです。
rinna株式会社によって、2022年9月9日に公開されました。
Japanese Stable Diffusionをモデルとして利用すると、Stable Diffusionで日本語が使えます。
つまり、日本語の呪文(プロンプト)で画像を生成できるのです。
呪文に日本語が使えるだけではなく、日本的な画像が作成されやすくもなっています。
例えば、「勉強する小学生」というテキストからは次の画像が作成されています。
これは、明らかに日本の小学生ですよね。
日本的な画像を作成したい場合には、Japanese Stable Diffusionが役に立ちます。
以上、Japanese Stable Diffusionについて説明しました。
次は、Japanese Stable Diffusionのシステム要件を説明します。
Japanese Stable Diffusionのシステム要件
基本的には、Stable Diffusionと変わりません。
上記を参考にすれば、 ローカル環境でStable Diffusionを動かせます。
よって、Stable Diffusionの動くことがシステム要件と言えます。
あと、Japanese Stable Diffusionは利用中のStable Diffusionとは別の環境にインストールしましょう。
Python仮想環境については、次の記事で説明しています。
分ける理由は、Stable Diffusionに影響を及ぼす可能性を否定できないからです。
後述しますが、ライブラリを置き換える以上は何かしらの影響はあるでしょう。
以上、Japanese Stable Diffusionのシステム要件を説明しました。
次は、Japanese Stable Diffusionのインストールを説明します。
Japanese Stable Diffusionのインストール
Japanese Stable Diffusionの正体は、以下となります。
- Diffusersを改良したライブラリ
- 日本語に特化した画像生成モデル
それぞれを以下で説明します。
Diffusersを改良したライブラリ
Diffusersについては、次の記事で説明しています。
Diffusersは、Stable Diffusionのインストール時にすでにインストール済みです。
日本語モデルを読み込むために、そのDiffusersが改良されています。
つまり、改良したDiffusersをインストールする必要があるということです。
そのためのコマンドが、以下となります。
pip install git+https://github.com/rinnakk/japanese-stable-diffusion
インストールすべきモノは、Diffusersを改良したライブラリだけです。
日本語に特化した画像生成モデル
Stable Diffusionのインストールの際に、モデルの利用規約に同意しています。
それと同じことを、ここでも行います。
まずは、Japanese Stable Diffusionのページへアクセスします。
rinna/japanese-stable-diffusion · Hugging Face
https://huggingface.co/rinna/japanese-stable-diffusion
ログインした状態で規約に同意します。
とりあえず、ここでは利用規約の同意までを済ませておきます。
以上、Japanese Stable Diffusionのインストールを説明しました。
次は、Japanese Stable Diffusionの動作確認を説明します。
Japanese Stable Diffusionの動作確認
Japanese Stable Diffusionの動作確認を行います。
ここまでの作業が済みであれば、次のコードを動かすだけです。
import torch from torch import autocast from diffusers import LMSDiscreteScheduler from japanese_stable_diffusion import JapaneseStableDiffusionPipeline MODEL_ID = "rinna/japanese-stable-diffusion" DEVICE = "cuda" YOUR_TOKEN = "コピーしたアクセストークン" PROMPT = "勉強する高校生" # Use the K-LMS scheduler here instead scheduler = LMSDiscreteScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", num_train_timesteps=1000) pipe = JapaneseStableDiffusionPipeline.from_pretrained(MODEL_ID, torch_dtype=torch.float16, scheduler=scheduler, use_auth_token=YOUR_TOKEN) pipe = pipe.to(DEVICE) with autocast(DEVICE): image = pipe(PROMPT, guidance_scale=7.5)["sample"][0] image.save("output.png")
呪文には、日本語を設定しています。
PROMPT = "勉強する高校生"
また、上記コードはGPUメモリが8GBでも動くようになっています。
メモリに余裕があれば、「torch.float32」に変更してもよいでしょう。
上記コードを実行すると、次のように表示されます。
ただし、これは最初だけです。
Downloading: 100%|██████████| 10.4k/10.4k [00:00<00:00, 10.4MB/s] Downloading: 100%|██████████| 342/342 [00:00<00:00, 113kB/s] Downloading: 100%|██████████| 549/549 [00:00<00:00, 275kB/s] Downloading: 100%|██████████| 4.68k/4.68k [00:00<00:00, 4.69MB/s] Downloading: 100%|██████████| 1.22G/1.22G [00:31<00:00, 38.7MB/s] Downloading: 100%|██████████| 208/208 [00:00<00:00, 69.5kB/s] Downloading: 100%|██████████| 535/535 [00:00<00:00, 134kB/s] Downloading: 100%|██████████| 439M/439M [00:11<00:00, 37.2MB/s] Downloading: 100%|██████████| 153/153 [00:00<00:00, 38.3kB/s] Downloading: 100%|██████████| 806k/806k [00:00<00:00, 12.9MB/s] Downloading: 100%|██████████| 534/534 [00:00<00:00, 179kB/s] Downloading: 100%|██████████| 743/743 [00:00<00:00, 186kB/s] Downloading: 100%|██████████| 3.44G/3.44G [01:21<00:00, 42.1MB/s] Downloading: 100%|██████████| 522/522 [00:00<00:00, 131kB/s] Downloading: 100%|██████████| 335M/335M [00:08<00:00, 37.8MB/s]
コード内で指定したモデルをダウンロードしています。
MODEL_ID = "rinna/japanese-stable-diffusion"
ダウンロードする場合には、ディスク容量に注意しましょう。
1度ダウンロードできれば、2回目以降はダウンロード不要となります。
コードを実行した結果として、output.pngが作成されます。
中学生にも見えなくはないですが、高校生でしょう。
そして、日本の高校の授業風景だと言えます。
以上、Japanese Stable Diffusionの動作確認を説明しました。