3
3

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

Last updated at Posted at 2024-08-30

このブログは何?

画像生成AI FLUX.1 に Diffusers で LoRA を適用してみた の続編です。前回の記事で試した3つの LoRA のうち1つしか顕著な効果を確認できなかったのですが、X で、まゆひらさんがご紹介されていた QTCanimatedFeeling-FLUX-PAseer【Alpha】がとても良さそうでしたので Diffusers で試してみた記事となります

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

上の記事では、RTX2060 という VRAM が貧弱な GPU で動かすことを主眼にしていましたが、画像生成に FLUX.1 Dev で 40分、FLUX.1 Schnell で8分もかかってしまいました(共有VRAMへ大量に漏れ出しているためと思われますのでまだチューニング余地はありそうです)。今回の記事は クラウドで VRAM の大きな GPU仮想マシンを借りて検証していますの量子化やモデルオフローディングなどは省いています(ローカルで動作確認してクラウド実行という...不思議な感じがしなくもないですね)


FLUX.1 とは?

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

QTCanimation_lora_v1-PAseer.png

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 の紹介

QTCanimatedFeeling-FLUX-PAseer【Alpha】 を使用します。これは、アニメーションスタイルを強化するLoRAです。より複雑なドレス、より繊細な線画、より細かい目の表現などの効果がある LoRA です。

QTCanimatedFeeling-FLUX-PAseer【Alpha】による生成例

FLUX.1 Dev LoRAなし QTCanimatedFeeling-FLUX-PAseer【Alpha】

51.png

53.png

プロンプト a cute Japanese idle singer girl, long black 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 1127239343

61.png

63.png

プロンプト 3D animation style graphics reminiscent of Pixar of a magical girl in a pink costume. She is holding a magic wand. Beside her is a white cat. Seven-colored lights, petals and butterflies are dancing around them.
seed 1127239343

62.png

64.png

プロンプト modern anime style, a magical girl in a pink costume. She is holding a magic wand. Beside her is a white cat. Seven-colored lights, petals and butterflies are dancing around them.
seed 1127239343

「より複雑なドレス、より繊細な線画、より細かい目の表現などの効果」という開発者の説明のとおりアニメ塗りというよりはより繊細な表現を実現する効果があるようです

コード例

サンプルコード取得

サンプルのノートブックはこちら ↓ から取得してください

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

セットアップ

お好みの Jupyter 環境で setup.ipynb を上から順に実行します

PyTorchインストール
%pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

CUDA対応の PyTorchをインストールしています。インストールすべきバージョンが不明な場合は、以前の記事のCUDA 対応 PyTorch のインストールを参考にしてみてください

PyTorchバージョンの確認
%pip show torch

CUDA対応の PyTorch がインストールされたことを確認します。Version に バージョン番号に続いて +cu121 のような CUDA Toolkit バージョンが表示されていれば正しくCUDA対応の PyTorch がインストールされています。Version: 2.4.0 のように PyTorch のバージョン番号だけが表示された場合は、CUDA 対応ではありません

依存ライブライのインストール
%pip install -r requirements.txt

requirementsファイルから必要なパッケージをインストールしています

Hugging Face ログイン
from huggingface_hub import notebook_login
notebook_login()

FLUX.1 Dev を使う場合には、Hugging Face であらかじめ Black Forrest Labs のライセンス条件に同意していることが必要です。また、モデルにアクセスする際には、それが確認できるよう Hugging Face へのログインが必要です。Hugging Face アカウントやトークンについては以前の記事のライセンス条件への同意とHugging Face へログイン(Dev を使用する場合のみ)を参考にしてみてください

LoRA のダウンロード

こちらの"Download"をクリックして safeTensor ファイルをダウンロードします。ダウンロードしたファイルは、loras フォルダ内に配置します

サンプルノートブック

お好みの Jupyter 環境で FLUX1_Schnell_with_QTCanimatedFeeling_LoRA_girl.ipynb などを先頭から実行してください。

コードの説明

最初のセルで必要な Python パッケージをインポートしています

パッケージのインポート
import torch
from diffusers import FluxPipeline
import time
import ipywidgets

次のセルで Flux.1 dev をロードしています

Flux.1 dev のロード
pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    torch_dtype=torch.bfloat16
)
pipe.to("cuda")

次のセルで実際に画像を生成しています

画像生成
test_case = "51"
start_time = time.time()
image = pipe(
    prompt="a cute Japanese idle singer girl, long black 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",
    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(1127239343),
    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")

プロンプトは

a cute Japanese idle singer girl, long black 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

です。日本語に翻訳すると

黒い長髪の可愛い日本のアイドル歌手の女の子が、マイクを持って歌っています。彼女は白いアイドルのコスチュームを着て、ステージに立っています。3Dホログラムとレーザー効果を使った派手なコンサートです。

となります(翻訳は、"とにかく翻訳する青山アイさん")。

次のセルは生成された画像を表示しています

画像表示
image

次にプロンプトを少し変えて再び画像生成しています。まだ、LoRAは適用していません

画像生成
test_case = "52"
start_time = time.time()
image = pipe(
    prompt="modern anime style, a cute Japanese idle singer girl, long black 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",
    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(1127239343),
    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")

今度のプロンプトは

modern anime style, a cute Japanese idle singer girl, long black 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

です。これも翻訳すると

現代的なアニメスタイルで、可愛らしい日本のアイドル歌手の女の子です。長い黒髪で、彼女はマイクを持って歌っています。白いアイドルのコスチュームを着て、ステージに立っています。3Dホログラムとレーザー効果を使った派手なコンサートです。

となります。違いは"modern anime style"です。
そして、次のコードで生成した画像を表示しています

画像表示
image

次のセルのコードが Diffusers の pipeline に LoRA をロードしています。このコードより上で生成されている画像は LoRA 無しで Flux.1 のオリジナルの画像です。このコードより後の生成画像が LoRA を適用したものです。

LoRAのロード
pipe.load_lora_weights(
    pretrained_model_name_or_path_or_dict="loras",
    weight_name="QTCanimation_lora_v1-PAseer.safetensors"
)

以下のコードは LoRAを適用した Diffusers Pipeline を使って、上と同様に2種類のプロンプトで画像を生成しています。同じプロンプトの画像同士を較べてみると LoRA の効果が出ていることがわかります

FLUX.1 Dev LoRAなし QTCanimatedFeeling-FLUX-PAseer【Alpha】

51.png

53.png

プロンプト a cute Japanese idle singer girl, long black 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 1127239343
FLUX.1 Dev LoRAなし QTCanimatedFeeling-FLUX-PAseer【Alpha】

52.jpg

54.jpg

プロンプト modern anime style, a cute Japanese idle singer girl, long black 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 1127239343

えっと、あとがきです

FLUX.1 が登場してひと月くらいですが LoRA も沢山出てきていますね。今回は Diffusers でも LoRA を適用できることを再確認しましたが ComfyUI や Forge などでも FLUX.1 対応が進んでいてこれから楽しめそうなモデルです。

ところで今回試した LoRA とは関係ないのですが FLUX.1 は、"modern anime style" というプロンプトを追加すると帽子や天使の輪、角といった被り物が出てくる確率が高いようです。面白いですね。

記事を書きかけにして2週間程放置している間に ImageFX とか出て来て本当に油断できないですね。他にもいろいろ LoRA を試してから公開と思っていましたが記事が古くなり過ぎないうちに公開します(下書きに9年前の記事が4つも残っていることに気づいたときのトラウマが忘れられない....)。

最初の FLUX.1 の記事は、自宅の RTX2060 という非力な GPU で頑張っていたのですがあまりにも時間がもったいないので今回はクラウドで GPU マシンを借りてお試ししました。あっ、止めないと課金が!ということで

終わりだよ~(o・∇・o)

3
3
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
3