最強画像生成AIと話題のFLUX.1[dev]をローカル環境のDiffusersで使ってみた【Python】

Diffusers

PythonでFLUX.1 [dev]を使って、手元のPCを動かして画像生成してみました。

画像生成してみる

使用するコード

公式ページで紹介されているコードそのままでは認証の問題でうまく動作しないので、前回記事の通りアクセストークンを取得してから以下のコードを使用します。

import torch
from diffusers import FluxPipeline
from huggingface_hub import login

access_token = "hf_XXX"  # 取得したアクセストークンを入力
login(token=access_token)
pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev", 
    torch_dtype=torch.bfloat16, 
    use_auth_token=access_token
)
pipe.enable_model_cpu_offload()

prompt = "A cat holding a sign that says hello world"
image = pipe(
    prompt,
    height=1024,
    width=1024,
    guidance_scale=3.5,
    num_inference_steps=50,
    max_sequence_length=512,
    generator=torch.Generator("cpu").manual_seed(0)
).images[0]
image.save("flux-dev.png")

公式で紹介されているコードに、HuggingFace認証を付け加えています。
※2回目以降の実行時は、初回実行時にモデルがダウンロード済みのためアクセストークン不要っぽいです。

生成結果とかかった時間

生成結果は以下の通りです。

非常に素晴らしい結果ではないでしょうか。
従来モデルでは難しかった、画像中の文字表示が実現できているのが驚きです。

上述したプログラムを使えば、seedを固定しているので、どの環境でも同じ画像が生成されるはずです。(といっても、OSやGPUによって若干の差異は生じてしまうようです)

環境によって変動はあると思いますが、今回はGeForce RTX 4070 Ti SUPER(VRAM 16GB)の使用で、生成完了までに約1時間半かかりました。
また、2回目以降は考慮しなくても良いとはいえ、FLUXモデル(合計20~30GB?)のダウンロード時間も合わせると、かなりの時間がかかりました。

そこそこ良いグラボを使っているはずですが、1枚の生成でこれだけ時間がかかるので、弱いグラフィックボードやCPUでの動作はどうなってしまうのか・・・全く勧められません。

同時発表の別モデルにFLUX.1 [schnell]というのがあり、こちらの方が軽量っぽいので、今度試してみようと思います。

簡単な解説

基本的にはDiffusionPipelineなどと書き方が同じですが、今回max_sequence_lengthというパラメータが出てきて、初めて見たので調べてみました。

結論としてはよくわからなかったのですが、TensorFlowで出てくる「明示的な最大シーケンス長」なるものらしく、恐らくプロンプトの最大長を指定しているのかな?と思われます。

今回のFLUX.1 [dev]モデルは、従来親しまれてきたモデルとは異なり、最大トークン数に制限がないため、一般的な長さのプロンプトであれば、max_sequence_lengthで最大長を指定してあげた方が良いでしょう。

別のプロンプトで生成

先ほどのサンプルを流用し、他の設定はそのままに"A cute girl in Japanese anime style"(「日本アニメ風のかわいい女の子」)というプロンプトに変えて生成してみました。

クオリティはかなり高いですが、生成時間などコストを考えると、アニメ風の画像はStableDiffusionやStableDiffusionXLモデルでも良いような気がします。

Fluxでアニメ風の画像生成を検討されている方は、FluxとSDXLでそれぞれ何枚か生成・比較してみた方が良いでしょう。

今後の展望

今回は公式で紹介されているサンプルコードを少しいじったものを回してみましたが、生成完了までに時間がかかりすぎるため、実務的には量子化等を検討するか、軽量版モデルのFLUX.1 [schnell]を試すなどしなければなりません。

ちなみにですが、FLUX.1ではNSFW画像の生成は困難であるようです。
NSFW設定で生成したい方は、SDやSDXLなどの制限解除可能なモデルで生成するのが無難かと思われます。

何はともあれ、無事に生成できて満足です。

以上です。

スポンサーリンク

Diffusers

Posted by このめ