近年、AI技術は目覚ましい進展を遂げていますが、その中でも特に注目されるのが画像生成です。私はChatGPTでの画像生成モデルであるDALL-E 3を最近使用していて、日本語のプロンプトで手軽に高品質な画像を生成することに魅力があると感じます。
その一方で、DALL-E 3ではキャラクターに一貫性を持たせる点に難しさがあります。そこで、本記事では一貫性のあるキャラクター画像を生成する方法について解説します。
ChatGPTでの画像生成の流れやプロンプト作成については、下記記事にてまとめています。

DALL-E 3を使用した一貫性のあるキャラクター画像生成ガイド
キャラクターの一貫性とは?
ChatGPT 4での画像生成、つまりDALL-E 3を用いた場合は、同一のプロンプトであっても異なるキャラクターの画像を生成する場合があります。これはプロンプトで縛っていない部分はAIによって任意に補完されるため、それによって毎回生成される画像の顔や表情、スタイル、服装、場面などにある程度幅が生じるためです。
具体例を挙げたほうが分かりやすいかと思うので、下記の画像の子で説明していきます。

下記記事で色々と実験台になってもらった子です。

この画像生成時に使用したプロンプトは、 “A Japanese anime-style high school girl with silver hair. She has long, flowing silver hair and bright blue eyes. She wears a casual home outfit, consisting of a cozy sweater and skirt. Her expression is focused and thoughtful, typical of someone deeply engaged in creative work. The setting is not specified, so it will be a neutral background that emphasizes the character.”です。
同じプロンプトを用いても、下記の生成例のように、再度生成すると毎回異なる画像が出てきます。そのため、同じキャラクターを生成することが出来なくなり、同一キャラクターで表情やポーズを変えるといった操作が難しくなります。

生成例①
全体的な描写が異なっていて、フラットな印象。目元や髪の表現が簡素化されており、肌質の表現にも差がある。

生成例②
ロングヘアというプロンプトが無視されて、ボーイッシュな感じに…。肌も白め、また陰影が濃いめの表現がなされている。
主要な対処法
異なるキャラクターとなることに対する対処方法は幾つかあり、主だったものを下記に挙げます。
- プロンプトやCustom Instructionsでがちがちに縛る。
- GPTs(Consistent Character GPTなど)を用いる。
- シード値、ジェネレーションID(gen ID)を活用する。
人によってやり方に好みはあるかと思いますが、今回はシード値、ジェネレーションIDについて検証したやりかたを紹介します。
そもそもプロンプト、シード値、gen IDって何?
本題に入る前に、プロンプト、シード値、gen IDとは何を意味しているのか、説明します。
プロンプト (Prompt):
プロンプトとは、生成する画像の詳細な説明で、言語情報によるDALL-E3への指示文です。ChatGPTの場合は、日本語でも英語でも大丈夫です。プロンプトには通常、キャラクターの特徴、服装、表情、背景などの情報を入れます。上の画像の例でいえば、「銀髪で青い目を持つ日本のアニメスタイルの高校生の女の子」などの説明が該当することになりますね。
シード値 (Seed):
シード値は、画像生成プロセスのランダム性を制御するために使用されるための数値のことを言います。スタイルだったり、角度だったり、同じプロンプトを用いても生まれてくるバリエーションをコントロールするためのものです。
この値を指定すれば、同じプロンプトを使用しても、シード値が同じ場合は同様の結果を再現することが可能になります。逆に、異なるシード値を使用することによって、似たようながらも異なる結果が生成されるため、多様なバリエーションの画像を試すことができたりもします。
ジェネレーションID (Generation ID):
ジェネレーションIDは、特定の画像生成リクエストに対して生成されるユニークな識別子とされています。このIDが分かれば、その画像の生成結果を追跡したり、同じ画像に基づいて更なる編集や修正を行う際に参照したりすることが可能です。つまり、生成された具体的な画像を特定するためのキーとして機能します。
要するに、どんな内容の画像を生成したくて(プロンプト)、どういうやり方で描写していて(シード値)、その結果得られた画像の名前は何か(gen ID)、ということを示していて、いずれもキャラクターの一貫性を再現するうえでは重要なファクターです。
同一キャラクター生成を目指した生成結果
それでは、実際に検証した結果を紹介します。先ほど、同様に下記の画像をベースにして、進めていきましょう。なお、この子を生成したときとは別チャットでの実施になりますので、まずはチャットを跨いでの再現性を確認するため、「同一プロンプト×同一シード値×同一gen ID」での画像生成から確認しました。

ベースとなる画像
「同一プロンプト×同一シード値×同一gen ID」条件での生成結果

チャットを跨いでも再現度はかなり高い。もちろん塗りの感じは少し異なるし、インナーも違うなど、細かい点では改良の余地がある。
このように、プロンプトのみでの生成と比較すると、「同一プロンプト×同一シード値×同一gen ID」とすると、例えチャットを跨いでいたとしても、一貫性が保持されやすい傾向にあります。
次に、この画像に対して、下記の組み合わせのうち、どれが再現できるかを検証してみました。
- 「シード値のみ同一」
- 「gen ID値のみ同一」
- 「同一プロンプト×同一シード値」
- 「同一プロンプト×同一gen ID値」
- 「同一シード値×同一gen ID値」
「シード値のみ同一」条件での生成結果

シード値同一で、簡易的なプロンプト(銀髪長髪でセーターを着た日本のアニメ風の女子)を組み合わせている。元画像とは結構印象が異なり、全体的に簡素なイメージを受ける。
「gen ID値のみ同一」条件での生成結果

gen ID同一で、簡易プロンプト(銀髪長髪でセーターを着た日本のアニメ風の女子)を組み合わせている。目の質感に違いがあるが、再現性は高い。
「同一プロンプト×同一シード値」条件での生成結果

画像の印象としては近く、概ね再現している。
「プロンプト×gen ID値同一」条件での生成結果

これも概ね再現していると言える。
「シード値×gen ID値同一」条件での生成結果

プロンプトなしで実施すると、こんな出来に…。プロンプトが如何に重要か、逆説的にわかる事例。
結論:
プロンプトを同一とした上で、シード値あるいはgen IDを同一にすると、キャラクターの一貫性が高くなる傾向があります。
まとめ
今回はシード値、Gen IDを併用したキャラクターの一貫性の保持について紹介しました。プロンプトと併用して組み合わせることによって、かなり元画像に近いキャラクターが生成することが分かるかと思います。再現しきれていない部分もあるので、他の手法も使って、よりキャラクターの同一性を保持する手法を探していきたいですね。
なお、あくまで私の現環境での結果になりますので、生成AIの特性上、使い方によって結果がぶれることはご承知おきください。

コメント