人物構成に使う顔パーツライブラリをどう作っているのか

 

AI人物構成で使っているライブラリの中でも、特に細かく作っているのが顔パーツライブラリ。

現在は、顔型、目、まぶた、眉、鼻、口、頬、顎などを27項目に分け、それぞれの候補から抽選して一人分の顔を構成しています。

 

最初からここまで細かく分けていたわけではないんですねー。

 

以前は「丸顔系」「クール系」といった完成した顔タイプを選ぶ方法も使ってたんですが、それだけでは生成AIが残りの部分を無難に補完してしまい、結局似た顔が出やすいという問題がありました。

そこから考え方を変えて、現在の顔パーツをそれぞれに分解する方式を採用した経緯があります。

 

この記事では、現在の顔パーツライブラリがどんな構造になっているのか、なぜそこまで細かく分けているのかを紹介します。

 

「顔タイプ」を選ぶ方式から始まった

最初に人物の顔をランダム化しようとしたときは、もっと単純な方法を使っていました。

あらかじめ何種類かの顔立ちタイプを用意して、その中から一つをランダムに選ぶ方法です。例えば「和風美人」とか「幸薄い系」とか「キリッと系」とか。

 

これなら何も指定せず生成AIへ任せるより、人物差を作れるだろうと思っていました。

 

ところが実際に生成してみると、顔タイプを変えているのに、なんとなく似たような美人が並びます。

考えてみれば当然で、顔タイプ側で指定していない目、鼻、口などについては、生成AIが自分で補完します。

 

そこにAIが作りやすい顔、よく出てくる顔が入り込めば、せっかく顔タイプを変えても最終的な顔が似てしまいます。

そこから現在の顔パーツライブラリへ発展していきました。

 

現在は顔だけで27項目に分けている

現在の顔パーツライブラリでは、顔を次の27項目に分けています。

 

  1. 顔型
  2. 顔全体の横幅
  3. 目の基本形
  4. 目の縦横比
  5. 目尻の角度
  6. まぶた
  7. 目の大きさ
  8. 黒目の大きさ
  9. 目と目の間隔
  10. 目と眉の距離
  11. 涙袋
  12. 眉の基本形
  13. 眉の太さ
  14. 眉の濃さ
  15. 眉の輪郭・整え方
  16. 鼻パターン
  17. 唇パターン
  18. 口の横幅
  19. 口角
  20. 人中の長さ
  21. 下顔面の長さ
  22. 頬の量感
  23. 頬骨
  24. フェイスライン
  25. 額の高さ
  26. 中顔面の長さ

 

「目」一つを取っても、丸いか横長かだけではありません。

目そのものの形、縦横比、目尻の角度、大きさ、黒目の大きさ、左右の間隔、まぶたなどで見た目は変わります。

 

それらを全部まとめて「大きなアーモンド型の目」のような一候補にしてしまうと、組み合わせが固定されてしまいます。

 

そこで、分けられるものはなるべく別の項目として扱うようにしています。

現在は顔だけで27項目に分けている

各パーツを別々に抽選する

顔パーツライブラリの基本は、それぞれを独立して抽選することです。

 

たとえば、丸顔が選ばれたから大きな目にする、といった決め方はしません。

目が小さめだから細い眉にする、といった調整もしません。

 

顔型は顔型、目は目、眉は眉、鼻は鼻として、それぞれ決まります。

人間や思考AIが「この顔にはこの目が似合うだろう」と考えて組み合わせると、結局は作る側の好みや感覚に寄っていきます。

 

生成AIに全部任せても似たような顔に寄る。人間が全部選んでも自分の好みに寄る。

 

その両方から少し離れるために、顔パーツごとに独立したランダム性を入れています。

 

細かく分ければいい、というわけでもない

ここまで細かく分けていると、「じゃあ全部の形状をもっと細かくバラバラにすればいいのでは?」とも思えます。

 

実際には、そう単純でもありません。

 

たとえば現在の鼻は、「鼻の長さ」「鼻根」「鼻筋」「鼻先」「小鼻」を完全に別々の乱数にはしていません。

これらを一組にした「鼻パターン」として候補を用意しています。

 

唇も同じで、上下の厚み、上唇の山、下唇の膨らみ、輪郭などは一組の「唇パターン」として管理しています。一方で、口の横幅や口角、人中の長さは別項目にしています。

 

小鼻の形を細かく設定しても、そこまで顔の印象に違いが出るのか…?って疑問があったから。

出ることは出るだろうけど、効果に対して管理する要素が増えすぎるのは避けたかった背景があります。

 

何でも細かく分解すれば良いわけではなく、「独立させたほうが人物差につながる部分」と「一組として扱ったほうが形として成立しやすい部分」を分けています。

 

この粒度をどこに置くかも、ライブラリを作る上でかなり悩むところです。

細かく分ければいい、というわけでもない

抽選結果を一人分の「顔の設計図」にする

27項目の抽選が終わったら、その番号だけを画像生成AIへ渡すわけではありません。

 

それぞれの候補が何を意味しているのかを文章へ展開して、一人分の顔としてまとめます。

たとえば、顔型、顔幅、目の形、目の大きさ、まぶた、眉、鼻、唇、頬、顎など、バラバラに決まった値を、一つの顔として読める具体的な描写に変えます。

 

この段階でも、新しい特徴を勝手に付け足したり、抽選結果を別の候補へ変えたりはしません。

あくまで、抽選で決まった顔を画像生成AIへ伝えるための文章に変換します。

 

そうして出来上がった顔の設定が、その人物のプロフィールに入ります。

 

まだうまく表現できない顔パーツもある

現在の仕組みで、すべての顔パーツを完全に描き分けられているわけではありません。

 

ライブラリ上では別の候補として定義していても、画像生成AI側では似た見た目にまとめられてしまうものがあります。

これは「候補をたくさん作れば人物の種類もそのまま増える」というほど単純ではない、ということでもあります。

 

ライブラリ上で分類できることと、画像として実際に描き分けられることは別問題です。

このあたりは実際の生成結果を使って、別の記事でも検証していく予定です。

 

まとめ

現在の顔パーツライブラリでは、完成した「顔タイプ」を選ぶのではなく、顔を27項目に分解して、それぞれの候補から一つずつ抽選しています。

そして、抽選後に「似合う」「美人に見える」といった理由で組み合わせを修正せず、その結果を一人分の顔として組み立てます。

 

一方で、何でも細かく分解すればいいわけではなく、鼻や唇のように一組のパターンとして管理している部分もあります。

どこまで分解するのか。どんな候補を用意するのか。文章で違っていても、実際の画像で本当に差が出るのか。

 

このあたりを生成結果と照らし合わせながら、顔パーツライブラリ自体も今後さらに改良していきます。

おすすめの記事