【ComfyUI】LoRAを複数適用する際の重み調整で発生する問題と解決テクニック

問題の概要:LoRA複数適用時の出力不良と重み調整の難しさ

ComfyUIで複数のLoRA(Low-Rank Adaptation)モデルを1つの画像生成ワークフローに適用する際、ユーザーは以下のような問題に直面することがあります。

  • 複数のLoRAを単純に接続しただけでは、意図した特徴が合成されず、一方のLoRAの効果のみが強く出てしまう。
  • CLIPTextEncode」ノードのプロンプトに複数のLoRAトリガーワードを記述しても、生成画像が崩壊したり、ノイズが多くなったりする。
  • LoRAの適用強度(weight)を調整する値(通常は1.0)を変更しても、効果が直感的ではなく、細かい制御が難しい。
  • エラーメッセージこそ出ないものの、期待したスタイルやキャラクターの合成が達成できないという「静かな失敗」が発生する。

例えば、「アニメ風スタイルのLoRA」と「特定キャラクターのLoRA」を組み合わせて、そのキャラクターをアニメ風で描画したい場合、単純な適用ではスタイルのみが強く出てキャラクターの特徴が失われたり、その逆の現象が起きたりします。これは、複数のLoRAが同じモデル(U-NetやCLIP)の重みを同時に変更しようと競合することが原因です。

原因の解説:LoRAのメカニズムと重みの競合

LoRAは、大規模な事前学習モデル(Stable Diffusion等)の特定の層の重み更新を、低ランクの行列(AとB)の積で近似する技術です。推論時には、元の重みにこの低ランク行列の積を加算します。

W' = W + ΔW, where ΔW = B * A

ここで、複数のLoRA(LoRA_1, LoRA_2)を同じモデルに適用する場合、数学的には重みの更新量が加算されます。

W'_total = W + ΔW_1 + ΔW_2

問題は、これらの更新量ΔW_1ΔW_2が互いに干渉し合う点にあります。両者が同じ特徴を異なる方向に変更しようとすると、出力が不安定になったり、一方の効果が打ち消されたりします。また、各LoRAの「強度(strength)」は、このΔWに乗算される係数(α/rank のスケーリングに類似)として機能しますが、複数適用時には単一の係数では個別の制御ができません。

ComfyUIの標準ノード「LoraLoader」は、複数のLoRAを読み込むことができますが、内部的には読み込んだ順に重みを適用するシンプルな加算を行っています。これが「競合」の直接的な原因です。

解決方法:効果的な重み調整とワークフロー構築のステップバイステップ

複数のLoRAを調和させて適用するには、以下のテクニックを組み合わせます。

ステップ1:基本のワークフロー構築とLoRA Loaderの接続

まず、複数のLoraLoaderノードを直列に接続する基本形を確認します。

[CheckpointLoader] → [LoraLoader (LoRA_A, strength=1.0)] → [LoraLoader (LoRA_B, strength=1.0)] → [CLIPTextEncode] & [UNET]

この状態で、プロンプトに各LoRAのトリガーワード(例: “, “)を入れても、競合が起きやすい状態です。

ステップ2:個別の強度(strength)の微調整

最も基本的な調整は、各LoraLoaderノードのstrength_modelstrength_clipの値を1.0より下げて調整することです。一般的に、複数適用時は0.7〜0.9の範囲から始めると安全です。

  • スタイルLoRA: strength_model=0.8, strength_clip=0.8
  • キャラクターLoRA: strength_model=0.9, strength_clip=0.9

この調整は、各LoRAの更新量ΔWに直接乗算する係数を変更する行為です。

ステップ3:高度な制御のための「ComfyUI-Impact-Pack」サブワークフローの活用

より細かい制御には、Impact Packなどのカスタムノードが提供するLora Loader Stack (Impact)が有効です。これにより、複数のLoRAとその強度を一括で定義し、より制御された方法で適用できます。

# 疑似コード的なノード設定例
Lora Loader Stack (Impact) 内の設定:
- Lora 1: `anime_style_v2.safetensors`, model_str=0.7, clip_str=0.7
- Lora 2: `character_xl_v10.safetensors`, model_str=0.9, clip_str=0.8

この方法は、適用の順序と強度の管理を一元化し、実験を容易にします。

ステップ4:プロンプト内重みと負の重みの活用

CLIPTextEncodeノードのプロンプト欄では、LoRAのトリガーワードに加え、通常のプロンプト重み構文を組み合わせて影響力を調整できます。

masterpiece, best quality, (anime style:1.2), character_X, (blue hair:0.9), (red eyes:1.1), <lora:anime_style:0.8>, <lora:character_x:1.0>

さらに、特定の要素を抑制するために、LoRAの強度に負の値を試すこともあります(全てのLoRAで機能するわけではありません)。

<lora:noise_offset:0.5>, <lora:over_saturation:-0.3> # 過剰な彩度を抑制

ステップ5:LoRA適用対象レイヤーの分離(上級者向け)

一部のカスタムノードやスクリプトでは、LoRAをU-Netの特定のレイヤー(例: エンコーダー層のみ、デコーダー層のみ)にのみ適用する機能を提供します。スタイルLoRAをエンコーダー寄りに、キャラクターLoRAをデコーダー寄りに適用するなど、空間的に適用領域を分離することで競合を減らせる可能性があります。これは実験的なアプローチであり、使用するノードの機能に依存します。

コード例・コマンド例

以下は、2つのLoRAを調整して適用するComfyUIワークフローの重要な部分をJSONから抜粋した疑似例です。

// ノード接続関係の一部を表現
{
  "4": {
    "class_type": "LoraLoader",
    "inputs": {
      "lora_name": "anime_style.safetensors", // スタイルLoRA
      "strength_model": 0.75, // U-Netへの影響度をやや抑える
      "strength_clip": 0.75,  // CLIPへの影響度も同様
      "model": ["1", 0], // CheckpointLoaderからのモデル入力
      "clip": ["1", 1]  // CheckpointLoaderからのCLIP入力
    }
  },
  "5": {
    "class_type": "LoraLoader",
    "inputs": {
      "lora_name": "detailed_character.safetensors", // キャラクターLoRA
      "strength_model": 0.9, // キャラ特徴は強めに
      "strength_clip": 0.85,
      "model": ["4", 0], // 前のLoraLoaderからのモデル入力
      "clip": ["4", 1]  // 前のLoraLoaderからのCLIP入力
    }
  },
  "6": {
    "class_type": "CLIPTextEncode",
    "inputs": {
      "text": "masterpiece, (best quality:1.2), 1girl, (anime style:1.1), character_X, smiling, <lora:detailed_character:1>", // プロンプト内重みも併用
      "clip": ["5", 1]
    }
  }
}

また、ターミナルからComfyUIを起動する際、メモリ不足によるクラッシュを防ぐために、重いLoRAを複数読み込む場合はあらかじめメモリを確保しておくことが望ましいです。

まとめ・補足情報

ComfyUIで複数のLoRAを効果的に使用するには、「単純な加算では競合が起きる」という根本を理解し、強度の段階的調整、サブワークフロー活用、プロンプトエンジニアリングを組み合わせる必要があります。

実践的なアドバイス:

  1. ベースモデル選定: マージされた特殊なモデルより、純粋なSDXL 1.0などのベースモデルの方が、複数LoRAの適用結果が予測しやすいです。
  2. 一貫したトレーニング: 使用するLoRA同士が似たデータセットや方法で学習されていると、互換性が高まる傾向があります。
  3. 小さいステップで実験: 強度は0.1刻みで変化させ、生成サンプルを比較します。ComfyUIの「Queue Prompt」で複数パラメータを連続生成できる機能を活用しましょう。
  4. LoRAの特性理解: 各LoRAが主に「スタイル」、「キャラクター」、「構図」、「質感」のどれに影響するかを把握しておくと、調整方針が立ちます。

複数LoRAの調整は試行錯誤を要しますが、適切なテクニックを用いることで、単一のLoRAでは実現できない独自の画像生成の幅を大きく広げることができます。ワークフローを保存し、どの設定でどのような結果が得られたかを記録する習慣をつけることが、上達への近道です。

この記事は役に立ちましたか?