はじめに:服に穴を開けてくるAI

前回、前々回の記事では、イラスト系モデルが「とにかく肌を見せたがる」問題に対して、プロンプト制御やimg2img+Denoising strengthで対処する方法を検証しました。

今回はその続編です。ターゲットはIllustrious系モデル。問題は背面構図

セーラー服を着せて「振り返り」のポーズを取らせたかっただけなのに、背中に存在しないはずの穴を開けて肌を露出させてくる。プロンプトで穴を塞いだら、今度は首元を緩めてくる。首元も塞いだら、指示していない紫色の蝶を背中に描いてくる。

35枚のテスト画像を生成して、この問題と正面から向き合いました。最終的にControlNet(Canny)で完全に制圧できたので、その過程を記録します。


Illustrious系で起きる3つの問題

まず、検証の過程で確認した問題を整理します。Illustrious系モデル(mikanIllustrious / waiIllustrious)で頻出するのは以下の3つです。

亡霊キャラクター ― 指示していない人物を背面向き(背中を見せた状態で)背景に出現させます。ソロ構図なのに4枚中3枚で別人が映り込む場合があります。

脱衣・はだけ ― 着せたはずの衣装が脱げる、はだける、背中が露出します。前回の記事で報告した現象の延長線上にあります。

ポーズ・構図崩れ ― 指示したポーズと異なるポーズになります。

今回は主に前2つ(亡霊・脱衣)に対して体系的にテストを行いました。


テスト1:CFGを上げれば解決するのか

最初に検証したのは「CFG Scaleを上げればプロンプトへの追従性が上がり、問題が減るのでは」という仮説です。

テスト条件

  • モデル:Illustrious系(mikanIllustrious / waiIllustrious)
  • 衣装:セーラー服(閉鎖系衣装)
  • 構図:上半身・正面
  • ボディタグ:大きい胸、グラマラスな体型を指定(脱衣圧力を意図的に高めた実戦条件)
  • ソロ指定:(solo:1.3), (1girl:1.3) をポジティブに設定

CFG 7(基準値)→ 8 → 9 の3段階で各5枚、計15枚を同一プロンプトから生成しました。

結果

CFG亡霊脱衣背面向き画質劣化問題合計
70/50/50/50/50件
80/52/52/50/54件
90/51/52/50/53件

仮説は覆りました。CFGを上げたら悪化しています。

CFG 7だけが全問題ゼロでした。8以上にすると背面向きが発生し、それに連動して脱衣も発生しています。

推測ですが、Illustriousの学習データには「セーラー服+振り返りポーズ」の画像が多く含まれていると思われます。CFGを上げるとこの学習パターンへの追従も強化され、「セーラー服を着ているなら振り返るべき」とモデルが判断してしまうようです。

CFGはすべてのタグへの追従を均等に引き上げるわけではありません。モデルが強く学習した組み合わせを優先的に増幅する傾向があるという点は、覚えておく価値があります。

なお、亡霊キャラクターは15枚中0件でした。(solo:1.3), (1girl:1.3) のソロ指定とネガティブプロンプトの組み合わせがしっかり機能していたようです。


テスト2:背面向きに服を着せる ― プロンプトでの格闘

CFGテストで正面向きなら衣装が安定することが分かりました。問題は背面です。

振り返る構図は物語の表現に必要なので、「使わない」という選択肢はありません。ならばIllustriousに背面構図でも服を着せる方法を見つけるしかないわけです。

まず現実を見る

ネガティブプロンプトからlooking backを外し、ポジティブに looking back を指定して5枚生成しました。

結果:5枚中4枚で、セーラー服の背中に穴を開けて肌を露出させてきました。

穴です。衣装の構造として存在しないはずの穴を、モデルが自分で作り出して露出を達成しています。前回の記事でシャツに穴を開けてきた現象と同じパターンですが、今回はさらに露骨です。


テスト3:衣装防御モジュール ― 塞いだら別の場所から来る

この時点で、問題の本質を整理し直しました。

「背面向きが問題」なのではなく、「閉じた衣装+背面構図の組み合わせで衣装が破壊される」のが問題です。水着で振り返っても衣装は壊れません。モデルの脱衣圧力は「期待する露出量」と「現在の露出量」のギャップで発動すると考えられます。水着は既に露出しているのでギャップがない。セーラー服は背中が覆われているのでギャップが大きい、ということです。

この理解に基づき、閉鎖系衣装×背面構図の時だけ追加する「衣装防御モジュール」を設計しました。

衣装防御モジュール

ポジティブに追加:

(clothes intact:1.3), (fully dressed:1.3), (back covered:1.3), (no skin exposed on back:1.2),

ネガティブに追加:

(bare back:1.4), (backless:1.4), (back cutout:1.3), (open back:1.3), (exposed back:1.3), (torn clothes:1.3), (ripped clothes:1.3), (hole in clothes:1.3),

結果

項目防御なし防御あり
背中に穴を開ける4/50/5

穴開けは完全に阻止できました。ここまでは順調です。

モデルの代替行動

しかし、穴を塞がれたIllustriousは2つの代替行動に出ました。

首元を緩める(5/5で発生) ― 背中がダメなら首元から。セーラー襟の下を露出させてきます。

背中に蝶を描く(2/5で発生) ― 肌を見せられないなら絵を描く。プロンプトに一切指示していない紫色の蝶が背中に出現しました。しかも瞳の色(インディゴ)に合わせた色味で。

前回の記事では「肩だしを封じたら男を脱がしてきた」と報告しましたが、今回は「穴を塞いだら蝶を描いてきた」です。1つ塞ぐと別の出口を探す「もぐらたたき」は健在でした。プロンプトだけの制御には限界があります。


テスト4:ControlNet ― 次元の違う武器

プロンプトはモデルへの「お願い」です。お願いをいくら重ねても、モデル内部にある「肌色を出したい」という圧力は消えません。

ControlNetは「お願い」ではなく「物理的な強制」として機能します。

Canny(エッジ検出)を使い、衣装の輪郭線を画像に焼き込みます。セーラー服の襟の形、袖の形、スカートの境目がすべて「線」として強制されるため、モデルはその線に従って描画するしかありません。布がある場所に肌を描くことが構造的に困難になります。

設定

  • ControlNet Unit 0:Canny(衣装構造の固定)
  • ControlNet Unit 1:OpenPose(ポーズの固定)
  • リファレンス画像:衣装防御モジュールで衣装が維持できた画像を使用

鍵になるのはCannyのControl Weightです。弱すぎるとモデルが無視し、強すぎるとリファレンスのコピーになります。

結果

項目Canny Weight 0.4Canny Weight 0.5
衣装破壊0/50/5
首元の緩み一部残存0/5
蝶等の異物0/50/5
画質良好良好

Canny Weight 0.5で、すべての問題が消えました。

穴開けゼロ。首元の緩みゼロ。蝶ゼロ。画質劣化ゼロ。10枚すべてが、セーラー服を完全に着た状態で振り返る構図を実現しています。


「いつ何を使うか」の判定表

最終的な結論はシンプルです。

構図衣装タイプ必要な対策
正面すべてプロンプトのみ(ControlNet不要)
背面水着等の露出衣装プロンプトのみ(ControlNet不要)
背面制服等の閉鎖系衣装ControlNet(Canny 0.5 + OpenPose)が必要

対策が必要なのは「閉鎖系衣装で背面を向けたい時」だけです。

ControlNetにはリファレンス画像が必要ですが、一度良い画像を1枚確保すれば、以後はそれを参照するだけで済みます。「衣装ごとに背面の良い画像を1枚ストックする」という運用で、ガチャから解放されます。


確定パラメータ一覧

パラメータ確定値
CFG Scale7
Sampling methodDPM++ 2M
Schedule typeKarras
Steps25
ControlNet Canny Weight0.5(閉鎖系衣装×背面のみ)
ControlNet Canny End Step0.8
ControlNet OpenPose Weight0.7〜0.8

今回の検証で得られた知見

CFGは「均等な増幅」ではない

CFGを上げればプロンプト追従が良くなるという直感は、今回のテストでは当てはまりませんでした。モデルが強く学習した衣装×ポーズの組み合わせをCFGが増幅する場合があり、Illustrious系×セーラー服ではCFG 7が最も安定しています。

脱衣圧力は「ギャップ」で決まる

モデルが期待する露出量と、実際の露出量の差が大きいほど衣装が壊れやすくなります。水着なら背面でも安定するのに、セーラー服だと背中に穴を開けてくるのはこのギャップが原因と考えられます。

プロンプトでの対策には限界がある

1つの出口を塞ぐとモデルは別の出口を探します。前回の記事では男性キャラを脱がすことで対応してきましたが、今回は蝶を描くという手段まで使ってきました。プロンプトだけの「もぐらたたき」には終わりがありません。

ControlNetは構造的な解決策

プロンプトが「お願い」なのに対して、ControlNet(Canny)は衣装の輪郭線を物理的に強制します。閉鎖系衣装×背面構図という最も厳しい条件でも、Canny Weight 0.5で完全に制圧できました。


おわりに

前回・前々回の記事から通算すると、「AIに服を着せる戦い」もだいぶノウハウが蓄積されてきました。

正面からの制御はプロンプトで。背面は構造ごと押さえるならControlNetで。それでも微調整が必要ならimg2img+Denoisingで。手持ちの武器が増えるほど、対処の選択肢は広がります。

35枚のテストを経て辿り着いた結論は、構図と衣装タイプの組み合わせで対策レベルを切り替えるという判定表でした。すべてに同じ対策をかける必要はなく、「ここだけControlNet」という運用ができるのがポイントです。

衣装ごとにリファレンス画像を1枚ストックしておけば、以後の生成はかなり安定します。もしIllustrious系の衣装崩壊に困っている方がいたら、まずは衣装防御モジュールのプロンプトから試してみてください。