今回はStable DiffusionでSeed値を固定して同じイラストを生成する方法について解説します。
PythonのコードからSeed値をマニュアルで設定することで、出力される画像を制御することができますので、ぜひイラスト作成に活用してみてください。
また、当ブログ内のStable Diffusion関連の記事を以下のページでまとめていますので、あわせてご覧ください。

Stable Diffusionとは
Stable Diffusion(ステーブル・ディフュージョン)は2022年8月に無償公開された描画AIです。ユーザーがテキストでキーワードを指定することで、それに応じた画像が自動生成される仕組みとなっています。
NVIDIAのGPUを搭載していれば、ユーザ自身でStable Diffusionをインストールし、ローカル環境で実行することも可能です。
(出典:wikipedia)

StableDiffusion 2.xのセットアップ
以下のコマンドを実行してパッケージをインストールします。
pip install diffusers[torch]==0.9 transformers
pip install --upgrade --pre triton
StableDiffusionのリポジトリを取得してインストールします。
pip install --upgrade git+https://github.com/huggingface/diffusers.git transformers accelerate scipy
以上でStableDiffusion 2.0のセットアップは完了です。
Seed値とは
Generative Adversarial Networks (GANs)やVariational Autoencoders (VAEs)などの深層学習に基づく画像生成モデルでは、生成される画像を制御するために、Seed値を使用することができます。Seed値は、生成アルゴリズムの乱数生成部分に入力されます。これにより、同じ生成アルゴリズムから生成される画像が、Seed値によって異なるものとなります。
Seed値は、数値または文字列であり、適切な値を選ぶことで、生成モデルが生成する画像の質と多様性を制御することができます。
Stable Diffusionでは、同じプロンプト(呪文)を入力しても毎回違ったイラストが生成されます。しかしこのSeed値をマニュアルで固定してやることで同じ絵を生成することが可能になります。
Stable Diffusionの学習済みモデル Anything V4.0
Stable Diffusionは使用するモデルによって、出力されるイラストが大きく変わります。今回は2次元のアニメ調専用にチューニングされた学習済みモデル、Anything V4を使用します。Anythin V4の使い方は以下の記事で詳細を解説しています。

作成したソースコード
実際にSeed値を固定して画像を生成するためのPythonコードを解説します。
コード解説
manual_seedメソッドの引数で、乱数を生成するためのシードを設定します。
#seedを固定
generator = torch.Generator(device).manual_seed(2500)
先ほど設定したシード値を、推論実行時にpipeメソッドにパラメータとして渡します。
#推論実行
image = pipe(prompt, height=768, width=768, guidance_scale=7.5, generator=generator).images[0]
全体のソースコード
以下が今回作成した全体のソースコードです。
from datetime import datetime
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
#使用するモデルを設定
model_id = "andite/anything-v4.0"
#デバイス(cpu or cuda)
device = "cuda"
#StableDiffusionパイプライン設定
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.float16)
#使用するデバイスを設定
pipe = pipe.to(device)
#seedを固定
generator = torch.Generator(device).manual_seed(2500)
#画像生成の指示(呪文)
prompt = "A wizard woman with long, flowing purple robes stands on a plateau in a fantasy world of swords and magic. She has white hair, a pointed hat and holds a staff in one hand. The plateau overlooks a large, lush forest with towering trees in shades of green and brown, and a winding river below. The sky is a brilliant blue, peppered with white clouds, and a rainbow arches across the sky. In the distance, a castle can be seen perched atop a hill. Art style: Animation."
#描画する回数を設定
num_images = 1
#イラスト生成
for i in range(num_images):
#推論実行
image = pipe(prompt, height=768, width=768, guidance_scale=7.5, generator=generator).images[0]
#生成日時をファイル名にして保存
date = datetime.now().strftime("%Y%m%d_%H%M%S")
path = date + ".png"
image.save(path)
実行結果
今回の動作テストで使用するプロンプトは以下の記事で紹介しているものを使用します。

こちらが実際に使用したプロンプトです。
A wizard woman with long, flowing purple robes stands on a plateau in a fantasy world of swords and magic. She has white hair, a pointed hat and holds a staff in one hand. The plateau overlooks a large, lush forest with towering trees in shades of green and brown, and a winding river below. The sky is a brilliant blue, peppered with white clouds, and a rainbow arches across the sky. In the distance, a castle can be seen perched atop a hill. Art style: Animation.
Seed値は先ほどのソースコードで記述した通り、「2500」という値を指定しました。
生成1回目
以下のように森の中に立っている魔法使いの女性の絵が生成されました。

生成2回目
全く同じプロンプト、Seed値で再度生成した結果、以下のような絵が出力されました。

Seed値を固定るすることで全く同じ絵が生成できました。

Stable Diffusionのローカル環境
Stable Diffusionを使用する際にGoogle ColaboratoryやWebサービスを利用されている方も多いかと思います。しかし、最近Google Colabの無料での使用範囲が大きく制限されたり、Webサービスでは月額費用がかかったりします。
欲しいイラストを生成するにはかなりの回数をトライする必要があるため、これらの制約に縛られることなく使用できるローカル環境を構築するのがおすすめです。
ローカルのPCに搭載するグラフィックボード
ローカルマシンで実行する上で重要になってくるのがグラフィックボードです。
Stable Diffusionでイラストを生成するために実行される推論処理を、グラフィックボード上のGPUを使って大幅に高速化することができます。
トライする回数が増えれば品質の高いイラストが生成される可能性が上がりますので、グラフィックボードは重要です。Stable Diffusionで使用するためのGPUは2022年に新たにNVIDIAから発売されたRTX4000シリーズのGPUとVRAM12GB以上のものがおすすめです。最近は半導体不足も一服したこともあり、新しい製品ながら価格が下がりつつあります。
エントリーモデルのGPU
予算を安く抑えたい方向けにはRTX4070を搭載したグラフィックボードがおすすめです。
予算に余裕がある方向け ミドル~ハイエンド
予算に余裕がある方向けにおすすめのRTX 4080、ビデオメモリ16GB以上搭載のモデルです。
大サイズの画像を高速に生成したい方向けのハイエンドGPU、RTX 4090 ビデオメモリ24GB搭載モデルです。
予算とパフォーマンスに合わせて選んでみてください。
画像生成AIについて学ぶ
動画学習プラットフォームUdemyでは、画像生成AIで高品質なイラストを生成する方法や、AIの内部で使われているアルゴリズムについて学べる講座が用意されています。
Udemyは講座単体で購入できるため安価で(セール時1500円くらいから購入できます)、PCが無くてもスマホでいつでもどこでも手軽に学習できます。
画像生成AIの使い方を学ぶ
Stable DiffusionやMidjourneyの使い方や活用方法を勉強したい方には、以下の講座がおすすめです。

画像生成AIの仕組みを学ぶ
画像生成AIの仕組みについて学びたい方には、以下の講座がおすすめです。
画像生成AIで使用される変分オートエンコーダやGANのアーキテクチャを理解することで、よりクオリティの高いイラストを生成することができます。

UdemyのStable Diffusionなど、AIアート関連の講座は海外のものも多いですが、ブラウザのリアルタイム翻訳機能を使うことで日本語字幕付きで視聴できます。
Udemyの海外講座の字幕を日本語化する方法
まとめ
今回はStable DiffusionでSeed値を固定して同じイラストを生成する方法について解説しました。
お気に入りのイラストが生成されたらそのSeed値を保存しておくことで、同じイラストを高画質で出力したり、キャラクターを固定して違うポーズをとらせるなど、色々応用できますのでぜひ試してみてください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。
参考
