画像生成AI Stable Diffusionを使って画像出力する。その2  コード解説編

で、使用したコードの解説です。まだ、上の記事を見ていない場合は先に見てください。


from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
import torch
from diffusers import StableDiffusionPipeline

# 利用したいAIモデル
# Stable Diffusionにはさまざまな派生モデルがあります
model_id = "gsdf/Counterfeit-V2.5"

# パイプラインの作成
pipeline = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)

# GPUを使うように変更
pipeline = pipeline.to("cuda")

このコードは、Stable Diffusionと呼ばれる派生モデルを使用して、画像の生成や修復などのタスクを行うためのパイプラインを作成するためのものです。Stable Diffusionは、画像生成や修復において高品質な結果を提供するためのモデルです。
上記のコードでは、diffusersというモジュールから
StableDiffusionPipelineとDPMSolverMultistepSchedulerというクラスをインポートしています。
torchモジュールもインポートされています。

import torchについて
画像生成のときの計算の精度をfloat32からfloat16に落とすことで、画像生成の速度を高速にすることができる。公式も使用を推奨している方法で、実際に生成した画像を見比べたときに大きな差がないです。

使い方
パイプラインの作成に
torch_dtype=torch.float16
を追加する。

次に、利用したいAIモデルの識別子をmodel_idに指定します。この例では、"gsdf/Counterfeit-V2.5"というモデルを使用しますが、実際には他の派生モデルを選択することもできます。

ちなみに、"gsdf/Counterfeit-V2.5"というモデルはイラスト調の画像作成に特化しています。

prompt = """Unreal Engine,
Realistic,photorealistic,
4k,8k,16k,
elaborate,
hyper quality,
villa,
global illumination,
highly detailed,
soft lighting,
cinematic,
wide shot,
sharp focus,
realistic shaded,
light shining through"""
n_prompt = "human"

cfg_scale = 20 # スケール
steps = 100# ステップ

width = 512 # 出力画像の幅
height = 512 # 出力画像の高さ

# 画像を生成
image = pipeline(prompt=prompt,
negative_prompt=n_prompt,
guidance_scale=cfg_scale,
num_inference_steps=steps,
width=width,
height=height).images[0]

# 画像を表示
image

promptが生成のキーワード、n_pronptが生成して欲しくないキーワードとして関数に保存しますcfg_scaleはガイダンスのスケールを制御するパラメータであり、stepsは画像生成のステップ数を指定します。これらの値は、生成される画像の品質と処理時間に影響を与えます。キーワードを(elaborate),((elaborate))のように()で囲むことで、画像処理のキーワードとして優先的に画像に出現するようになります。また、同じキーワードを繰り返し使用することでも、効果は大きくなります。


cfg_scaleについて
このパラメータによってprompt,n_promtで指定したキーワードにどれだけ忠実な画像を作るかを設定することができます。
パラメータは、0~20の間で設定することが多いです。
0に近いほど、キーワードを無視して画像が作成されます。
キーワードの記述量が多く、具体的な画像が作りやすい状態ならば、パラメータの値を大きくして独自性を画像に持たせることができます。

stepsについて
画像生成のステップ数
このパラメータによって、画像の処理回数を指定することができます。
デフォ値は50で、品質の高い画像を出すときは100前後がいいです。
ただ単にこの値を大きくすればいいというものではないので、自分で模索するといいでしょう。



widthとheightは、生成される画像のサイズを指定します。
ピクセル単位での指定になります。512*512サイズが学習用の画像で多く採用されているので、この数値で出力した時の品質は高いです。

pipelineオブジェクトを使用して画像を生成します。pipeline()メソッドには、プロンプトやネガティブプロンプト、ガイダンススケール、ステップ数、出力画像の幅と高さなどが渡されます。生成された画像は、image変数に格納されます。

最後に、生成された画像を表示します。

なお、このコードはPythonで記述されているため半永久的に画像を生成することもできます。製本して販売するような行為は、クリエイターの人に悪影響が出かねないので、使い方には気をつけましょう。






コメント

このブログの人気の投稿

FFmpegで画像のピクセルサイズを指定して、変換する方法 忘備録

画像生成AI Stable Diffusionを使って画像出力する。その3 自分好みの女の子を作成しよう