本文へスキップ

効かない・破綻する時の対処

色移り・複数キャラの混線・タグ無視・手の破綻・重み過多・矛盾タグを、症状から原因と対処へ引ける形で整理する。

思い通りに出ない原因の多くは「プロンプトの書き方が下手」ではなく、学習データの構造かCLIPの計算式のどちらかに理由がある。原因が分かれば対処は機械的に決まる。以下の数値はDanbooru公式APIの2026-08-21実測値と、各実装のソースコードが根拠。

症状から引く早見表

症状主原因最初に試すこと
服の色が髪や背景に移るCLIPの因果self-attentionによる文脈混入 + cross-attentionに空間束縛がない色と名詞を分けず blue dress のようなDanbooru複合タグにする
2人の髪色・服が入れ替わるDanbooruタグは画像単位でフラット。属性の帰属情報が学習データに存在しない領域指定(Regional Prompter / Forge Couple / Attention Couple)
タグを足しても何も変わらないエイリアス・非推奨・post_count 0 のいずれかDanbooruで正規名と post_count を確認
マイナーキャラが似ないそのキャラの学習枚数が閾値以下重みを上げるのではなく core_tags(外見特徴タグ)を併記
手・指が破綻するf8 VAEの圧縮で高周波構造が落ちる + 学習信号自体が希薄ADetailer / inpaint / hand ControlNet。ネガティブ単独では直らない
1つ強調したら別の場所が崩れたA1111の重み実装がチャンク全体を再スケールしているSettings の Emphasis を No norm にする
構図が毎回破綻する排他的なタグを同時指定している視点・時間帯・画角タグの重複を疑う
色が焼ける・彩度が飽和するCFG過大、またはv-predモデルの設定不備CFGを推奨域へ(NoobAI eps 5〜6 / v-pred 4〜5)。v-predはCFG Rescaleを併用(公式資料の推奨値は0.2〜0.7と幅がある)

post_count とタグの学習度

あるタグが効くかどうかは、そのタグが学習キャプションに何回書かれたかでほぼ決まる。 Danbooru の post_count はその代理指標になる。効かないタグには4つの型がある。

型A: エイリアス専用タグ(post_count = 0)

Danbooru上では検索が転送されるが、キャプションに書かれるのは正規名だけ。エイリアス名を書いても学習信号はゼロになる。

書きがちなタグpost_count正規名正規名のpost_count
blond hair0blonde hair2,146,505
big breasts0large breasts2,230,442
extra fingers0extra digits527
missing limb0amputee10,674
clavicle0collarbone1,097,206

blondblonde の e 一文字で完全に無効になる。ここは実際に頻発する。

型B: 非推奨タグ(is_deprecated = true)

Danbooru公式ヘルプによれば、非推奨タグは新規投稿に付与できず、既存投稿からは削除のみ。理由は「意味が不明瞭」「広すぎる」「主観的」など。したがって新しい画像には一切付かず、post_count は単調に減っていく。

post_count が残っている代表例: eyebrows 39,117 / looking away 34,942 / uniform 26,625 / light 14,886 / pose 11,920 / wall 7,947 / fur 5,654 / shiny 4,817。これらは「弱くて曖昧な信号がある」状態。

一方 open eyessexy は非推奨かつ post_count 0 で、完全なゼロ信号にあたる。

型C: タグレコードはあるが誰も使っていない

detailed face 0 / beautiful eyes 0 / bad hand(単数形)0。perfect anatomy に至ってはタグレコード自体が存在しない。CLIPが英語として読む以上のことは起きない。

型D: post_count が巨大でも画像内容と無関係

Danbooruの category 5(Meta)には、画像の中身と相関しないものが混じる。commentary_request6,262,874件もあるが、これは「翻訳リクエストが付いているか」というメタ情報で、絵の内容とは無関係。bad id 1,440,230 / duplicate 42,386 も同様。

ただし同じMetaでも highres 8,031,023 / absurdres 2,938,461 / lowres 112,301 / jpeg artifacts 27,325 / scan artifacts 4,015 は解像度や画質と直接相関するので有効。category だけでも post_count だけでも判定できないというのがここの要点。

逆の注意:Danbooruに無くても効くタグがある

worst quality はDanbooruにタグレコードすら無く、low quality best quality normal quality masterpiece はいずれも post_count 0(masterpieceは非推奨)。それでも効く。これらはIllustriousやNoobAIがスコアや人気度のパーセンタイルから合成して学習キャプションに注入した人工タグだからだ(NoobAIは人気度パーセンタイル、Illustriousはスコア基準)。

正しい判定条件は「Danbooruに無く、かつモデル側も注入していない → 効かない」。

学習度の閾値(NoobAI公式マニュアル)

Laxhar Lab配布のNoobAI-XL User Manualは、公式トリガーワード表の列に定量的な目安を書いている。

指標目安意味
countキャラは200以上、画風は100以上その概念の再現度の期待値
solo_count50以上単独キャラでの枚数。countより精度の高い指標とマニュアルが明言
core_tagsキャラの外見特徴タグ。再現度不足時に併記して補強する

マイナーキャラが出ないときの正しい対処は、重みを上げることではなく core_tags を足すこと。 例えば hatsune_miku の core_tags は 1girl, aqua eyes, blue eyes, very long hair, aqua hair, long hair, twintails, detached sleeves。閾値自体はNoobAI系列に対する数値なので、他モデルへの外挿は目安にとどまる。

Illustrious技術レポートも同じ問題を認めており、「stained glasssword は正確に生成できるが、covering wound with left hand のような複雑な概念はデータ不足で苦手」と明記している。

色移り(colour bleeding)

なぜ起きるか

SIGGRAPH 2023の Attend-and-Excite(arXiv:2301.13826)は拡散モデルの失敗を2つに定式化した。catastrophic neglect(プロンプト中の被写体が生成されない)と incorrect attribute binding(色などの属性が正しい被写体に結び付かない)で、原因は cross-attention が全ての被写体トークンに均等に注意を割かないこと。これに2つの構造要因が重なる。

  1. CLIPテキストエンコーダは因果マスク付きself-attentionを使う。 各トークンは自分より前のトークンしか見られない一方向文脈なので、後ろの名詞は前にある全ての色トークンの文脈を吸い込む。red hair, blue dress と書くと dress の埋め込みに red の文脈が入る。
  2. U-Net側に空間的な束縛が一切ない。 cross-attentionの条件付けはキャンバス全体にグローバルに効く。「この色はこの領域」という情報を持たせる仕組みがSDXLには無い。

対策(確実な順)

1. Danbooruの複合タグを使う — 最も確実でコストゼロ

色+衣服はDanbooruでは単一の複合タグとして存在し、その形で学習されている。色と名詞を別々に書くのは学習分布の外側に出る行為にあたる。

複合タグpost_count
white shirt1,393,129
black thighhighs502,491
red ribbon264,239
blue dress185,426
blue necktie79,699
green jacket63,614

blue, dress ではなく blue dress と書く。色を独立したトークンとして置かないので、混線の余地そのものが消える。

2. BREAK — 機構は確実だが万能ではない

A1111 / Forge の BREAK は現在の75トークンチャンクをパディングで埋め、以降を新しいチャンクにする。チャンクは個別にCLIPを通るので、CLIP内部のself-attentionによる混線は確実に切れる。ただしU-Net側は連結後の全トークンを見るため、空間的分離は保証されない。減るが消えない。

そしてSDXL固有の副作用がある。A1111 の sd_hijack_clip.pyzs[0].pooled、ComfyUI の sd1_clip.pypooled[0:1] と、いずれも pooled埋め込みを第1チャンクからしか取らない。SDXLはこのpooledを追加条件として使うので、75トークンより手前で BREAK を打つと、それ以降のタグはpooled条件付けに一切寄与しない。早すぎるBREAKにはこのコストがある。なおComfyUI本体は BREAK 未実装で、書くと小文字化されて break(token id 2568)という普通の単語として絵に影響する。

3. 領域指定 — 唯一の根本対策

ツール方式明記された限界
Regional Prompter (A1111)BREAK で分割、ADDCOL/ADDROW/ADDBASE で2次元レイアウトAttentionモードは U-Net 深部で領域が約8×8pxまで縮み小領域は混ざる。Latentモードは精度が高いが生成時間が領域数倍、LoRAが壊れうる
Forge Couple改行区切りで各行を画面のタイルに割り当て。座標とweight指定も可「そもそもモデルがその構図を理解していなければ正確には出ない」
ComfyUI Attention Coupleマスクによる領域条件付け「マスク領域への効果限定は完全には保証されない」とドキュメントが明言

どれも「完全分離」は謳っていない点に注意。

複数キャラの属性混線

Illustrious技術レポートが原因を直接書いている。「Danbooruデータセットは主にタグベースのメタデータに依存しており、画像を多次元的に記述することが難しい。この制約が複数キャラの構図と配置の制御を困難にしている」。

Danbooruのタグは画像単位でフラットで、「どの属性がどのキャラに属するか」という情報が学習データに一切存在しない。 2人が写り blue hair red hair blue dress red dress が付いた画像から、「青髪と青ドレスが同一人物」を学習する手段がない。これはモデルのバグではなく、学習データの忠実な反映だ。

人数タグの実測

タグpost_count
1girl8,311,993
solo6,982,452
multiple girls2,088,101
1boy2,101,706
2girls1,420,122
2boys460,699
3girls324,255

solo2girls の同時出現は504件、2girls の 0.035%。 事実上の排他で、両方書くのは学習分布外。構図が崩れる直接原因になるので、まずここを疑う。

手法の実効性

手法実効
Attention Couple / Forge Couple / Regional Prompter唯一の確実な手段。ただし完全分離は保証されない
AND(Composable Diffusion)複数プロンプトを独立に条件付けして合成する。空間分離はしないので色移り対策としては弱い
キャラ名 + シリーズタグNoobAIマニュアルはキャラ指定に必須としている。ganyu \(genshin impact\), genshin impact の形
1girl \(...\), 1boy \(...\) グルーピング構文根拠が薄い。 エスケープ括弧 \( \) はパーサ上ただの文字であり、グルーピング機能は実装されていないし学習時にも存在しない記法。コミュニティのガイドが自己申告する精度も「詳細まで完全一致 約25%」程度
ADetailer / inpaint による後段修正実務上の主流

なお character:ganyu by wlop のような接頭辞はNoobAIマニュアルが明確に誤りとしている。ただし同じLaxhar Labの公式ガイドブックは逆に「アーティストタグには artist: を付けよ」と指示し、公式Diffusersサンプルも artist:john_kafka と書く。同じ組織の資料内で artist: の可否が割れており、一次資料からは決着できない。Illustrious側は素のタグ名で一貫している。

手や四肢の破綻

機構

SDXLは downsampling factor 8 のVAEを使い、1024×1024は128×128のlatentになる。指のような高周波かつ小面積の構造は、拡散が始まる前の圧縮段階で情報が落ちている。 加えてcross-attentionに解剖学的制約は存在しない。arXiv:2401.15075 は「GANや拡散モデルは目覚ましい生成能力を示すが、手を含む画像の生成は驚くほど苦手である」と述べている。同論文の対処が追加アノテーションによる補強である点が、素の学習信号の不足を裏づけている。

ネガティブプロンプトは「出さない」のではなく「打ち消す」

ECCV 2024 の arXiv:2406.02965 が2つの挙動を報告している。

  1. Delayed Effect — ネガティブの影響は、ポジティブが対応する内容を描画したに現れる
  2. Deletion Through Neutralization — ネガティブは潜在空間での相互打ち消しによって概念を削除する

したがって(a)存在しない概念のネガは無意味で、(b)強すぎるネガは周辺構造まで巻き添えにする。

効くネガティブタグと、プラセボ

学習信号ありpost_count
bad anatomy17,910
extra arms15,659
amputee10,674
fewer digits6,133
bad feet3,883
bad hands3,339
multiple heads2,538
bad proportions2,390
extra legs945
extra digits527
信号ゼロ実測
mutated handsタグレコード自体が存在しない
distorted anatomy存在しない
poorly drawn hands存在しない
bad hand(単数)0
extra fingers0(→ extra digits)
missing limb0(→ amputee)

NoobAI-XLの公式推奨ネガティブに含まれる mutated hands は、Danbooruに存在しないタグ。 NoobAIマニュアル自身が負タグ表のSource欄を - にしてDanbooru/e621由来でないと自認している。同じプロンプト中の username も実測 post_count 94 でほぼ信号がなく、実際に使われているのは twitter username 系。公式推奨だから全部効くという読み方はできない。

そして効果量の現実として、bad anatomy の17,910件はDanbooru全体1,198万件の0.15%。信号はあるが希薄で、重みを上げても線形には効かない。実務で信頼できるのはADetailerやinpaintでの手の再生成、hand ControlNet(MeshGraphormer等)、hand LoRAであり、ネガティブタグ単独での修復率を測った公開対照試験は見当たらない。

重みを上げすぎたとき何が起きるか

A1111:他のタグが道連れで縮む

A1111の既定 Emphasis は Original で、実装(modules/sd_emphasis.py)はこうなっている。

original_mean = self.z.mean()
self.z = self.z * self.multipliers.reshape(...).expand(self.z.shape)
new_mean = self.z.mean()
self.z = self.z * (original_mean / new_mean)

トークンごとに重み倍したあと、チャンク全体の平均を元に戻すグローバル再スケールを掛けている。つまりあるタグを強めると、同じ75トークンチャンク内の他のタグは概ね 1 / (1 + (w-1)·k/N) 倍に縮む(kは強調トークン数、Nは全トークン数)。「1つのタグを強調したら関係ない別の部分が壊れた」の直接的な原因はこれで、ソース内のコメント自身が「平均の復元はおそらく正しくないが、そうしないとアーティファクトが出る」と認めている。

SDXL系では作者自身が No norm を推奨している(実装のdescriptionに “seems to work better for SDXL” と明記)。Illustrious / NoobAI / Pony はすべてSDXLなので、A1111・Forge なら Settings の Emphasis を No norm にするのが一次資料に沿う。

ComfyUI:式が違うので数値を移植してはいけない

ComfyUI は空プロンプト埋め込み z_empty を原点とした線形内挿・外挿で、平均正規化を行わない。

  • w = 0 → 完全に空埋め込み(そのトークンが無いのと等価)
  • w = 1.5 → CLIPが実際に出力しうる多様体の外へ50%外挿

同じ (tag:1.4) でもA1111とComfyUIで結果が異なる。 プロンプトを移植するとき重み数値をそのまま持ち込むのは誤り。A1111互換を再現したい場合は ComfyUI_smZNodes(CLIP Text Encode++)や ComfyUI_ADV_CLIP_emb がある。

安全域

実務的な目安として「0.7〜1.4、1.5超で彩度飽和や輪郭の焼き付き、1.8超で構図崩壊」が広く共有されているが、公開された対照実験は見当たらず出典は二次的なブログ記事にとどまる。数式から確実に言えるのは次の2点。

  • 分布外への逸脱は (w - 1) の大きさ強調トークン数 k両方に比例する
  • したがって多数のタグを同時に1.3以上にするのは相対的な強調にならず、全体が分布外へ出るだけ(A1111の Original では平均復元でさらに全体が縮む)

矛盾タグを見つける

Danbooruには「排他」を宣言する仕組みが存在しない。 あるのは tag_aliases(同義語統合)と tag_implications(自動付与)だけなので、矛盾は共起統計から推定するしかない。GET /counts/posts.json?tags=A+B で共起数を取り、overlap = |A∩B| / min(|A|,|B|) を計算する。

ペア共起overlap判定
solo / 2girls5040.035%真に排他
day / night1,0300.61%真に排他
from above / from below7620.64%真に排他
full body / portrait1,1570.82%真に排他
barefoot / shoes17,8413.6%弱い排他
twintails / ponytail54,8215.7%弱い排他
blue hair / red hair85,73111.8%排他ではない
open mouth / closed mouth290,56315.0%排他ではない
long hair / very short hair7,29919.5%排他ではない

直感に反するが重要な知見が2つある。

髪色・髪の長さ・口の開閉はDanbooru上では排他ではない。 複数キャラ画像、グラデーション髪、多色髪、コマ割りが大量にあるためだ。だからモデルは1人に青髪と赤髪を混ぜたり両方の髪型を出したりする。1キャラに限定したいなら solo を明示し、排他性はツールや人間の側で保証する必要がある。

逆に構図・視点・時間帯のタグは1%未満で真に排他。 矛盾検出の優先対象はこちらで、from abovefrom belowfull bodyportrait を重ねると構図が破綻する。

自動判定するなら Danbooru の related_tag.json(cosine_similarity / jaccard_similarity / overlap_coefficient / frequency を返す)が1リクエストで済むので総当たりより軽い。

自己診断チェックリスト

投げる前にこの順で見る。1〜4はDanbooru API1本で自動判定できる。

  1. post_count 0 のタグはないか(masterpiece best quality worst quality normal quality などの合成品質タグと safe general sensitive nsfw explicit などのレーティング語は除外)
  2. エイリアスを書いていないか(blond hairblonde hair)
  3. is_deprecated のタグ、内容非相関のmetaタグ(commentary_request bad id duplicate 等)を混ぜていないか
  4. _ が残っていないか、( )\( \) にエスケープしたか
  5. 色タグと衣服タグを分けていないか(複合タグが実在するなら統合)
  6. solo2girls の人数矛盾、視点・画角・時間帯タグの重複はないか
  7. w > 1.5 のタグ、または w > 1.3 のタグが多数ないか。SDXLならEmphasisは No norm
  8. 第1チャンクが75トークンに満たないうちに BREAK を打っていないか
  9. マイナーキャラなら core_tags を併記したか