トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

顔を変える機械学習Fakeapp使ってみた

機械学習で顔を入れ替えるれるソフト?です。名前だけ聞くと気軽にできるスマホのアプリみたいですが、GPUがそこそこ必要なPCのソフトです。

でも思っていたよりはすごい簡単にできました。

realsound.jp

参考

英語ですが公式解説動画もあります。喋ってる声を聞かなくても画面だけ見て、真似たらいいと思います。

www.youtube.com

日本語だとこちらがわかりやすい

機械学習でコラ動画を作る - ニコニコ動画

やる

私のPCの環境はこんな感じです。PUBGができるぐらいがあればいいそうです。

本体:G-GEAR GA7A-B92/T
CPU:AMD RYZEN5 1600
グラフィック:NVIDIA GeForce GTX 1060 6GB
メモリ:16GB
SSD:250GB
OS:Windows10 Home 64bit

環境整える

公式サイトからfakeappをダウンロードします。

https://www.fakeapp.org/

app本体とcoreの両方をダウンロードしました。

https://www.fakeapp.org/forum/releases-tech-support/releases

f:id:bibinbaleo:20180718174213p:plain

Cドライブ以外でも大丈夫でした。

その後

C:\Users\[USER]\AppData\Local\FakeApp\app-2.2.0\resources\api

のフォルダの中にcoreで解凍した中身を入れます。

その後、Fakeappを実行するとこんな画面になります。

f:id:bibinbaleo:20180718174204p:plain

ちなみにcoreの中身を入れる前にexeを実行するとこんな感じのダイアログが出て使えません。これが出なくなればちゃんとできているということらしいです。

f:id:bibinbaleo:20180718174209p:plain

CUDAのver9やvisualStudioなども必要らしいですが、私は昔入れていたみたいです(覚えてない)

動画を用意

体用の動画と顔用の動画を用意します。

私は適当にYoutubeにある好きな歌手のインタビュー動画と、好きなyoutuberの動画をbandicamでそれぞれ1分ずつ録画しました。10MBと20MBになりました。

どれくらいの動画の長さ、大きさがいるのか、どういう素材がいいのかはよくわかりません。

どちらも顔がずっと映っているものにしました。

 

ここからは著作権肖像権がかかわってくるので個人的に楽しんでやります。(よく知らない人の顔より知っている顔のほうが結果がわかりやすいと思う。)

 

動画のパスをFakeAppに貼って、FPSも入力します。

f:id:bibinbaleo:20180718183751p:plain

Fpsは動画のプロパティの詳細から見れました。大体でいいのかな???よくわからない。

f:id:bibinbaleo:20180718183748p:plain

そしてEXTRACTを押すと何かが始まりました。

同じ階層の新しい「dateset-XX」フォルダの中に動画の画像がpngで出力され、さらにその中の「extracted-XX」フォルダの中に顔画像が抽出されたjpgファイルが書きだされていました!すでに面白い!

これをそれぞれの動画でやります。私はそれぞれ5分ぐらいで終わりました。

学習

今までは顔を切り抜いただけです。

ここからAIに学習させます。

f:id:bibinbaleo:20180718190635p:plain

TRAINタブに行って、

Modelは結果画像を入れるフォルダ(自分で作る)

DateAが体になる(顔以外を使う)データセット

DateBが顔になるデータセット

のパスをセットします。 

SettingでBatchi、Nodes、Layersのサイズを環境に合わせて変更してもいいそうです。

私はよくわからなかったのでそのままにしました。

 

そしてTRAIN開始

最初LossA LossBだけが出てきて失敗かと思いましたが、しばらくしたら数値が変更され、学習している画像が出てきます。

見てると楽しい。

数値が0.02以下になったらそこそこの出来だそうです。

 

時間はかなりかかる見込み

【fakeapp】使い方と推奨GPUまとめ2018 - 旬ニューす

上の記事によると1060の6GBだと12~24時間かかるそうです。

終わるには画像が表示されている画面(Train Oreview)をクリックしてQを押すと終了するそうです。

私は夜の8時ぐらいに初めて、朝の8時まで回していました。

数値はよく覚えていないけど0.01ぐらいにはなっていたと思います。

結果動画生成

CREATEタブで学習結果のフォルダと、体のほうの元動画、フレームレートを記入

f:id:bibinbaleo:20180719093659p:plain

最初、勝手に最初から記入されていたので、それでやったらVideoが顔のほうの元動画になっていて、同じ顔の人がちらちらするだけの謎動画が生成されてしまった。

気を付けよう。

settingでいろいろ変更できる。

Seamlessは顔のつなぎ目、輪郭を自然にする

Blur Sizeはつなぎ目のぼかし量

Kernel Sizeはつなぎ目の削り量

参考

機械学習でコラ動画を作る - ニコニコ動画

 

DirectionをBtoAにした状態で、Videoを顔の元動画に設定したら逆もできました。

つまり一回の学習で両パターン作れる。

結果

肌の色味が違ってかなり違和感が出ました。参考動画ほどの精度は出ませんでした。

ただ喋りとか顔の向きとか瞬きとかは完璧に置き換えられていて、面白かった。

Youtuber動画のほうは頻繁なカットがありましたが、そこはフレームごとに置き換えているので問題ありませんでした。

字幕や手で顔の3分の一ぐらいが隠れると、置き換えられなくなりました。

ただ目に髪がかかっているぐらいは問題ないようでした。

また動画中に顔写真が入っている部分があったのですが、そっちが変換されてしまいました。なんで!

感想

パソコンで部屋が暑くなりました。

今までOpenPoseとかを使おうとして、一回も環境構築がうまくいったことがなくてAIに苦手意識があったのですが、たまたま一発で動いてくれてよかったです。