【簡単】ローカル環境でStable Diffusionを実行する方法

【簡単】ローカル環境でStable Diffusionで実行する方法 機械学習

「精度の高いAIアートをPythonで試したい」
「GoogleのColaboratoryではなく、ローカル環境でStable Diffusionを動かしたい」

このような場合には、この記事の内容が参考になります。
この記事では、ローカル環境で簡単にStable Diffusionを実行する方法を解説しています。

本記事の内容

  • Stable Diffusionとは?
  • Stable DiffusionをDiffusersで利用する方法
  • 学習済みモデルのダウンロード
  • 【動作確認】テキストからの画像生成

それでは、上記に沿って解説していきます。

Stable Diffusionとは?

Stable Diffusionとは、オープンソース化された高性能画像生成AIです。
Stable Diffusionを用いると、テキストから画像を出力することが可能となっています。

例えば、「Cyberpunk old man」というテキストからは次のような画像が作成されます。

ヤバくないですか?
このサイトでも、過去にAIアートなるモノを扱ってきました。

その中でも、Stable Diffusionは頭が一つも二つも抜けています。
それに加えて、商用利用もOKのようです。

生成した画像の権利は、作成者自身が持ちます。
不適切な画像は、作成できないようにも対策されています。

不適切な画像を作成するような場合、次のような警告が表示されます。
NSFWとは、「職場閲覧注意」の意味です。

Potential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed.

このNSFWフィルタは、無効化することができます。
その方法については、次の記事で説明しています。

また、Stable DiffusionをAIと表現していますが、その正体は基本的にはモデルです。
次のページでその詳細が解説されています。

CompVis/stable-diffusion · Hugging Face
https://huggingface.co/CompVis/stable-diffusion

ソースコードまで公開しているので、学習させてモデルを自作・強化することも可能でしょう。
Windowsなどのローカル環境で利用を行う場合、NVIDIAのGPUが推奨されています。

以上、Stable Diffusionについて説明しました。
次は、Stable DiffusionをDiffusersで利用する方法を説明します。

Stable DiffusionをDiffusersで利用する方法

Stable Diffusionを利用する方法は、大きく以下の二つがあります。

  • 公式ツールを用いた方法
  • Diffusersを用いた方法

公式ツールとは、次のページで公開されているツールのことです。

GitHub – CompVis/stable-diffusion
https://github.com/CompVis/stable-diffusion

公式ツールの導入は、決して簡単とは言えません。
むしろ、困難な部類に入ります。

それに対して、Diffusersを用いた方法は簡単です。
基本的には、pipコマンドだけでインストールできます。

この記事では、その簡単な方を解説します。
システム要件としては、Diffusersがポイントになります。

Diffusersのインストールは、次の記事で丁寧に解説しています。

Diffusersが動くようになれば、半分は終わったようなものです。
とにかく、Diffusersが動くようにしましょう。

あとは、Stable Diffusion本体である学習済みモデルを手に入れるだけです。
ただし、それが少し単純ではありません。

次では、学習済みモデルのダウンロードを説明します。

学習済みモデルのダウンロード

学習済みモデルのダウンロードには、次の作業が必要となります。

  • モデルの利用規約に同意
  • Access Token(アクセストークン)の取得

それぞれを以下で説明します。

モデルの利用規約に同意

CompVis/stable-diffusion-v1-4 · Hugging Face(モデルのページ)
https://huggingface.co/CompVis/stable-diffusion-v1-4

Stable Diffusionのモデルは、上記ページで公開されています。
ただし、単純にそのモデルをダウンロードすることはできません。

ダウンロードするためには、利用規約に同意しないといけません。
利用規約に同意するためには、Hugging Faceサイトのアカウントが必要になります。

アカウントがない場合は、次のページから作成します。

Hugging Face – The AI community building the future.
https://huggingface.co/join

アカウントが作成できたら、サイトにログイン。
ログインできたら、まずはモデルのページにアクセスします。

次のような利用規約を確認できます。

その利用規約の最後に、次のチェックボックスがあります。
そこにチェックを入れて、「Access repository」をクリック。

クリックしたら、利用規約に同意したことになります。

Access Token(アクセストークン)の取得

次は、モデルのダウンロードを行います。
しかし、モデルのダウンロードは直接ファイルをダウンロードする必要はありません。

Diffusersを利用しているため、Diffusersにモデルをダウンロード・設置させましょう。
つまり、プログラム上からダウンロードするということです。

そのことを実現するために、Access Token(アクセストークン)を利用します。
Hugging Faceのサイトにログインした状態で、次のページにアクセスします。

Access Token管理画面
https://huggingface.co/settings/tokens

この画面でAccess Tokenの管理を行います。

「New token」ボタンをクリック。
Access Tokenの情報を入力する画面が、ポッポアップで表示されます。

「Name」を入力して、「Generate a token」ボタンをクリックします。
「Role」は、「read」のままでOK。

ポップアップが閉じたら、作成したAccess Tokenが確認できます。

コピーのアイコンをクリックして、アクセストークンを取得します。

まとめ

利用規約に同意して、アクセストークンまで取得できました。
これで、Diffusersを用いてモデルをダウンロードする準備ができたと言えます。

ダウンロード自体は、コードを実行した際に自動で実施されます。
次は、実際に動作確認のためにコードを動かしてみましょう。

【動作確認】テキストからの画像生成

Stable Diffusionと言えば、テキストからの画像生成です。
そのための動作確認用コードが、以下。

import torch
from diffusers import StableDiffusionPipeline
from torch import autocast

MODEL_ID = "CompVis/stable-diffusion-v1-4"
DEVICE = "cuda"
YOUR_TOKEN = "コピーしたアクセストークン" 

pipe = StableDiffusionPipeline.from_pretrained(MODEL_ID, revision="fp16", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN)
pipe.to(DEVICE)

prompt = "a dog painted by Katsuhika Hokusai"

with autocast(DEVICE):
  image = pipe(prompt, guidance_scale=7.5)["sample"][0]
  image.save("test.png")

上記コードを実行すると、初回時はモデルのダウンロードが実行されます。
モデルは容量的に数GBあるので、結構な時間を待たされます。
(※2回目以降は、ダウンロードが省略されます)

モデルのダウンロードが終わったら、次のように表示される場合があります。

ftfy or spacy is not installed using BERT BasicTokenizer instead of ftfy.

これは、Tokenizer(トークナイザ)についての警告です。
気になる場合は、ftfyかspacyをインストールすればよいでしょう。

個人的には、英語では日本語ほどTokenizerについて重要性を感じません。
今回のようなケースでは、英語だけの利用ですからね。
この辺は、各自のお好きなようにしてください。

処理の実行に話を戻しましょう。
警告の後に、次のような表示が行われます。

18it [00:04,  4.77it/s]

0bitから始まり、51bitまで表示され続けます。

51it [00:11,  4.53it/s]

51bitになったら、処理が完了して画像が生成されています。
同じディレクトリ上に、test.pngという名前のファイルを確認できるはずです。

test.png

実行する度に、生成される画像は異なります。
画像を固定したい場合は、次の記事をご覧ください。

次に作成された画像は、以下。

なかなか渋いですね。
これらが自動で作成されてしまうことに、衝撃を感じます。

なお、作成される画像を変更する場合は以下のテキストを変更します。

prompt = "a dog painted by Katsuhika Hokusai"

Stable Diffusionでは、このテキストのことを呪文と呼ぶことがあります。
呪文の効果的な唱え方については、次の記事で解説しています。

以上、【動作確認】テキストからの画像生成を説明しました。

タイトルとURLをコピーしました