ディープラーニングの使いどころはたくさんあると思います。今までいろいろなモデルをいじってきた私が考える、ディープラーニングの使い方の真骨頂は「補間」です。今回、試してみるのは”THE補間”ともいえる技術のFrame Interpolation for Large Motion(FILM)です!
Google ResearchによってすごいAIがつくり出されました。今までいろいろなAIを見てきましたが、今回のFILMはかなり興奮しました。どんなもんかというと↓です。
2枚の画像を入力するだけで、その間の動きを補間しぬるぬる動かすというモノです。まるでハリーポッターの日刊予言者新聞です。わかるかなぁw
独自のデータでも2枚の静止画から動画化できます↓
実物大の躍動感がでています。正直ここまでできることに驚きました。
Frame interpolation技術はディープラーニングで最近研究されているホットな分野ですが、こんなに大きなモーションを補間するモデルはさすがGoogle Researchというところです!
FILM:Frame Interpolation for Large Motionについて
このブログで詳しくアーキテクチャを紹介しませんが、従来のFrame interpolationだと深度マップが必要でデータセットの準備に労力が必要だったところ、FILMでは不要になっています。
また、従来のFrame interpolationは動画のfpsを上げるような、小さいモーションの補間がメインだったのに対し、FILMは大きいモーションの補間ができます。このおかげで2枚の画像からぬるぬるの動画をつくり出すことができるようになりました!
FILMを使ってみる
FILMのwindowsでの使い方はここに詳しく記載されています。参考にしてください。特にCUDA、cudnn関連は細かく記載ありました。親切です。
ちなみに私の環境は公式とは少し違うのですが動いたので、そちらを記載しておきます↓
実行環境
いつものようにローカル環境で実装していきます。
PC環境
- OS : Windows 11
- CPU : AMD Ryzen7 5800
- メモリ : 16GB
- GPU : GeForce RTX3070 8GB
CUDA関連
- CUDA : 11.4(公式の推奨は11.2.1)
- cuDNN:8.2 (公式の推奨は8.1.0)
Python
- Python 3.8.12(公式の推奨は3.9)
ライブラリ
- TensorFlow-gpu : 2.6.0
- その他 : requirements.txtを参照
ソースコード
ソースコードをダウンロードもしくはcloneして作業フォルダとします。↓のコードを。AnacondaPromptなどで実行してください。※Gitはあらかじめインストールしておく必要があります。
git clone https://github.com/google-research/frame-interpolation frame_interpolation
ライブラリインストール
作業ディレクトリへ移動し必要なライブラリのインストールしてください。
pip install -r frame_interpolation/requirements.txt
conda install -c conda-forge ffmpeg
事前学習済みの重みデータをダウンロード
ここのgoogle driveへアップロードされているpre-trained models(film_net, vgg)を全てダウンロードしてください。その後、作業フォルダの中に「pretrained_models」というフォルダを新しくつくり、ダウンロードしたデータを入れてください。
FILMを動かしてみる
サンプル画像で動かしてみます。↓のコードを実行してください。サンプルでphotosフォルダに入っている2枚の画像から動画が生成されます。
python -m frame_interpolation.eval.interpolator_cli --pattern frame_interpolation/photos --model_path frame_interpolation/pretrained_models/film_net/Style/saved_model --times_to_interpolate 6 --output_video
引数を簡単に説明すると↓です。
--pattern : 画像の保存してあるパス。複数枚画像がある場合はそれぞれについて補間する。 --model_path : 学習済みの重みデータのパス。 --times_to_interpolate : 2枚の画像をどのくらい補間するか指定。(6に設定した場合 2^6+1=65枚) --output_video : mp4出力する。 --fps : mp4出力する場合のfpsを設定する。 --frame1 : --patternの代わりに使用。入力画像1のパスを指定。 --frame2 : --patternの代わりに使用。入力画像2のパスを指定。
実行すると「interpolated_frames」というフォルダが生成され、そこへ補間画像が保存されます。
–output_videoを引数に指定すると入力画像と同じ場所へinterpolated.mp4ファイルが保存されます。動画のfpsは–fsp引数で設定することもできます。
この手順で実装できると思います👍試してみてください。
独自データで試してみる
独自データで試して検証します。
まずはコレ↓ガンプラです。マットブラックに自分で塗装しました👍Aの写真を少しだけ回転させてBを撮影しています。
この2枚の画像でFILMをやってみると↓
ぬるぬる回転します。よく見ると右腕の補間が少しおかしな感じでしょうか。
画像枚数を4枚にしてロングバージョンもやってみました。
ぬるぬるです👍ビームサーベルの補間がおかしくなっていますが。。。万能というわけではなく、写真間のズレが大きかったり、学習サンプルとかけ離れていると失敗するみたいです。
他にもいろいろやってみたので載せておきます。
今日も良いディープラーニングライフを👍
関連書籍のご紹介
ディープラーニングをやってみたい!という方におすすめな関連書籍のご紹介。
コメントなどあれば、お気軽にどうぞ👍
コメント