今回はStableDiffusionの主要なパラメータの使い方と、Pythonでの実装方法を解説します。パラメータがどのような影響を与えるかを理解することで、生成される画像をコントロールすることができますので、ぜひ活用してみてください。
また、当ブログのStable Diffusionに関する記事を以下のページでまとめていますので、あわせてご覧ください。
Stable Diffusionとは
Stable Diffusion(ステーブル・ディフュージョン)は2022年8月に無償公開された描画AIです。ユーザーがテキストでキーワードを指定することで、それに応じた画像が自動生成される仕組みとなっています。
NVIDIAのGPUを搭載していれば、ユーザ自身でStable Diffusionをインストールし、ローカル環境で実行することも可能です。
(出典:wikipedia)
Stable Diffusionのインストール方法と基本的な使い方については、以下の記事で解説していますので、あわせてご覧ください。。
パラメータ解説
Guidance Scale(ガイダンススケール)
ガイダンススケールは画像生成プロセスが入力されたプロンプト(呪文)にどれくらい忠実に描画を行うかを制御するためのパラメータです。
値を高くするほどプロンプトに忠実に画像が生成され、逆に低いほどプロンプトの内容からは離れるため自由度が上がります。デフォルト値は7.5となります。1が設定された場合は、プロンプトは完全に無視されます。
Pythonのコードではpipeメソッドの引数として値を設定します。
image = pipe(prompt, guidance_scale=7.5, generator=generator).images[0]
Steps(ステップ数)
画像をどれくらい精細に描画するかを決めるパラメータです。
Stable Diffusionの安定拡散モデルは、純粋なノイズから少しずつノイズを取り除いていくことで、最終的に何らかの画像を得るというプロセスで動作していますので、このノイズ除去をどこまでやるかを設定するパラメータとなります。
設定値が高いほど高精細な画像になりますが、生成時間が長くなります。
100~120程度に設定するのが時間、精度を考慮するとバランスが良いようです。
Pythonのコードではpipeメソッドの引数として値を設定します。
image = pipe(prompt, num_inference_steps=15, generator=generator).images[0]
Sampler(サンプラー)
Samplerは安定拡散モデルを使って実際に画像を生成するあるアルゴリズムです。
サンプラーを変更することで、ニュアンスの異なる画像を生成することができます。
Stable Diffusionで使用できるSamplerには以下のようなものがあります。
- DDIM
- PLMS
- LMS
- Heun
- DPM2
- DPM2 a
- Euler
- Euler a
Pythonでの実装方法は後程開設する、パラメータ全部入りのサンプルコードを参照してください。
Seed(シード)
Stable Diffusionでは、同じプロンプトを設定しても毎回違う画像が生成されます。これはSeed値がランダムで設定されているためで、このSeed値をマニュアルで設定してやることで生成される画像に再現性を持たせることができます。
同じパラメーター、プロンプト、シードを設定すると同じ画像が生成されます。そしてシードを固定し、他のパラメータを変更することで、類似した複数のバリエーションを生成できます。
Seed値の設定方法について、以下の記事でPythonのソースコード付きで使用法を解説しています。
Negative Prompt(ネガティブプロンプト)
Negative Promptは画像から除外したい情報を指定する文字列です。
Pythonの実装の方法と生成したイラストの比較を以下の記事で解説しています。
diffusers パラメータ全部入りのサンプルコード
ここからは実際にPythonのコードの記述方法について解説します。
設定方法
各パラメータは以下のようにコードで実装します。
Samplerの設定(Eulerを使用する場合の例)
インポート文
EulerDiscreteSchedulerモジュールをインポートします。
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
Samplerを設定するコード
from_pretrainedメソッドの引数で以下のように設定します。
#StableDiffusionパイプライン設定
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, revision="fp16", torch_dtype=torch.float16)
Seedの設定
manual_seedメソッドでシード値を指定します。
最後にpipeメソッドの引数でほかのパラメータと一緒にgeneratorを設定します。
#seedを固定
generator = torch.Generator(device).manual_seed(2500)
Negative Prompt、Guidance Scale、Stepsの設定
Negative Prompt、Guidance Scale、Stepsの設定は全てpipeメソッドの引数で設定します。
また、先ほど設定したシード値についても同じくpipeメソッドの引数で設定します。
- Negative Prompt(ネガティブプロンプト) → negative_prompt
- Guidance Scale(ガイダンススケール) → guidance_scale
- Steps(ステップ数) → num_inference_steps
- Seed(シード) → generator
引数を指定するサンプルコードは以下となります。
image = pipe(prompt, negative_prompt=n_prompt, height=768, width=768, guidance_scale=7.5, num_inference_steps=15, generator=generator).images[0]
全体のソースコード
Stable Diffusion 2.0のインストール方法は以下の記事で解説していますので、事前に済ませておいてください。
今回紹介したパラメータを全て実装したソースコードは以下の通りです。
from datetime import datetime
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
#使用するモデルを設定
model_id = "stabilityai/stable-diffusion-2"
#デバイス(cpu or cuda)
device = "cuda"
#StableDiffusionパイプライン設定
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, revision="fp16", torch_dtype=torch.float16)
#使用するデバイスを設定
pipe = pipe.to(device)
#seedを固定
generator = torch.Generator(device).manual_seed(2500)
#画像生成の指示(呪文)
prompt = "a photo of an astronaut riding a horse on mars"
n_prompt = "moon"
#描画する回数を設定
num_images = 1
#イラスト生成
for i in range(num_images):
#推論実行
image = pipe(prompt, negative_prompt=n_prompt, height=768, width=768, guidance_scale=7.5, num_inference_steps=15, generator=generator).images[0]
#生成日時をファイル名にして保存
date = datetime.now().strftime("%Y%m%d_%H%M%S")
path = date + ".png"
image.save(path)
実行結果
先ほどのソースを実行すると、以下のような画像が生成されました。
人物が途切れてしまっていますが、指定したパラメータを使って画像が生成できることが確認できました。
Stable Diffusionのテクニックを効率よく学ぶには?
Stable Diffusionを使ってみたいけど、ネットで調べた情報を試してもうまくいかない…
そんな時は、操作方法の説明が動画で見られるUdemyがおすすめだよ!
動画学習プラットフォームUdemyでは、画像生成AIで高品質なイラストを生成する方法や、AIの内部で使われているアルゴリズムについて学べる講座が用意されています。
Udemyは講座単体で購入できるため安価で(セール時1500円くらいから購入できます)、PCが無くてもスマホでいつでもどこでも手軽に学習できます。
Stable Diffusionに特化して学ぶ
Stable Diffusionに特化し、クラウドコンピューティングサービスPaperspaceでの環境構築方法から、モデルのマージ方法、ControlNetを使った構図のコントロールなど、中級者以上のレベルを目指したい方に最適な講座です。
画像生成AIの仕組みを学ぶ
画像生成AIの仕組みについて学びたい方には、以下の講座がおすすめです。
画像生成AIで使用される変分オートエンコーダやGANのアーキテクチャを理解することで、よりクオリティの高いイラストを生成することができます。
まとめ
今回はStableDiffusionの主要なパラメータと、Pythonでの実装方法を解説しました。パラメータを使いこなすことで、より理想的なイラストを生成することができますので、ぜひ活用してみてください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント