Poserでpython

Poserで芸能人の顔を作ろうと思った。

具体的には、おじさんが、顔認識技術と、遺伝的アルゴリズムを使って、石原さとみ顔をV4ベースで作ろうと思った。

Victoria4とmorph++で操作できるモーフターゲットのパラメータを自動的に最適化して、石原さとみ顔に近づけていくというやり方だ。

途中経過 Poser V4で石原さとみは出来たのか?

対象にした写真はこちら。

キヤノン、石原さとみさんを「PIXUS」のイメージキャラクターに起用 – 日経トレンディネット

使ったモデル、テクスチャは、Victoria4  Morph++ プラス The Metropolitan Collection Lyon and Paris V4.2

顔認識スクリプトによると、左上のは「人の顔じゃない」と判定された。(ひどい)

そこから進化を繰り返して、類似度56%まで来たところ。類似度50%程度では、全然似てない感じ。

進化が進むと、けっこうカワイイ顔が現れて、テンションがあがる。(似てるかどうかは別)

また、完全ランダムだと「人の顔じゃない」(kaoninsiki sippai)という判定が4割以上出ていたのが、進化が進むと、あまり出なくなってくる。

上の数字は、2画像間の距離を0.0~1.0(0.0が全く同じ画像、1.0が全然違う画像という判定)で表示している。

例えば、0.42だと、類似度58%ということになる。

最終的には、さとみ65%の顔が現れた。

目の下の黒い線は、眼球が物理的に顔面にはみ出してしまっているもの。だが、元の写真と比較すると、この黒い線を「涙袋」とみなしているらしく、類似度が高まっているようだ。

また、今回の実験では、The Metropolitan Collection Lyon and Paris V4.2というキャラクターモーフをベースに作ったので、色んなモーフをいじると、目玉や歯茎が飛び出すなど造形に破綻が出やすくなる。

うーん…なんとなく石原さとみテイストが出てる気はするが、素のVictoria4でやりなおしたほうが良いかも。

遺伝子アルゴで石原さとみを作るざっくりした流れ

  1. Poserでスクリプト使って、ランダムにパラメータ設定して50人分の顔を作る
  2. 顔認識(pythonベースで公開されてるスクリプト)使って、石原さとみの画像と1で作った50人との類似度スコアを出す
  3. 類似度スコアの良かった顔を、遺伝的アルゴリズムで進化させ、じわじわと石原さとみ顔に近づけていく

そんな感じ。

ふと思いついたので、ゴールデンウイーク中の自由研究テーマにしようと思ったが、あっという間にゴールデンウィークは過ぎ去っていった。

↓完全ランダムな、第一世代の顔。

まるで石原さとみじゃない顔がズラリ。

↓世代が進んで、さとみ度30%くらいの顔たち。

淘汰が進んで(?)3系列くらいの顔になってくる。

遺伝子アルゴで石原さとみ2

学習用の画像を変えて、再度チャレンジ。

初期のランダム顔

うわあ。進撃の巨人のような面々が並んでいる。遺伝的アルゴリズムでは、第一世代は完全ランダムなので、こんな感じになる。

こんな祖先から、石原さとみが生まれるとは思えないが、進化のゆくえを見守ってみよう。

第三世代

だいぶ人間らしくなってきて、あ、こんなおばさん、近所にいるかもという顔も出てくるようになってきた。初代から数えて孫の代で、この進化。

第十世代

顔の方向性が定まってきて、残忍そうなおばさんという感じになってきた。目がイッている。まだまだ石原さとみ感は出ていない。

第二十世代

このあたりから、あまり変化しなくなる。元画像の面影はあるけど、別人という感じ。

第三十世代

さほどかわらず。ちょっと、目、ちっちゃくない?

第54世代

石原さとみ画像との類似度では、70%一致というスコアをたたき出している。

本当かよ。

顔認識スクリプトの目が節穴かも知れないという疑惑が、いまさらながら湧いてくる。

今回、操作するモーフターゲットはシェイプ系のみにしぼったので、どれだけ進化しても顔が無表情。

対象の画像は、にっこりと歯を見せて微笑んでる。一部の表情モーフも対象に入れたほうがいいのかも知れない。

結論:まだ、全ッ然ダメ!

左右非対称で顔づくり 松重豊

今回は、孤独のグルメドラマ版の主人公、井之頭五郎(松重豊さん)にトライだ。

今回は、Michael4(男性フィギュア)で試してみた。

Michael4ベースフィギュアに、Michael 4 3D Male Model Morphs++ を追加したものを使った。

スクリプトは、そのまま流用。

最終形態のゴロー

遠目に見ると、なんとなくゴロー感が出ている気がするが、アップでみると…

うーん…全然似てない。顔がゆがんでる。

こう見えて、ゴロー類似度60%。だけど、60%程度だと、「なんか雰囲気あるかも」ってぐらいのようだ。

ゴローさん第一世代

まずは第一世代。完全ランダム顔で、不気味なオッサンが大量生産されている。

ゴローさん第10世代

第十世代。顔の方向性がなんとなく、決まってきた感じ。

ゴローさん第五十世代

第五十世代。どことなく、ゴロー感が感じられる

ゴローさん第八十世代

第80世代くらい。

暴漢にボコられた感のあるゴローさんが大量に生産された。実験は失敗と言っていいだろう。

外国の有名人を作る ウェントワース・ミラー

外国人なら、もっと似るんじゃないかとプリズンブレイクのウェントワース・ミラーで試してみた。

だって、ベースに使うフィギュアが外国人だから!坊主頭だし、ほどよく無精髭が生えていて、Michael 4をベースにしたらちょうど良いのではないか。

最終結果がこちら。

おお…まさに、脱獄しそうな悪そうな人に仕上がっている。似せようとしている感じも伝わってくる。

だけど、類似度55%くらいで待っていられなくなって処理を止めたのだ。

ウェントワース・ミラー 第一世代

第一世代のランダム顔。悪人顔が揃ってる。

ウェントワース・ミラー 第三〇世代

第30世代。顔の方向性が定まりつつある。顔の輪郭がまだまだ不自然。

ウェントワース・ミラー 第六〇世代

第60世代くらい。このあたり、進化度合いはすっごく遅い。

今回の工夫など 類似度判定を省力化

顔の類似度判定は、こんな流れで行っている。

顔の位置を特定

顔の特徴ベクトル抽出

対象画像の特徴ベクトルと比べる

このうち、顔の位置特定に、けっこう時間がかかっていた。50人分ループするので、バカにならない待ち時間になっていた。

だが、今回の例では顔の位置は毎回同じなので、50人分の最初の一人分だけ顔の位置判定をして、残りは流用するようにした。

これによって、顔の類似の判定の時間が半分くらいになったのだ。素晴らしい。

また、調整対象のパラメ-タを、左右対称のものに限定した。

そのせいか、類似度の進化がなかなか進まなくなってしまったのだ。難しい。

今後の課題 重回帰分析などを組み込む?

遺伝的アルゴリズムは、ランダムでたまたま良い値が出たら、うまいことやりくりして最適値に近づけていこうという手法。

この、完全ランダムというのが効率悪いのかなとも思う。

50世代くらいぶんまわしたところで、このモーフパラメータをいじると類似度が大きく変わる…という重要パラメータが特定できるはず。

ちょっと調べたら、重回帰分析という方法で特定できそう。

重回帰分析とは | データ分析基礎知識

  • 50世代ループ…重要モーフを特定
  • 50世代以降…重要モーフ10個くらいにしぼって遺伝的アルゴリズムを行う

とかにしたほうが良いのではないか。

いやいや、そういう部分を人間のロジックで作りこむんじゃなくて機械学習を組み合わせれば…

探してみたら、遺伝的アルゴリズム+機械学習でNEATというPythonライブラリが見つかった。

遺伝的アルゴリズムxニューラルネットワーク(NeuroEvolution)でOpen AI Gymの二足歩行ロボを歩かせた話 – Qiita

なんか話がだんだん込み入ってきて、うわぁー!わから--ん!ってなってきたので、メモにとどめておいて、先に進もうと思う。

恐るべき技術かも?

まだ進化待ちで、どのくらい似たものができるかわからないが、これってけっこう怖い技術じゃないだろうか。

なぜって、写真が一枚あれば、Poserで激似芸能人顔モーフが作れるのだ。

場合によっては、Poserのモーフでキャラクターを作ってる職人さんを全員、敵に回す技術かも知れない。

まあ、考えすぎだとは思う。

Poser似顔モーフの覚書

「とりあえず動く」スクリプトを作った。

それはもう、つぎはぎだらけ。サンプルスクリプトを組み合わせて作った。

その他、気づいたこと。

Pythonベースで連携しているので、Poser限定。DAZ Studioは、DSスクリプト?という独自のスクリプトなので、流用はめんどくさそう。V8ベースで試してみたかったが…。

その後、DAZ StudioにFace Transfer機能が搭載され、芸能人に激似の顔が手軽に作れるようになったので、私のなんちゃってAIプロジェクトは打ち切りとなったのだった。


▲FaceTransferで作った石原さとみ。