diffusersでAnimagineXL3.1を使ってローカル環境で画像生成してみる【Python】

2024年9月30日Diffusers

スポンサーリンク

昨今、様々なツールの登場で画像生成はかなり身近なものになりつつありますが、やはりPythonでゴリゴリにコードを書いて画像生成するのも、自動化等を鑑みると考えなくてはならないところかと思います。

今回は、Animagine XL 3.1というモデルを使って、Pythonで画像生成する方法を紹介します。

必要なライブラリをインストールする

pip install diffusers transformers accelerate safetensors --upgrade

画像生成する

サンプルコード

以下は公式で紹介されているサンプルコードです。
※CUDA環境でないと動作しません。

import torch
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(
    "cagliostrolab/animagine-xl-3.1", 
    torch_dtype=torch.float16, 
    use_safetensors=True, 
)
pipe.to('cuda')

prompt = "1girl, souryuu asuka langley, neon genesis evangelion, solo, upper body, v, smile, looking at viewer, outdoors, night"
negative_prompt = "nsfw, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]"

image = pipe(
    prompt, 
    negative_prompt=negative_prompt,
    width=832,
    height=1216, 
    guidance_scale=7,
    num_inference_steps=28
).images[0]

image.save("./output/asuka_test.png")

seed指定がありませんので出力結果はランダムになりますが、実行してみたところ、以下の結果が得られました。

とても簡単にできました。
かなり質の良い結果が得られたと思います。

ちなみに、DiffusionPipelineの代わりにStableDiffusionXLPipelineを使っても同じ結果が得られます。

パラメータについて

生成にあたって設定されるパラメータは、以下のような意味合いを持っています。
※かなり厳密さを欠いた説明です。

  • prompt:生成する内容
  • negative_prompt:生成しない内容(生成を避ける内容)
  • width:画像の幅
  • height:画像の高さ
  • guidance_scale:画像生成の自由度(プロンプトを遵守する度合い)
  • num_inference_steps:推論ステップ数(画像をきれいに仕上げる回数)

パラメータを適当に設定しなければ、画像が崩壊します。
例えばwidthやheightを極端に大きく(あるいは小さく)設定してしまうと、モデルが「そんなサイズの画像は書けない」と言わんばかりに変な画像を仕上げてきます。

あるいは、今回は取り上げませんが、良かれと思って設定したschedulerやVAEが悪影響を与える場合もありますので注意しましょう。

以上です。
今後、時間を作ってもっと細かい調整をしたり、他のモデルを使って生成したりした内容の記事も書こうと思います。

【Reference】

https://huggingface.co/cagliostrolab/animagine-xl-3.1

Diffusers

Posted by このめ