全身画像を生成すると、顔の表情がつぶれてしまう

Stable Diffusionで全身画像を生成すると、顔の表情がつぶれてしまう現象と対処法を紹介します。

動作環境

Stable Diffusion Web UI を利用します。モデルはConterfeit 3.0を利用します。

現象の確認

以下のプロンプトで画像を生成します。プロンプトに "staiding" (スペルミスしています。) と "full body" を指定して全身を表現する画像を生成します。 全身が入るよう画像の出力サイズを 512x768に設定しています。
Prompt
masterpiece, 1 pretty girl, staiding, full body, blue jacket, white long skirt, Illustration,Character setting table, white background
Negative prompt
EasyNegativeV2

以下の画像が生成されました。


全身画像が生成されましたが、顔の表情がつぶれてしまっています。


masterpiece, 1 pretty girl, staiding, full body, blue jacket, white long skirt, Illustration,Character setting table, white background
Negative prompt: EasyNegativeV2
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 1328764141, Size: 512x768, Model hash: db6cd0a62d, Model: Counterfeit-V3.0

原因

上記の画像は、512x768ピクセルのサイズで生成した画像です。このサイズに対して画像が生成されます。衣類や体のパーツは違和感を感じませんが、 顔はキャラクターの中でも特に注視される部分となるため、画像サイズに対して生成されるパーツの解像度が閲覧者である人にとっては足りないことが原因とされています。 このため、顔は他のパーツよりも解像度を高めて出力しないと違和感を感じてしまいます。

対処法

アップスケーリングする:Hires. fix

画像の出力結果を維持した状態で、解像度を上げて画像を出力する方法としてアップスケーリングを利用する方法があります。
アップスケールする方法が一番堅実な方法です。 Hires.fixアップスケーリングの手順はこちらの記事を参照してください。

アップスケーリングする: Tiled Diffusion

Hires. fixでのアップスケーリングでは、オリジナルの構図から変化が発生する場合や、小物やパーツが他のオブジェクトや背景と融合してしまう場合があります。 オリジナルの画像を構図や形状を変えずにアップスケーリングする方法に "Tiled Diffusion" があります。
Tiled Diffusionを利用したアップスケーリングの手順は こちらの記事を参照してください。

アップスケーリングする:ControlNet Tile + Tiled Diffusion

Tiled Diffusionで元の画像の形状を維持してアップスケーリングできますが、 より細かい部分までオリジナルの画像を構図や形状を変えずにアップスケーリングする方法に "ControlNet Tile + Tiled Diffusion" があります。
ControlNet Tile + Tiled Diffusionを利用したアップスケーリングの手順は こちらの記事を参照してください。

アップスケーリングする:ControlNet Tile + 生成時パラメーター

Stable Diffusionで生成した画像の場合は、ControlNet Tileと生成時のパラメーターでアップスケーリングできます。 手順はこちらの記事を参照してください。

Repaintingする

顔の表情部分を塗りつぶして、再度、表情の部分を再生成する方法です。 手順についてはこちらの記事を参照してください。

Restore faces を有効にする

Restore facesを有効にすると、改善がみられる場合があります。
WebUI バージョン1.6 以降は[Settings]画面の[Face restoration]の項目で[Restore faces]チェックボックスをクリックして チェックを付けると有効になります。


旧バージョンでは画像生成画面(txt2img, img2img)の[Resotore faces]チェックボックスをチェックすると有効にできます。


1 girl, extreme beautiful girl, blue jacket, white long skirt, (white background), standing, full body, character settings
Negative prompt: worst quality, low quality,
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2086633563, Face restoration: CodeFormer, Size: 512x768, Model hash: db6cd0a62d, Model: Counterfeit-V3.0

今回生成した画像では、ほとんど改善は見られませんでした。
Restore faces なしRestore faces あり

Sampling stepsを増やす

Sampling stepsを増やすことで画像の鮮明度が増し、表情が改善される場合があります。
Sampling methodがAncestral Sampling方式のサンプリングメソッドを利用している場合は、ステップ数を増やすと形状や構図が大きく変化する場合があります。
一方で、サンプリングメソッドによってはステップ数を増やしすぎると画像内の直線成分が多くなるものがあり、 画像の仕上がりは鮮明感が増し、シャープにはなりますが、画面がつまらなくなってしまう場合があります。

Sampling steps 20Sampling steps 50

Sampling methodを変更する

ある程度のポーズや構図の変化が許容できるのであれば、サンプリングメソッドを変更する方法もあります。 デフォルトで設定されている、"Euler a" はサンプリングメソッドの中でもフラットで細部を描画しない出力結果になる傾向が強いです。
LMSやDDIMに変更すると細部まで描画され、表情がつぶれにくくなります。

メモ
サンプリングメソッドの種類と出力画像の比較についてはこちらの記事も参照してください。
今回の例では、ある程度の改善が見られます。劇的に鮮明になる結果にはなりませんでした。
Euler a(Step:20) 元絵
LMS(Step:50)
UniPC(Step:50)
DPM2 a Carras(Step:30)
DDIM(Step:50)
DPM Adaptive(Step:50)

表情がわからない程度に縮小する

別の対処法では縮小して表情がわからない状態にする方法があります。 小さくすれば顔がわかりづらくなるため、表情のつぶれも気になりにくいです。

画像サイズを大きくする

さらに別の対処法では、生成時の画像サイズを大きくする方法があります。
しかし、画像サイズを大きくすると、キャンバス自体の物理サイズが大きくなったと判断され、 画面内に複数キャラクターを小さく描画してしまうケースがあります。 また、VRAMの使用量が増えるため、VRAM不足で画像が生成できない場合もあります。

加えて、画像のサイズを変更するとSeedの値が同じであっても、出力される画像が変化してしまいます。小さい画像で好みの画像を出力できた後、 画像サイズを拡大して、Seedの値を同じにしても同じ結果が出力されないので注意が必要です。

下図は画像のサイズを1.5倍にした、768 x 1,152 で出力した結果です。構図や絵柄が違ってしまいます。



下図は画像のサイズを2倍にした、1,024 x 1,576 で出力した結果です。かなり胴長になり、バランスが崩れてしまっています。 サイズを大きくして画像を生成するのは問題がありそうです。


著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2023-05-18
iPentec all rights reserverd.