このページの目的
「生成の流れ」は LoRA を 学習するまでの流れを説明しています。このページは、学習済み LoRA を使って 1 枚の画像を生成する ときに、入力データがどの順番でどのモデル・どの重みを通って最終出力になるかをまとめます。
前提: LoRA
hacorenove style interior は ostris/flux-dev-lora-trainer で学習済み(170枚の学習画像、詳細は 生成の流れ 参照)。これを xlabs-ai/flux-dev-controlnet 側で参照して、各推論で読み込んでいます。
入力データ(このパイプラインに入ってくるもの)
| データ | 保存場所 | 役割 |
|---|---|---|
元画像 before_images/*.jpg |
10枚(リポジトリ内) | ControlNet の control_image として渡す。間取り・窓位置をここから引き継ぐ |
プロンプト prompts.json |
先頭 3 件を使用 | テキスト条件。negative_prompt も別途固定値を使用(窓・間取り変更を抑止) |
LoRA 重み (.tar) |
Replicate に保管 (replicate.delivery/...) |
学習で得た hacorenove スタイル。nonowarn/hacorenove-lora:<version> から trainings API で URL 解決 |
| ベースモデル FLUX.1-dev | Replicate サーバ内蔵 | 拡散モデル本体。ControlNet と LoRA はこれに後付けされる |
| ControlNet 重み (depth/canny/soft_edge v3) | Replicate サーバ内蔵 (XLabs) | control_type で選択される構造抽出&条件付けモデル |
推論ステップ
1入力をまとめる(クライアント側)
scripts/generate_controlnet.py がローカルで以下を組み立てて Replicate に POST する:
- 元画像を
base64 data URIに変換 →control_image - LoRA URL を
trainings.list()から解決 →lora_url - 選択された
control_type/control_strength/image_to_image_strength/lora_strength/prompt
このステップで使うもの
- before_images/*.jpg
- prompts.json
- LoRA URL (.tar)
↓
2ControlNet 前処理(Replicate 側)
control_image を control_type に応じて構造マップに変換する。
- depth:
DepthAnythingで深度マップを推定(壁・天井・家具の前後関係) - canny: Canny エッジ検出(線で構造を取る)
- soft_edge:
HEDで柔らかいエッジ
return_preprocessed_image=true で、この中間マップが追加出力される(ギャラリー右列の preprocess 画像)。
効くパラメータ
control_type振るdepth_preprocessor固定: DepthAnything
↓
3初期ノイズ生成(img2img 混合)
完全ランダムノイズではなく、元画像を一部ノイズで隠した状態から拡散を始める(img2img 方式)。
image_to_image_strength = 0なら完全ノイズから生成(元画像のテクスチャ無視、構造は ControlNet で別途固定)- 値が大きくなるほど元画像のテクスチャが残りやすい
効くパラメータ
image_to_image_strength振る
↓
4拡散ループ(FLUX.1-dev + ControlNet + LoRA)
steps 回(既定 28 回)、以下を繰り返してノイズを画像に近づける:
- FLUX.1-dev がベースの denoising を行う
- LoRA 重みがアテンション層に加算される(
lora_strengthでスケール) - ControlNet が step 2 で作った構造マップを
control_strengthの強さで条件付けする - テキスト側は
promptとnegative_promptをguidance_scale倍で対比させる(Classifier-Free Guidance)
効くパラメータ
control_strength振るlora_strength振るprompt振るnegative_prompt固定guidance_scale固定: 3.5steps固定: 28
↓
5出力 → ローカル保存 → ギャラリー
Replicate から
.webp URL が返り、scripts/generate_controlnet.py がローカルに保存する:
- 生成画像:
output/generated_controlnet/result_{ts}_{idx}.webp - preprocess 画像:
result_{ts}_{idx}_preprocessed.webp - パラメータ記録:
log_{ts}.json
make build で build.php が log を読み、 controlnet.html に並べる。
後段
build.php- →
dist/controlnet.html
パラメータ早見表
このリポジトリで OAT スイープしている軸と、固定している値の一覧。比較ページは ControlNet比較。
| パラメータ | 効く工程 | 値域 / 既定 | このプロジェクトでの扱い |
|---|---|---|---|
control_strength |
Step 4 (拡散ループの ControlNet 条件) | 0〜3 / 推奨 0.5〜0.75 | 振る 0.5 / 0.6 / 0.75 |
image_to_image_strength |
Step 3 (初期ノイズ) | 0〜1 / 推奨 0〜0.25 | 振る 0.0 / 0.15 / 0.25 |
lora_strength |
Step 4 (LoRA 重みスケール) | -1〜3 / 既定 1 | 振る 0.6 / 0.8 / 1.0 |
control_type |
Step 2 (前処理) + Step 4 (条件モデル) | depth / canny / soft_edge | 振る depth / canny / soft_edge |
prompt |
Step 4 (テキスト条件) | 任意 | 振る prompts.json の先頭 3 件 |
negative_prompt |
Step 4 (テキスト条件 / CFG 逆側) | 任意 | 固定 窓・間取り変更抑止系 |
guidance_scale |
Step 4 (Classifier-Free Guidance) | 1〜10 / 既定 3.5 | 固定 3.5(generate_lora.py と同値) |
steps |
Step 4 (拡散ステップ数) | 1〜50 / 既定 28 | 固定 28(generate_lora.py と同値) |
depth_preprocessor |
Step 2 (depth 抽出器) | DepthAnything / Midas … | 固定 DepthAnything |