[Neural Voice Puppetry]機械学習で顔写真を喋らせる[アバター生成]

2021年11月5日金曜日

Artificial Intelligence

本記事では、Neural Voice Puppetryと呼ばれる機械学習手法を使って顔写真から3Dアバターを作成し、喋らせる方法を紹介します。

アイキャッチ

style_avatarとは

Neural Voice Puppetryは、オーディオを起点とした顔のビデオ生成手法です。
顔写真とオーディオを入力すると、オーディオに同期した顔写真の3Dアバターを生成し写実的なビデオを出力します

構成概念図
出典: https://github.com/wuhaozhe/style_avatar

この技術によって、合成音声で生成したオーディオから特定の俳優が話す動画を生成することができます。
こちらに公式のデモ動画がアップデートされています。デモ動画
使用ユースケースとしては、下記が挙げられています。

  1. オーディオ起点のアバター生成
  2. ビデオの生成
  3. 肩から上の大写し映像の生成

この技術は、現実の撮影なくあたかもその人が話したかのような動画を生成できます。
悪用すれば悪質なFake動画を生成できてしまいます。

このため、法律を遵守し、倫理観に反さない使用が求められます。

Neural Voice Puppetryの導入手順

セットアップ

それでは早速、開発環境にNeural Voice Puppetryをセットアップしていきます。
動作確認は下記の環境で行っています。

OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

それでは、Neural Voice Puppetryをインストールしていきます。

他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。

下記のプロジェクトはTensorflow 1.14.0を使用しています。cuda tool kitは10.0である必要があります。

# python version 3.6のconda環境を作成
$ conda create -n style_avatar python=3.6

# 作成した環境をアクティベート
$ conda activate style_avatar
$ cd style_avatar

# gitからコードをclone
$ git clone https://github.com/wuhaozhe/style_avatar.git
$ cd style_avatar

# Proxy配下の場合はライブラリのインストール前に下記を設定
$ export http_proxy="http://"username":"password"@proxy:port"
$ export https_proxy="http://"username":"password"@proxy:port"

# 明示的にcuda10.0に対応するtensorflow-gpuをインストール
$ conda install tensorflow-gpu=1.14.0 cudatoolkit=10.0
# 明示的にcuda10.0に対応するpytorchをインストール
$ pip install torch==1.2.0 torchvision==0.4.0 -f https://download.pytorch.org/whl/cu100/torch_stable.html

# 関連するライブラリをインストール
$ pip install -r requirements.txt

# mp4を扱うためのライブラリをインストール
$ conda install x264=='1!152.20180717' ffmpeg=4.0.2 -c conda-forge

続いてモデルをダウンロードしていきます。

# deepspeechモデル(617MB)のダウンロード
$ cd deepspeech
$ wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.2/deepspeech-0.9.2-checkpoint.tar.gz
$ tar -xvf deepspeech-0.9.2-checkpoint.tar.gz

# audio2motionモデルのダウンロード
$ cd ../audio2motion/
$ mkdir model
$ cd model
# https://cloud.tsinghua.edu.cn/f/acb6d482a26e4eb8b116/?dl=1からbackbone.pkl(36MB)をダウンロード
# /audio2motion/model/にbackbone.pklを配置

# texture encoderとrenderのダウンロード
$ cd ../../render/
$ mkdir model
$ cd model
# https://cloud.tsinghua.edu.cn/f/c60a3466016948c48951/?dl=1からtex_encoder.pkl(50.4MB)をダウンロード
# https://cloud.tsinghua.edu.cn/f/106023055772444f8f15/?dl=1からface_unet.pkl(700MB)をダウンロード
# /render/modelにtex_encoder.pklとface_unet.pklを配置

# FaceReconModelモデルのダウンロード
$ cd ../../deep_3drecon/network/
# https://drive.google.com/u/0/uc?id=176LCdUDxAj7T2awQ5knPMPawq5Q2RUWM&export=downloadからFaceReconModel.zip(260MB)をダウンロード
# /deep_3drecon/networkにFaceReconModel.zipを配置
$ unzip FaceReconModel.zip
# /deep_3drecon/networkにFaceReconModel.pbを配置

# MorphableModelモデルのダウンロード
$ cd ../BFM/
# https://faces.dmi.unibas.ch/bfm/main.php?nav=1-2&id=downloadsにアクセスして利用規約に同意
# メールに届くアドレスからBaselFaceModel.tgz(230MB)をダウンロード
# /deep_3drecon/BFMにBaselFaceModel.tgzを配置
$ tar -xvf BaselFaceModel.tgz
# /deep_3drecon/BFMに01_MorphableModel.matを配置

# Exp_Pcaモデルのダウンロード
# https://github.com/Juyong/3DFace/blob/master/Exp_Pca.binからExp_Pca.bin(48.7MB)をダウンロード
# /deep_3drecon/BFMにExp_Pca.binを配置

以上で、セットアップは完了です。

アバター生成

入力データには、顔写真音声データが必要です。
本記事では、ロイヤリティフリーの下記の画像とナレーション音声を利用させて頂きます。

アバター生成入力画像
$ cd style_avatar
$ mkdir output
$ python demo.py --in_img [*.png] --in_audio [*.wav] --output_path [path]
$ 例) python demo.py --in_img inputs/input_face.png --in_audio inputs/input_audio.wav --output_path output/

上記のコマンドで--output_path--in_imgに指定した顔写真が--in_audioの音声を話す動画が出力されます。

1枚の画像だけで音声に合わせて動くアバターを生成するとはなかなか脅威的です。
便利な一方、正しい使い方が求められますね。

トラブルシューティング集

RuntimeError: The NVIDIA driver on your system is too old

エラー詳細
RuntimeError: The NVIDIA driver on your system is too old (found version 10010). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.
解決方法

# https://pytorch.org/get-started/previous-versions/ でバージョン確認
$ conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch
もしくは
$ pip install torch==1.2.0 torchvision==0.4.0 -f https://download.pytorch.org/whl/cu100/torch_stable.html

Cannot assign a device for operation Squeeze: node Squeeze

エラー詳細
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation Squeeze: node Squeeze
解決方法

$ pip list | grep tensor
tensorboard          1.14.0
tensorboardX         2.4
tensorflow-addons    0.14.0
tensorflow-estimator 1.14.0
tensorflow-gpu       1.14.0

# 一度アンインストール
$ pip uninstall tensorboard tensorboardX tensorflow-addons tensorflow-estimator tensorflow-gpu

# こちらでバージョンを確認してインストールhttps://www.tensorflow.org/install/source?hl=ja#gpu_support_2
$ pip3 install tensorflow-gpu==1.14.0 tensorflow-addons tensorboardX
またはこちら
$ conda install tensorflow-gpu=1.14.0 cudatoolkit=10.0

Unknown encoder 'libx264'

エラー詳細
Unknown encoder 'libx264'
解決方法 conda install x264=='1!152.20180717' ffmpeg=4.0.2 -c conda-forge

まとめ

本記事では、Neural Voice Puppetryで一枚の画像から音声に合わせて話すアバターを生成する方法を紹介しました。

このような技術はDeepFakeに代表されるように、耳目を集める技術一方で、誤った使い方をして逮捕者が出ている技術でもあります。
但し、技術に罪がある訳ではなく、技術を使う人に悪意があることが原因だと思います。
是非人の役に使い方をお願い致します。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1. 論文 - Neural Voice Puppetry: Audio-driven Facial Reenactment

2. GitHub - wuhaozhe/style_avatar

3. nvidia - CUDA Toolkit 10.0 Archive

4. Qiita - 異なるバージョンのCUDAを使い分ける単純な方法

5. CUDAのバージョンの切り替え方

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology