LoRAモデルを適用した画像生成(Diffusersライブラリ)
そもそもLoRAとは?
LoRA(Low-Rank Adaptation) とは、Stable Diffusionなどの大規模モデルを軽量にチューニングできる技術。
モデル全体を再学習せず、一部のパラメータ(層)だけを微調整
小さな .safetensors や .bin ファイル(数MB〜数百MB)で済む
特定のスタイルや人物、構図などを表現できる
DiffusersでLoRAを使うための準備
1. 必要なライブラリ
code:bash
pip install diffusers transformers accelerate safetensors
2. モデル本体とLoRAファイルの準備
ベースモデル(例:stabilityai/stable-diffusion-xl-base-1.0)
LoRAファイル(例:CivitaiなどからDLした .safetensors)
コード例:SDXLでLoRAを使って画像生成
code:python
from diffusers import StableDiffusionXLPipeline
from diffusers.loaders import AttnProcsLayers
import torch
# ベースモデルの読み込み(float16 + safetensors)
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
torch_dtype=torch.float16,
variant="fp16",
use_safetensors=True
).to("cuda")
# LoRAモデルの読み込みと適用(safetensorsファイルのパス)
lora_path = "LoRAモデルのsafetensorsファイルのパス"
pipe.load_lora_weights(lora_path)
# LoRAの強度(weight)を調整(任意)
pipe.fuse_lora(lora_scale=0.7)
# プロンプトにLoRAのtriggerワードを追加(必要な場合)
prompt = "masterpiece, 1girl, trigger words"
# 画像生成の実行
image = pipe(prompt=prompt).images0 # 保存
image.save("lora_generated_image.png")
補足:重要なポイント
load_lora_weights LoRAファイルを読み込んで一時的に適用
fuse_lora() LoRAをベースモデルに「融合」して高速化
lora_scale=0.7 LoRAの反映度(強度)を指定(0.1〜1.0で調整)
trigger words LoRA特有のプロンプト
複数のLoRAを組み合わせるには?
code:python
複数のLoRAを組み合わせて、混ざった特徴を表現することも可能
他にもset_adapters(合成モード)を利用する方法もある
code:python
この例では、LoRA_A を60%、LoRA_Bを40%の強さで適用。
元のモデルには手を加えず、推論時にだけ動的にLoRAを組み合わせるのが特徴。
特徴
元のモデルを変更せず、その場で適用・解除できる(動的)
LoRA同士を柔軟に組み合わせられる
毎回 set_adapters() で適用が必要
fuse_lora との違い(融合モード)
● 融合モードの定義
fuse_lora() は複数のLoRAを事前に合成(融合)してベースモデルに統合してしまう処理。
code:python
pipe.fuse_lora(LoRA_A=0.6, LoRA_B=0.4)
この処理は、一度実行すれば LoRA をベースモデルに物理的に融合するので、その後 set_adapters() は不要
特徴
一度統合すれば LoRA は不要(ベースモデルが書き換えられる)
学習や再保存が必要なケースに向く
柔軟性は下がる(後から切り替え不可)
複数のLoRAの組み合わせを多数試したい用途には不向き