30
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeepAelurus(NPO法人AI開発推進協会)Advent Calendar 2023

Day 18

【実験】正面の顔写真一枚からアバタ画像を作る&逆変換してリアルにしてみる

Last updated at Posted at 2023-12-17

はじめに

近年は生成AIの他にメタバースの技術も盛り上がっていますが、そこで欠かせないのが自分の「アバタ」です。
アバタ作成ソフトを使って好きなアバタを作ったり、 「自分に似たアバタを作る」 サービスも出てきています。

本記事では、画像生成・変換に特化した生成AI「Stable Diffusion」やその周辺の拡張技術を組み合わせることにより、単一の顔写真から特定のテイストに沿ったアバタをどれくらいうまく生成できるのか実験してみました

以下の環境で検証を行っています。

項目
OS Windows 11
CPU AMD Ryzen 7 5700X
メインメモリ 64GB
GPU NVIDIA GeForce RTX 3090

目的

単にアバタを作るのではなく、実在の人間の顔写真に似た顔のアバタを作ることを想定しています。

今回は、「VRoid Studio」で作れるアバタと同じような見た目・テイスト、かつ実在の人間に近いアバタを作ることを仮定し実験します。

注意
あくまで個人的な実験として行ったものを記載しています。VRoid Studioの利用規約を事前にご確認ください。

image.png
(出典:公式YouTube動画より)

アバタ化するターゲットとして、以下の4人を用意しました。「ぱくたそ」さんから、背景が白く使いやすい写真をお借りしました。

image.png

実験1. まずは用意したアバタのテイストを学習してみる

Stable Diffusionを使い、VRoidのテイストを学習させてみます。簡単にLoRAを学習することができる「sd-scripts」を利用しました。

学習にあたり、実際にVRoid Studioを使って数十体のモデルを作り(なるべく街にいそうな顔、現実的な顔)、正面のキャプチャを用意しました。簡易化のため、服は青のTシャツで統一しています。

image.png

共通事項として以下のプロンプトを利用しました。vroidstudioが新しく学習される単語になります。

vroidstudio, looking at viewer, blue shirt, facing front, white background

用意した画像を使ってLoRAを学習し、vroidstudioをプロンプトに入れてランダムなシード値で画像生成した結果がこちらです。

image.png

データセットには使っていない髪型やポーズも出現しており、かなり用意したアバタのテイストを学習できているようです。

実験2. Image-To-Image(i2i)機能を使って直接顔写真からアバタを作ってみる

Stable DiffusionはImage-To-Image(i2i)も行うことができます。直接顔写真を入力し、プロンプトにvroidstudioと指定してみた結果、以下のようになりました。

image.png

用意したデータセットのテイストにはなっていますが、シードを変えるとかなり見た目が変わってしまっているほか、データセットにない髪型を表現するのは難しいようです。。

実験3. ControlNetを使ってアバタ化してみる

ポーズ推定、線画からの画像生成など多彩な入力画像のコントロールができる「ControlNet」を使って実験2と同じことを試してみました。

入力画像を線画に変換してからStable Diffusionで生成を行う「Canny」のモデルを使ったところ、以下のような画像が得られました。

image.png

実験2よりは安定した生成ができているものの、入力が線画のため髪色肌の色が変化してしまっています。
また、実在の顔写真からの線画抽出はパラメータ(閾値)の調整が難しく、設定によっては特に髪型を完全には捉えられていないことがわかります。
いろいろな顔写真を入力としてアバタの生成を自動化することをゴールと考えると、線画の抽出はボトルネックになりそうです。

image.png

実験4. 実験3で得られた画像を調整する

実験3では、口・鼻の周りが変だったり、髪型が一部崩れていたりしました。
そこで、実験3で得られた画像をさらにImage-To-Imageで変換することで、よりデータセットに近い綺麗なアバタにできるのか試してみました。

ノイズ除去強度0.60で変換した結果がこちらです。
image.png

若干崩れている場所はあるものの、さらにデータセットのアバタに近くなりました。

ノイズ除去強度を上げるとよりデータセットに近いアバタにはなりますが、入力画像とは似ていない画像になってしまうためこちらもパラメータの調整が難しいです。
image.png

実験5. 逆にアバタをリアルにしてみる

今回は、実験1~4で得られたアバタ画像を逆にリアルにできるのか試してみました。
公開されているStable Diffusionのリアル系モデルを使ってImage-To-Image変換を行ったところ、以下のようになりました。

5-1. そのままLoRAを適用した場合

image.png

LoRAの学習には使っていないリアル系モデルにLoRAを適用してみると、データセットのVRoidの雰囲気は出しつつも昔のゲームのような3DCGの質感で出力されました。

5.2. 素のリアル系モデル場合

image.png

輪郭や顔の形状を保ったまま、5.1と比べてよりリアルよりな画像が生成されました。リアル系なアバタとしてこれはこれでありかもしれません。

ここまで何度も変換を重ねてみましたが、イラスト寄り/リアル寄りそれぞれの結果と元の顔写真と比較するとこんな感じです。

image.png

どことなく本人の特徴を反映したアバタを作ることはできましたが、細かい点を工夫すればさらにクオリティーの高いアバタが作れそうですね!

おわりに

本記事では、顔写真一枚から特定のテイストのアバタを作る実験を行いました。
主にStable DiffusionのImage-To-ImageやLoRAを組み合わせて生成してみましたが、別のアプローチを使えばさらに質が高くかつ本人に似た良いアバタが作れるかもしれません。

最後までお読みいただきありがとうございました!

30
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?