Stable Diffusion の学習済みモデルを利用するには、次の2通りの方法があります。

  1. Hugging Face のモデルカードから手動でダウンロードする ← 前回はこの方法
  2. Hugging Face のDiffusersライブラリを使う ← 今回はこっち

前回はAIの学習済みモデルを利用する感覚をわかりやすくするために、ファイルを手動でダウンロードして使う方法を紹介しました。今回は、Diffusersライブラリ を使う方法を説明します。

この方法のメリットは、なんといっても簡単にモデルを差し替えできることです。

今後 Stable Diffusion のバージョンアップも期待される ので、そのたびに手動で毎回ダウンロードするのは結構面倒です。しかし、Diffusersライブラリを使えば、パスを書き換えるだけで簡単に新しいモデルに差し替えできます。

そこで、今回はまず前回と同じv1-4のモデルを用いて、Diffusersライブラリの使い方を説明し、その次にモデルをv1-2差し替えて実行してみます。最後に出来上がった画像を比較します。

実行環境は、前回同様 Google Colab を利用します。今回の記事の作成済みのノートブックは以下の「Open in Colab」ボタンをクリックすると開きます。

Open In Colab

本記事の目次
本記事は2022年10月時点の情報をもとに執筆しています。

アクセストークンの取得

Diffusersライブラリからモデルにアクセスするには「アクセストークン(Access Token)」が必要です。このトークンは、Hugging Face にログインすると取得できます。

Hugging Face のユーザー登録が済んでいない場合は以下のページから登録しておきます。方法は前回の記事が参考になります。

https://huggingface.co/join

ユーザー登録済みの場合は、以下の Hugging Face のページで「ユーザー名(またはメールアドレス)」と「パスワード」を入力してログインします。

https://huggingface.co/login

Hugging Face login

ログインすると右上にアイコンが表示されるので、そこをクリックしてメニューから[Settings]を選択します。

Hugging Face menu

以下のような画面が表示されるので、左のメニューの[Access Token]をクリックして、「New token」ボタンをクリックします。

Hugging Face Profile Menu

すると以下のようなダイアログが表示されるので、[Name]に適当な名前を入力して、「Generate a token」ボタンをクリックします。[Role]は「read」のままにしておきます。Nameには今回「Stable Diffusion」を入力しました。

Create Access Token

以下のように取得したトークンが表示されるので、右側にあるコピーアイコンをクリックしてクリップボードにコピーします。

Hugging Face Access Token

このトークンは後ほど使用するので、メモ帳などに仮置きしておきます。

モデルのライセンス条項等に同意する

Stable Diffusion のモデルにアクセスするには、モデルごとにライセンス条項等に同意する必要があります。操作はモデルのページ(「モデルカード」と呼びます)で行います。

今回はまずv1−4のStable Diffusion を利用するので、以下のモデルカードを開きます。

https://huggingface.co/CompVis/stable-diffusion-v1-4

以下のように同意を求める内容が表示されるので、確認したら「I have read the License and agree with its terms」にチェックを入れて「Access repository」ボタンをクリックします。

これで、DiffusersライブラリからStable Diffusionのv1−4のモデルにアクセス可能になります。

Google Colab + DiffusersライブラリでAI画像を生成!

これで準備ができたので、Google Colab で Diffusersライブラリを利用して画像を生成します。まず前回と同様に、Googleアカウントでcolab.research.google.com ログインします。

1. 新規ノートブックを作成、GPUを有効にする

最初に新規ノートブックを作成したら、[ランタイム]-[ランタイムのタイプを変更]を選択します。「ノートブックの設定」というダイアログが表示されるので、「GPU」を選択して[保存]をクリックしてGPUを有効にします。これらの方法は前回と同じです。

以下のコマンドを実行して、GPUが有効になっているか確認します。

!nvidia-smi

以下のように表示されればOKです。「NVIDIA-SMI has failed 〜」と表示されてしまう場合はもう一度上記の設定を確認します。

nvidia-smi

2. 必要なライブラリのインストール

次にDiffusersライブラリ(diffusers )をpipを用いてインストールします。一緒に学習済みモデルの利用に必要な transformers というライブラリもインストールします。

以下のコマンドを実行してインストールします。

!pip install diffusers transformers ftfy accelerate

実行すると以下のようにインストールの経過が表示されるので、完了するまでしばらく待ちます。

pip install

2022年11月頃から画像生成を実行するとインストールを推奨するメッセージが表示されるようになったので、accelerate も追加しました。

3. 画像生成を実行

これで以下のコマンドを実行すれば画像を生成できます。YOUR_TOKENには先ほど取得したアクセストークンpromptには生成したい画像のプロンプトを入力します。プロンプトは前回と同じ「Mt. Fuji in the style of Gauguin」にします。

import torch
from torch import autocast
from diffusers import StableDiffusionPipeline

YOUR_TOKEN = "自分の Hugging Faceアクセストークン を入力"
model_id = "CompVis/stable-diffusion-v1-4"
device = "cuda"

# プロンプト
prompt = "Mt. Fuji in the style of Gauguin"

# パイプラインの作成
pipe = StableDiffusionPipeline.from_pretrained(model_id, use_auth_token=YOUR_TOKEN)
pipe = pipe.to(device)

# パイプラインの実行
generator = torch.Generator(device).manual_seed(42) # seedを前回と同じ42にする
with autocast(device):
    image = pipe(prompt, guidance_scale=7.5, generator=generator).images[0]  

# 生成した画像の保存
image.save("mt_fuji_gauguin.png")

なお、画像を生成するときに、seedという値が用いられますが、画像を再現するには同じ値を用いる必要があります。前回用いたtxt2img.pyではデフォルトの42を使用しているので、今回も42に設定しています。

実行すると以下のように経過が表示されます。今回は約3分で完了しました。

run pipeline

4. 生成された画像を確認

上のコードの最後のimage.save(ファイル名)により画像が保存されます。左側のフォルダのアイコンをクリックすると以下のようにエクスプローラーが表示されるので、画像のファイル(ここではmt_fuji_gauguin.png)をダブルクリックして画像を確認します。

Mt Fuji

同じv1-4のモデルを用いてseedを同一にすることで前回と同じ画像が生成されました。

モデルをv1-2に差し替えて実行!!

今度は Stable Diffusion のモデルをv1-4からv1-2に差し替えて実行してみます。

1. v1-2モデルのライセンス規約等に同意する

Stable Diffusion はモデルごとにライセンス規約等に同意する必要があります。上記ではv1-4のモデルについて行いましたが、ここではv1-2について実施します。

以下のv1-2のモデルカードを開いて、内容を確認し「I have read the License and agree with its terms」にチェックを入れて、「Access repository」ボタンをクリックします。

https://huggingface.co/CompVis/stable-diffusion-v1-2

Hugging Face Access repository 2

これでv1-2のモデルにもアクセスできるようになります。

2. モデルを差し替えて画像生成を実行

上記のセルから続けて実行するので、ここではmodel_id変数だけを書き換えます。以下のコードを実行するとv1-2モデルを用いた画像の生成が開始されます。

# v1-2のモデル
model_id = "CompVis/stable-diffusion-v1-2"

# パイプラインの作成
pipe = StableDiffusionPipeline.from_pretrained(model_id, use_auth_token=YOUR_TOKEN)
pipe = pipe.to(device)

# パイプラインの実行
generator = torch.Generator(device).manual_seed(42) # seedを前回と同じ42にする
with autocast(device):
    image = pipe(prompt, guidance_scale=7.5, generator=generator).images[0]  

# 生成した画像の保存
image.save("mt_fuji_gauguin_v1-2.png")

実行すると以下のように経過が表示されます。今回も約3分で完了しました。

run pipeline 2

3. 生成された画像を確認

出力されたファイル(mt_fuji_gauguin_v1-2.png)を以下のように確認します。v1-4を用いた画像と少し趣きが異なる画像が生成されました。

Mt Fuji 2

モデルのライセンス規約等に同意しないとエラーになる

Stable Diffusion のモデルはライセンス規約等に同意しないとアクセスできません。同意しないでアクセスしようとすると権限がないためエラーになり、以下のように「HTTPError: 403 Client Error: Forbidden for url: ~」が表示されます。

最後に

Diffusersライブラリを利用すると今回試したように簡単にモデルを差し替えできるようになります。今後新しいバージョンの登場も期待されるので、その時はすぐに試せて便利です。さらに、モデルのダウンロード以外にも、インストールするライブラリが少なく、モデルファイルのためのアップロードやマウントの手間もないので、かなり手順も少なくて楽です。

ただし、画像生成のオプションは前回のtxt2img.pyを利用するほうが設定しやすいので、目的に応じて前回と今回の方法を適宜使い分けるのが良いと思います。