【Stable Diffusion】SD Pokémon Diffusersを使う方法

【Stable Diffusion】SD Pokémon Diffusersを使う方法 機械学習

「AIで手っ取り早くオリジナルキャラを生成したい」
「Stable Diffusionでポケモン風キャラを作りたい」

このような場合には、SD Pokémon Diffusersがオススメです。
この記事では、ポケモン風キャラを生成できるSD Pokémon Diffusersを使う方法を解説しています。

本記事の内容

  • SD Pokémon Diffusersとは?
  • SD Pokémon Diffusersのシステム要件
  • SD Pokémon Diffusersの利用方法

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

SD Pokémon Diffusersとは?

SD Pokémon Diffusersとは、Stable Diffusionをファインチューニングしたモデルのことを言います。
Stable Diffusionは、汎用的なイラストを生成することが多いです。

そんなStable Diffusionに、特定のイラストを生成させたい場合があります。
そのような場合、ファインチューニング(転移学習)が行われます。

今回紹介するSD Pokémon Diffusersは、ポケモンのキャラクターをもとにファインチューニングされたモデルです。
このファインチューニングされたモデルを利用すると、次のような画像を作成可能になります。

上記画像は、順番に次のテキストから生成された画像だということです。

Girl with a pearl earring, Cute Obama creature, Donald Trump, Boris Johnson, Totoro, Hello Kitty

以上、SD Pokémon Diffusersについて説明しました。
次は、SD Pokémon Diffusersのシステム要件を説明します。

SD Pokémon Diffusersのシステム要件

SD Pokémon Diffusersのシステム要件は、Stable Diffusionが動くことです。
ただし、次の記事に従ってインストールする必要があります。

具体的には、Diffusersをインストールしている必要があります。
Diffusersがインストール済みであれば、基本的にはモデルを変えるだけで済みます。

あと、以下が未インストールなら、インストールしておきましょう。

pip install scipy ftfy

上記は、Tokenizer(トークナイザ)として利用されています。
Stable Diffusion自体は、上記がなくても動きます。

それは、デフォルトのTokenizerを利用するからです。
ただ、SD Pokémon Diffusersではインストールするように記載されています。
ここは、素直に従っておきましょう。

以上、SD Pokémon Diffusersのシステム要件を説明しました。
次は、SD Pokémon Diffusersの利用方法を説明します。

SD Pokémon Diffusersの利用方法

基本的には、モデルを変更するだけです。
ただし、若干細かいところで異なります。

そのため、公式にあるコードを用いましょう。
まずは、開発元が指示するコードが正義です。

import torch
from diffusers import StableDiffusionPipeline
from torch import autocast

pipe = StableDiffusionPipeline.from_pretrained("lambdalabs/sd-pokemon-diffusers", torch_dtype=torch.float16)
pipe = pipe.to("cuda")

prompt = "Yoda"
scale = 10
n_samples = 4

# Sometimes the nsfw checker is confused by the Pokémon images, you can disable
# it at your own risk here
disable_safety = False

if disable_safety:
    def null_safety(images, **kwargs):
        return images, False


    pipe.safety_checker = null_safety

with autocast("cuda"):
    images = pipe(n_samples * [prompt], guidance_scale=scale).images

for idx, im in enumerate(images):
    im.save(f"{idx:06}.png")

上記を実行すると、しばらく時間がかかります。
最初は、モデルのダウンロードが必要となります。

ここで一つ注意事項があります。
SD Pokémon Diffusersのモデルのサイズが、3GB以上はあるということです。
ディスク容量には、余裕を持たせておきましょう。

さて、実行した結果はどうでしたでしょうか?
同一ディレクトリ上に、4つの画像が作成されていればOKです。

しかし、次のエラーで終っているかもしれません。

RuntimeError: CUDA out of memory. Tried to allocate 4.00 GiB (GPU 0; 8.00 GiB total capacity; 4.19 GiB already allocated; 1.96 GiB free; 4.25 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

このエラーの詳細については、次の記事で説明しています。

ここでは、一つの解決策を載せておきます。
以下の記述を変更します。

n_samples = 4

n_samples = 1

4つの画像を一気に作成しようとして、メモリが溢れているようです。
そのため、欲張らずに1つの画像を作成するように設定を変更します。

このメモリの問題がクリアできていても、以下のような表示が出る場合があります。

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.

この表示については、次の記事で説明しています。

この状況を回避するためには、コードを次のように変更します。

disable_safety = False

disable_safety = True

ここまで変更すれば、SD Pokémon Diffusersがちゃんと動いてくれるはずです。
ちなみに、次のような画像が作成されました。

「Yoda」(ヨーダ)とテキストを入力しているからでしょうね。
確かに、ヨーダっぽいです。

以上、SD Pokémon Diffusersの利用方法を説明しました。

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