ゲーミングノートでLifespan Age Transformation Synthesisを動作させたときのメモ
先日、ITmediaのページ 赤ちゃんから老人の顔まで、1枚の顔写真で合成 深層学習で加齢変化を予測 を読んで、おっ面白そうだな自宅PCで動作するかな?と思いつき試してみたときのメモになります。
なお、この合成予測技術の内容はわたしさっぱり分かりません。(笑)
本家のページLifespan Age Transformation Synthesis 中のCode Lifespan Age Transformation Synthesis (Github)というリンク先を見てみます。まず「You must have a GPU with CUDA support in order to run the code.」と書かれていることを確認しました。
用意したもの
- NVIDIAのグラフィックチップが載ったPC(今回はHP OMENというRTX2070が搭載されたWindowsゲーミングノートを使用)
- CUDA Toolkit 11.2
- Anaconda
- Visual Studio 2019 Community版
環境の準備
1.上記のソフトウェアをインストールします。
VS2019については「C++によるデスクトップ開発」を選択しておきます。これdlibのためだけです・・・
2.Anacondaでそれ用の環境を一つ作成してその環境のコマンドプロンプト(or PS)を開いておきます。
必要なもののインストール
本家GithubページのPre-Requisits(前提条件)というところに必要なものが記載されていますので、これらをインストールしていきます。
1.本体
GithubからPCの適当なところにcloneします。コマンドでもDownload Zipでもお好きな方法で。
2.Pytorch
ダウンロードページで、Stable,Windows,Conda,Python,11.0 を選択してRun this Command欄に出ているコマンドconda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch
を、先に作ったAnaconda環境のコマンドプロンプトに貼り付けてインストールします。バージョンが11.0とあって先にCUDA ToolKitダウンロードで指定していた11.2ではありませんが動作はしました。
3.その他
Pre-Requisits(前提条件)に記載の各パッケージをconda install何々でインストールしていきます。condaでできないものは仕方ないのでpip(pip3だったかも)でインストールしていきます。ここで、dlibがインストールできない場合は先にpip install cmakeだったかVS2019インストールで出来る「x64 Native Tools Command Prompt for VS 2019(コンパイラへのpathが通っている)」中からactivate 何々と環境切り替えたあとだったかで導入できたはず(うろ覚え)。
実行
Quick Demo - Running locally欄以下に記載のあるように、本体ディレクトリの下にrun_scriptsというのがあるので、そこの中のスクリプトを適当にパラメータを変更し、また変化させたい顔写真画像を指定して実行します。
例えばin_the_wild.batだと顔変化が動画ファイルで\test_latest\traversalに出力されます。確かに顔の特徴を保ったまま年代変化していって面白いです。
顔写真画像についての注意事項はUsing your own images欄に書かれています。カラー画像、正面で等々。試しに織田信長公の有名な絵の顔部分を入力してみましたがこれは微妙だった・・w
データセットはcloneしたdatasetディレクトリ中には少ししかなく出力結果もいまいち以下なので、それなりのを入手するのにはTraining/Testing on FFHQ-Aging欄で書かれています。が、とりあえず動かすのであれば「Download pretrained models (Optional)」でダウンロードされる学習済みモデルのファイルを使ったほうが早いのではと思います。顔写真画像ダウンロード、途中で何度もダウンロードが中断してしまいましたし。
あとQuick Demo欄の最後に以下の文があります。
If you get a CUDA out of memory error, slightly increase the --interp_step parameter until it fits your GPU. This parameter controls the number of interpolated frames between every 2 anchor classes. Increasing it will reduce the length of the output video.
動作させようとしたRTX2070では専用メモリ8GBです。in_the_wild.bat中に予め書かれていた--interp_step値は0.05だったのですがこれでは実行に失敗し、0.08ぐらいだと動作しました。
以上になります。
いろいろ適当に作った環境ながら何とか動かせてよかったです。ざっと出力出来て満足できた感もありますが(笑)