3
2

画像生成AI FLUX.1 に Diffusers で LoRA を適用してみた

Last updated at Posted at 2024-08-16

このブログは何?

Stable Diffusion 開発者達が開発した FLUX.1 が評判です。早くも LoRA も出て来て ComfyUI などを使った画像生成例のブログ記事も見かけるようになりました。そこでこのブログでは、Hugging Face Diffusers で FLUX.1 に LoRA を適用してみた経験をまとめています

Diffusers での FLUX.1 による画像生成自体はこちら ↓ のブログにまとめています。

このプログには続編↓があります。


FLUX.1 とは?

a13jb-dsahe.png

FLUX.1は、Stable Diffusionの開発者たちが設立したBlack Forest Labsの画像生成AIモデルです。プロンプトに対する高い忠実性と優れた画像品質で注目を集めています。パラメータ数は、12B(120億)です。

FLUX.1 の特徴

  • 高品質な画像生成 : 人物の顔や手、指などの複雑なディテールを正確に描写することができ解剖学的な崩壊もほとんど見られない高品質な画像を生成できます
  • プロンプトへの忠実性 : テキストプロンプトによるユーザーの指示を反映した画像を生成する高い能力を持っています
  • 用途に合わせた3つのモデル : 最高性能でBlack Forest Labsやそのパートナー企業のAPIサービスでのみ利用可能な Pro モデル、高性能でオープンウェイト(fine-tuning modelなどの派生物の商用利用は不可)な Dev モデル、わずか 4 Step で高品質な画像を生成できる高速モデルの Schnell の 3つのモデルがあります

FLUX.1 Schnell の 4 Step 高速生成は昨年秋に流行った LCM : Latent Consistency Model(潜在一貫性モデル) によるリアルタイムお絵描きの興奮を思い出しますね!


Diffusers とは?

Diffusersは、Hugging Faceが開発した拡散モデル(Diffusion Model)のためのオープンソースライブラリです

Diffusers の特徴

  • 簡潔さ : 数行のコードで画像生成などの複雑なタスクを実行できます
  • 柔軟さ : モデルのカスタマイズや新しいモデルの開発が容易にできます
  • 豊富な事前学習済みモデル : Hugging Face Hub からStable Diffusion、FLUX等の多数の事前学習済みモデルを簡単にダウンロードして使用できます

LoRA とは?

LoRA (Low-Rank Adaptation) は、大規模な事前学習済みモデルを効率的にファインチューニングするための技術です。特に画像生成AIの分野で元のモデルの画風を変えたり特定の種類の画像を意図したとおりに生成されやすくする目的で多く活用されています

コード例で使う LoRA の紹介

Modern Anime LoRA Adapter for FLUX.1 devv2.0 lora

名前のとおり現代的なアニメスタイルの画像を生成できる LoRA です。トリガーワード "modern anime style," をプロンプトに入れることで LoRA の効果が発動します

今回の検証では、この LoRA は Diffusers との組み合わせでは効果が見られませんでした。プロンプトによって異なるかもしれません

XLabs-AI flux-RealismLora

写真のようなリアルな画像を生成できる LoRA です。

今回の検証では、この LoRA は Diffusers との組み合わせでは効果が見られませんでした。プロンプトによって異なるかもしれません

FLUX Tarot v1

タロットカードのような雰囲気の画像を生成できる LoRA です。トリガーワードは、"in the style of TOK a trtcrd tarot style" です。

今回の検証では、唯一、Diffusers との組み合わせで顕著な効果が見られた LoRA です


コード

コードのダウンロード

リポジトリのクローン
git clone https://github.com/kutsushitaneko/flux1-diffusers-lora
cd flux1-diffusers-lora

コードの説明

ライブライのインポート
import torch
from diffusers import FluxPipeline
import time
import ipywidgets
  • FluxPipeline は、Diffusers で FLUX.1 を使うために必要なものです。モデルを Hugging Face Hub やローカルからロードしてパイプラインを生成したり、推論(画像生成)を行うメソッドを持っています
  • ipywidgetsは、Jupyter Notebook の場合にプログレスバーを表示するときに使用されます。Python スクリプトの場合は不要です
モデルのロードとパイプラインの生成
pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    torch_dtype=torch.bfloat16
)
  • from_pretrainedは引数で指定されたモデル名を元に Hugging Face Hub からモデルをダウンロードして Dissusers のパイプラインを生成します
  • black-forest-labs/FLUX.1-devが、FLUX.1 dev のモデル名です。これを指定することで https://huggingface.co/black-forest-labs/FLUX.1-dev からモデルがダウンロードされます
  • pipe.to("cuda")は、モデルを GPU へ転送しています
LoRAのロード
pipe.load_lora_weights(
    pretrained_model_name_or_path_or_dict="multimodalart/flux-tarot-v1",
    weight_name="flux_tarot_v1_lora.safetensors"
)
  • pretrained_model_name_or_path_or_dict でLoRAモデルをどこからロードするのかを指定します。Hugging Face Hub の LoRA リポジトリID、ローカルのディレクトリを指定できます
  • weight_name で LoRAモデルの名前を指定します。pretrained_model_name_or_path_or_dictで指定したロケーションに1つしかモデルがない場合は省略できます
画像生成
test_case = "44"
start_time = time.time()
image = pipe(
    prompt="a white cat eating pasta, in the style of TOK a trtcrd, tarot style",
    height=1360,
    width=768,
    guidance_scale=3.5,
    output_type="pil",
    num_inference_steps=20,
    max_sequence_length=512,
    generator=torch.Generator("cpu").manual_seed(523233344),
    joint_attention_kwargs={"scale": 1.0}
).images[0]
end_time = time.time()
print(f"画像生成時間: {end_time - start_time}")
image.save(f"output/{test_case}.png")

ここは、通常の画像生成と変わるところはありません。この例の Tarot LoRA の場合は、LoRA が効果を表すためにトリガーキーワード "in the style of TOK a trtcrd, tarot style" が必要ですので、プロンプトに追加しています

GPU に A40 を使ったときの生成時間は 20秒程でした

実行方法

Jupyter ノートブック環境で、以下の順にノートブックを実行します

  1. setup.ipynb を実行: PyTorch は、CUDA 12.1 対応の最新版をインストールするように pip コマンドを記載しています。お使いの環境に合わせて適宜書き換えてください。こちら を参考にしてみてください
  2. FLUX1_with_{LoRA名}_{補足}.ipynb の各ノートブックを実行

ここで紹介しているコードは、48GB VRAM 搭載の A40 と CPU側メモリが 50GB の環境で実行しています。そのため、Model Offloding や量子化はせずにストレートな推論コードとなっています。FLUX.1 は巨大なモデルですので小さな VRAM 環境の場合には、Model Offloading や量子化が必要になると思います。こちらのブログはRTX2060という弱弱GPUでFLUXを動かしたときの記録ですので参考にしてみてください

生成例

FLUX.1 dev LoRAなし LoRA(Modern Anime LoRA Adapter for FLUX.1 dev)
生成画像 flux_no_lora_girl_modern_anime_style_523233344.png flux_modern_anime_lora_girl_moder_anime_style_523233344.png
プロンプト modern anime style, a cute Japanese idle singer girl, long marine blue hair, She is singing ,holding a microphone, wearing white idle costume, standing on the stage .This is a flashy concert with 3D holograms and laser effects modern anime style, a cute Japanese idle singer girl, long marine blue hair, She is singing ,holding a microphone, wearing white idle costume, standing on the stage .This is a flashy concert with 3D holograms and laser effects
seed 523233344 523233344

Modern Anime LoRA は、(Diffusers&私がテストした限りのプロンプトでは)LoRA の効果を確認できませんでした。LoRA 自体の効果を見たいので LoRA なしの場合にもトリガーワード "modern anime style, " を入れています。トリガーワード自体がプロンプトとしても意味があって FLUX が認識していそうですので効果の確認が難しいですね。

FLUX.1 dev LoRAなし LoRA(XLabs-AI flux-RealismLora)
生成画像 121.png 123.png
プロンプト Photo of a cute Japanese idle singer girl, long black hair, She is singing ,holding a microphone, wearing Taisho Romantic Hakama costume, standing on the stage .This is a flashy concert with 3D holograms and laser effects Photo of a cute Japanese idle singer girl, long black hair, She is singing ,holding a microphone, wearing Taisho Romantic Hakama costume, standing on the stage .This is a flashy concert with 3D holograms and laser effects
seed 523233344 523233344

XLabs-AI flux-RealismLoraも(Diffusers&私がテストした限りのプロンプトでは)LoRA の効果を確認できませんでした。XLabs-AI のリポジトリのコードでは Diffusers を使っていませんのでXLabs-AI謹製のコードを使うべきかもしれませんね。main.py がLoRAを使って画像生成するコードです。

FLUX.1 dev LoRAなし LoRA(FLUX Tarot v1)
生成画像 42.png 44.png
プロンプト a white cat eating pasta, in the style of TOK a trtcrd, tarot style a white cat eating pasta, in the style of TOK a trtcrd, tarot style
seed 523233344 523233344

FLUX Tarot v1 は、LoRA の有無で顕著な違いが見られました。確かに LoRA があった方がよりリアルなタロットカードの雰囲気が出ています。こちらも LoRA 自体の効果を見たいので LoRA なしの場合にもトリガーワード "in the style of TOK a trtcrd, tarot style" を入れています。

もう一つ効果が顕著に現れた LoRA を取り上げた続編↓を書きました。

おまけ

他にもいろいろ記事を書いていますので良かったらお立ち寄りください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2