はじめに:セーラー服の攻略法が通じない

前回の記事では、Illustrious系モデルの背面構図で衣装が破壊される問題に対して、ControlNet(Canny+OpenPose)で完全に制圧する方法を記録しました。

セーラー服はCanny Weight 0.5で完全制圧できました。当然、同じ方法論がメイド服にも通用するだろうと思っていました。

通用しませんでした。

メイド服×背面構図は、セーラー服とはまったく次元の違う難敵でした。プロンプト防御、Canny、Inpaint、img2img、手動塗り潰し――単体で投入したものはすべて突破されました。最終的に4つの対策を同時投入してようやく突破口が開いた、その全記録です。


なぜメイド服はセーラー服より難しいのか

前回の記事で、Illustrious系の脱衣圧力は「期待露出量と現在露出量のギャップ」で発動するという仮説を立てました。

この仮説で言えば、セーラー服もメイド服もギャップは同程度のはずです。どちらも背中は覆われている衣装ですから。

しかし実際には、メイド服の脱衣圧力はセーラー服をはるかに上回りました。

衣装背面×脱衣圧力攻略難度
セーラー服中〜高プロンプト防御で一部成功 → Canny 0.5で完全制圧
メイド服プロンプト・Canny・Inpaint・img2img・手動塗り潰し全て突破

推測ですが、maid dressというタグ自体が、モデルの学習データの中でbackless(背中開き)と強力に紐づいている可能性があります。「maid + from behind」の組み合わせが、背中開きデザインの画像群と一緒に大量に学習されていると思われます。

つまりギャップの問題ではなく、タグ自体がトリガーになっているということです。


試行1:衣装防御モジュール → 全滅

前回セーラー服で効果があった衣装防御モジュールをそのまま適用しました。

ポジティブ:

(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),

結果:5枚全てで背中が大きく露出。

セーラー服では背中の穴開けを完全に阻止できたモジュールが、メイド服ではまったく効きません。衣装名から発火する脱衣圧力が、プロンプトの防御力を完全に上回っています。

ただし、後から分かったことですが、このモジュールを外すともっと悪化します。 最終的な攻略構成からこのモジュールを抜いてテストしたところ、4枚中4枚で背中を露出されました。単体では全滅でも、他の対策と組み合わせたときに「下げ止まりの土台」として機能しています。つまり、これは不要ではなく前提条件でした。


試行2:タグ回避(「maid」を使わない) → 全滅

maid dressというタグ自体が問題なら、使わなければいい。そう考えて衣装名を言い換えました。

black long dress, white frilled apron, frilled headband, white cuffs

結果:4枚中4枚で背中が開きました。

maidという単語を消しても、エプロン+ヘッドバンドの組み合わせだけでモデルは「これはメイド服だ」と認識するようです。衣装のパーツ構成から逆算して連想が発火してしまいます。

タグ回避だけでは足りないことが分かりました。ただし、この方向性自体は後に鍵になります。


試行3:セーラー服のCanny参照を流用 → 逆効果

セーラー服で成功したCanny参照画像(背中が覆われた状態のもの)をそのまま使い、プロンプトだけメイド服に変更して生成しました。

結果:4枚全てで背中が露出。しかも、セーラー服の襟のV字ラインに沿って露出しました。

セーラー服の背面にはV字の襟が描かれています。Cannyがこの輪郭線を拾い、メイド服の生成時に「ここに肌と布の境界線がある」=「ここから肌を出せ」というガイドラインとして機能してしまいました。

衣装が異なる場合、Canny参照は共有できません。衣装ごとに専用のリファレンスが必要です。


試行4:img2img(正面→背面変換) → 構図が変わらない

正面で衣装が維持されたメイド服画像をimg2imgに送り、プロンプトを背面構図に変更してDenoising 0.3で生成しました。

結果:構図がほとんど変わりませんでした。

Denoising 0.3では元画像の支配力が強すぎて、正面の構図がそのまま維持されます。Denoisingを上げれば構図は変わりますが、今度は衣装も壊れます。構図を変えつつ衣装を維持するという2つの要求が、img2imgのDenoising一本では両立できないという構造的なジレンマです。


試行5:OpenPose + img2img → 構図が変わらない

ControlNet OpenPoseで背面ポーズの骨格を強制しつつ、img2imgで変換する方法を試みました。

ここで一つ落とし穴がありました。「Upload independent control image」にチェックを入れないと、img2imgに送った入力画像がそのままOpenPoseの参照画像にもなります。 つまり正面の画像からは正面の骨格が抽出され、正面ポーズが維持されてしまいます。

チェックを入れて別の背面ポーズ画像を参照させましたが、それでもimg2imgのDenoising 0.3では元画像が強すぎて構図が変わりませんでした。


試行6:Inpaint → 機能せず

背面画像の肌が露出した箇所をマスクし、Inpaintで布に塗り替えようとしました。

結果:ほぼ変化なし。

「Masked content」が「original」の場合、マスク領域に元の肌画像が残ります。低Denoisingでは元画像がほとんどそのまま出力されます。

「fill」に切り替えるとマスク領域が単色で埋められ、そこにモデルが新たに描画するのですが――モデルの脱衣圧力が強すぎて、再び背中を開けてきました。「ここに何を描く?」と聞かれたモデルが「肌」と答えてしまうわけです。


試行7:ペイントソフトで手動塗り潰し → 突破される

ここまでAIに任せる方法がすべて失敗したので、発想を変えました。

「AIに描かせるのを諦めて、人間が塗る。」

背中が露出した生成画像をペイントソフトで開き、肌が見えている部分を周囲の黒い布の色でざっくり塗り潰しました。そしてこの画像をCannyリファレンスにしました。

それでもモデルは背中を開けてきました。

塗り潰しで肌と布の境界線を消したはずなのに、モデルは「メイド服の背面にはここに肌がある」という学習データの記憶に従い、Cannyの輪郭線を無視して新たに肌領域を生成しました。

7回目の全滅です。


突破:4つの武器を同時に使う

ここで改めて、7回の試行を振り返りました。

  • 衣装防御モジュール → 単体では全滅だが、外すと4/4で突破される。土台として必須
  • タグ回避 → 単体では不十分だが、脱衣圧力の低減は多少あった
  • 黒塗り画像のCanny → 単体では突破されたが、輪郭線の強制力自体はある
  • OpenPose → ポーズの固定には機能していた

どれも単体では突破されています。しかし、4つとも「部分的には効果がある」 のです。

であれば、全てを同時に投入すればどうか。

土台:衣装防御モジュールは常に入れておく

試行1で全滅したモジュールですが、これを外すと他の対策をいくら重ねても4枚中4枚で突破されます。単体での効果は見えなくても、脱衣圧力を下げる土台として常にプロンプトに入れておく必要があります。

ポジティブ:

(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),

この土台の上に、以下の3つを重ねます。

要素1:PhotoShopで黒塗りした画像をCannyリファレンスにする

試行7で使った黒塗り画像をそのまま使います。下の画像がPhotoShopで黒く塗り潰した実際の画像です。

雑な塗りで問題ありません。

要素2:「maid dress」を使わず、衣装パーツを個別に記述する

試行2ではタグ回避だけでは不十分でしたが、今回は記述をさらに強化しました。

元のプロンプト:

black maid dress

変更後のプロンプト:

(black long dress:1.2), (white frilled apron:1.2), (frilled headband:1.1),
(white cuffs:1.1), (black ribbon on neck:1.1), (white tights:1.1),
(long sleeves:1.1), (high collar:1.2), (victorian servant uniform:1.1),

ポイントがいくつかあります。

maidという単語をどこにも使いません。試行2ではblack long dress + white frilled apronだけでメイド服と認識されてしまいましたが、今回はhigh collarで首元を閉じ、long sleevesで腕の露出を封じ、victorian servant uniformでフォーマルな使用人服としての文脈を補強しています。

また、maid dressというタグがbacklessと紐づいている可能性があるため、このタグ自体を使わないことで、紐づきの発火を回避する狙いがあります。

要素3:ControlNet Canny + OpenPose の二重制御

ControlNet設定値
Canny Weight0.7
Canny End Step0.8
OpenPose Weight0.8
OpenPose End Step1.0
Control ModeBalanced

Cannyのウェイトを前回のセーラー服(0.5)より高い0.7に設定しています。メイド服の脱衣圧力はセーラー服より格段に強いため、Cannyの拘束力もそれに応じて強化する必要がありました。


結果

4枚中3枚で背中の露出を阻止できました。

衣装防御モジュール(脱衣圧力を下げる土台。外すと4/4で突破される)
  +
タグ回避(maid dress → 個別パーツ記述で脱衣トリガーを回避)
  +
黒塗り画像のCanny参照(構造の強制)
  +
OpenPose(ポーズの強制)
  =
4枚中3枚で衣装維持に成功

それでも4枚中1枚は背中を露出させてきます。100%背中を露出していた状態から75%の成功率まで持ってきたので、これは前進です。ただし完璧ではありません。

プロンプトを無視して意地でも肌を露出したいモデルとの闘いは、まだ続きます。


メイド服攻略の確定設定

基本パラメータ

パラメータ確定値
CFG Scale7
Sampling methodDPM++ 2M
Schedule typeKarras
Steps25
解像度832×1248

ControlNet設定

ControlNet設定値
Canny Weight0.7
Canny End Step0.8
OpenPose Weight0.8
OpenPose End Step1.0
Control ModeBalanced
追加要件Cannyリファレンスを黒塗り画像で作成
追加要件「maid」タグを使わず衣装パーツを個別記述
追加要件衣装防御モジュール(ポジ+ネガ)を常時適用

メイド服タグ回避テンプレート(コピペ用)

(black long dress:1.2), (white frilled apron:1.2), (frilled headband:1.1),
(white cuffs:1.1), (black ribbon on neck:1.1), (white tights:1.1),
(long sleeves:1.1), (high collar:1.2), (victorian servant uniform:1.1),

衣装防御モジュール(コピペ用・必須)

以下は土台として常にプロンプトに含めます。単体では全滅でしたが、外すと他の対策を重ねても4枚中4枚で突破されます。

ポジティブ:

(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),
(butterfly:1.3), (insect:1.2), (flower on clothes:1.2), (print on clothes:1.2),

まとめ:メイド服から得られた知見

「タグ自体がトリガー」という問題がありました。 maid dressというタグがbacklessと強力に紐づいている可能性があり、衣装名を使わず個別パーツで記述するだけで脱衣圧力が変わりました。この考え方は、メイド服以外にも応用できるかもしれません。

単体で突破された対策も、同時投入すると機能しました。 衣装防御モジュール、タグ回避、黒塗りCanny、OpenPoseはどれも単体では突破されましたが、4つ同時に投入することで初めてモデルの脱衣圧力を上回りました。特に衣装防御モジュールは、単体では全滅に見えても外すと4枚中4枚で突破されるという「見えない土台」でした。効果がないように見える対策でも、安易に外さないほうがいいようです。

人間の手動介入が最後の鍵になりました。 AI生成だけでは得られないリファレンス画像を、PhotoShopで30秒の黒塗り作業で作る。この小さな手動介入が突破口を開きました。

それでも完璧ではありません。 4枚中1枚はまだ突破されます。メイド服の脱衣圧力は、現時点の手法では100%は制圧できていません。Canny Weightをさらに上げる、リファレンス画像の塗り方を工夫する、別のControlNetタイプを追加するなど、まだ試せることは残っています。


関連記事