【StableDiffusion】同一人物のさまざまな表情画像を生成するには?

StableDiffusion

画像生成AI「StableDiffusion」は、テキストを入力するだけで高画質な画像が作れる、オープンソースソフトウェアです。

カバーエリアも広く、風景から人物・空想上の世界まで対応しています。

ただ難しいのは、似たような画像のバリエーションを作ること。

例えば、ある女性の顔を7変化させた画像バリエーションを作るには、ちょっとした工夫が必要です。

この記事では、StableDiffusionで同一人物のさまざまな表情画像を生成する方法を解説します。

記事内の画像はすべてStableDiffusionで生成したものです。

StableDiffusionの試し方

StableDiffusionの画像生成はDreamStudioColaboratoryで試せます。

初めての人は、まずDreamStudioから使ってみてください。テキストを入力するだけなので簡単です。

ColaboratoryはPythonの知識が多少必要になるので、エンジニア向きです。

そのほか、ローカルPCにStableDiffusionの環境を作ることもできるので、もっと試したい方はチャレンジしてみてください。

StableDiffusionは実行するたびに違う画像を生成する

StableDiffusionのデフォルト処理は、プロンプト(テキスト)から連想される画像をランダムに生成します。

例えば “a photograph of an astronaut riding a horse”(馬に乗った宇宙飛行士の写真)というプロンプトを使い、画像を3枚生成したとします。

すると、次のように3種類の画像が出来上がります。

3種類の「馬に乗った宇宙飛行士の写真」

引用:Stable Diffusion with 🧨 diffusers – Colaboratory

ここで、作成された3枚のうちどれかが気に入れば、画像生成はおしまいですが、普通はそうなりません。

たとえば真ん中の画像がイメージに近かったとしても、宇宙飛行士と馬の姿勢はそのままで「馬の色は白にしたい」「背景は競馬場にしたい」など追加の要望があるはず。

しかし、プロンプトに”at the racetrack”(競馬場で)を追加して画像生成すると、最初に生成した時と全く違うイメージの画像ができてしまいます。

最初に生成した画像と関連性がない画像が出来てしまう

理想に近い画像に近づけていくにはどうしたらいいでしょうか?

シードを固定すれば近似画像が作れる

StableDiffusionで画像を生成するとき、プロンプト以外にシード値を設定できます。

シード値は、生成する画像のバリエーションを数字で表したようなもの。

なのでシード値を固定してしまえば、プロンプトを変更するだけで近似した画像が作れるのです。

同一モデルのさまざまな表情を生成する

同一人物でさまざまな表情の画像を作るには、シードを固定し、プロンプトを変化させる方法を使います。

まず基準にするには、以下の日本人女性です。

眠い顔

「sleepy」をつけると目を閉じました。

落胆している表情

「dejected」で悲しい顔になります。目と口のクオリティが高いですね。

興奮している顔

「agitated」で興奮している表情になります。顔の色がやや不自然ですが、特徴的な画像になりました。

イライラしている顔

「irritated」をつけるとイライラしている表情が出来上がります。

青ざめた表情

「terrified」は強い恐怖を感じているという意味です。

シードを固定する際の注意点

プロンプトによっては別人に差し変わることがある

シードを固定しても、これまでと違った雰囲気のモデルに差し変わってしまうことがあります。

以下は「smile」を付けただけですが、髪も目も輪郭も違っているので別人ですよね。

手が不自然

手が顔のあたりに来たりすると、手の指が6本だったり腕が逆方向を向いているなど、何かと不自然です。

これはシードの固定に関係しませんが、顔の表情と手は切り離せないことが多いので、注意が必要です。

まとめ

以上、StableDiffusionで同一人物のさまざまな表情画像を生成する方法を紹介しました。

シードの固定化は強力なので、StableDiffusionのみならず画像生成AIでは必須テクニックになるでしょう。

手の不自然さは近い将来、解決されると期待しています。