Google Colaboratoryを使って機械学習の環境を作り、新垣結衣さんの「フェイクポ●ノ(機械学習アイ●ラ)」に4月1日なので挑戦してみた。
新垣結衣さんの「フェイクポ●ノ(機械学習アイ●ラ)」キラーワードだなぁ。
https://github.com/deepfakes/faceswap
を使って、動画の顔の抽出してみましたが、顔部分は失敗しましたが、まぁ流れはできたと思います。
インストール
機械学習の学習が足りなかったのか、新垣結衣さんの元素材画像足りなかったが何なのか。
Google Colaboratoryを下記を
karaage.hatenadiary.jp
参考にごにょごにょしててで、実行する環境が、5時間くらいでできた。
欲望を叶える力を使い、実装するのは楽しい??
Google Drive の容量も 15GB だと足りずな、気もする。
動画を静止画にする為に ffmpeg を Google Colaboratory に install します。
!apt-get update
!apt-get upgrade
!apt-get install -y ffmpeg
Google Colaboratory 中の方に、file を出力すれば良いかも知れないなぁ。
Google Drive を使える方法。
# Install a Drive FUSE wrapper. # https://github.com/astrada/google-drive-ocamlfuse !apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse
色々認証が必要です。これで Google Drive のマウントをします。
# Generate auth tokens for Colab from google.colab import auth auth.authenticate_user()
# Generate creds for the Drive FUSE library. from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() import getpass !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL vcode = getpass.getpass() !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
# Create a directory and mount Google Drive using that directory. !mkdir -p drive !google-drive-ocamlfuse drive
Google Drive にマウントができているか、繋がっているかを確認。
print('Files in Drive:') !ls -al drive
Google Drive に deep ディレクトリを作ります。
deep の 中に faceswap を upload します。
faceswap に from, scene ディレクトリを作ります。
sample.mp4 が動画だとして説明をします。
sample.mp4 の動画サイズが大きいと、全然、終わらないので注意が必要です。
!ffmpeg -i drive/deep/faceswap/from/sample.mp4 -vf fps=30 drive/deep/faceswap/scene/scene%06d.png
ここの drive/deep/faceswap/scene/scene%06d.png を Google Colaboratory 中にしても良いかも。
下記の install 群は必要がないものもあるかもです。
!pip install virtualenvwrapper-win
!pip install cmake
!pip3 install face_recognition
!pip3 install scandir
!pip install tqdm
学習済みモデルのコピー
Windows用 FakeApp に同梱されている学習モデルをコピーします
https://mega.nz/#!hTgA2b6b!mI6k9dFt_w__jIEUQO2ZePhzFMg6JWUpBZWiV2TDgs4
上記リンクから FakeApp.zip をダウンロードし、以下のファイル(学習済みモデル)を drive/deep/faceswap/model にアップロードします。
encoder.h5
decoder_A.h5
decoder_B.h5
!cd drive/deep/faceswap;python faceswap.py -h
こちらの内容で error ぽいものが出て無ければ OK です。
これで、下準備が終わり、これに結構、掛かりました。
静止画から顔の抽出をする。
faceswap に His_face ディレクトリを作ります。
drive/deep/faceswap/scene/scene%06d.png を素材にする場合
動画側の顔を抽出 sample.mp4 の動画サイズが大きいと、こちらも全然、終わらないので注意が必要です。
!cd drive/deep/faceswap; python faceswap.py extract -i scene -o His_face
新垣結衣さんの画像(本当は誰でも良いですが、乃木坂46の誰かでも良いですが)を集めて
Google Drive deep/faceswap/Me に沢山、入れる。
私は、ここに 10 file しか入れずに行いました。多分、全然、足りてない。
!cd drive/deep/faceswap; python faceswap.py extract -i Me -o My_face
機械学習をする。
!cd drive/deep/faceswap; python faceswap.py train -A His_face -B My_face -m model -p
※Google Colaboratory なので、これが正しくできているのか、良く分からない。
Google Colaboratory の場合は -p は付けたら駄目かも知れず。
!cd drive/deep/faceswap; python faceswap.py train -A His_face -B My_face -m model
※Google Colaboratory なので、これが正しくできているのか、良く分からない。
drive/deep/output/sample のディレクトリを作る。
顔を入れ替えた静止画を生成する。
!cd drive/deep/faceswap; python faceswap.py convert -i scene -o ../output/sample -m model
静止画を動画にする。
!ffmpeg -i drive/deep/output/sample/scene%06d.png -c:v libx264 -vf "fps=30,format=yuv420p" drive/deep/output/to_sample.mp4
流れは、これで合っているはずです。
何か、変な所やここをこうしたら解決するよという情報があれば HatenaBookmark で下さいな。
静止画を楽に集める方法も教えて下さいな。
何か、欲望の吐け口の機械学習な気がしますね。
画像が変になったので、こちらを思い出しました。
まだ、ちゃんとした動画はできてませんけども、
色々と問題があるものなので、でき上がった動画は公開はできませんね。
クリスマスとか、バレンタインデーに、公開した方が、負けた感じが出たかもね。
ちょっとおまけ。
[ランタイム]->[ランタイムのタイプを変更]->[ハードウェアアクセラレータ]->[GPU] に変えて下記を実行して True が出力されれば [GPU] で実行が可能。
from os import path from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag()) accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu' !pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.3.0.post4-{platform}-linux_x86_64.whl torchvision # GPUの確認 import torch use_gpu = torch.cuda.is_available() print(use_gpu)