はじめに
先日の記事『【Paperspace Gradient】Text2Video-ZeroとAnything v4.0を用いて,テキストからアニメ動画を生成してみた』ではText2Videoで動画の生成を行った.そこで得られた動画をFILM(Frame Interpolation for Large Motion)というフレーム間補間の技術を用いることで,動画を滑らかにすることができたので,その方法を記述する.
ちなみに,基本的には以下のGoogle Colabのノートブックの通りで実行できた.
https://colab.research.google.com/drive/1NuaPPSvUhYafymUf2mEkvhnEtpD5oihs
方法
動画の生成
先日の記事(Paperspace版,Colab版)に基づき動画を生成する.
動画の分割とアップロード
以下のコマンドで動画を分割した(ローカル環境で実施した).
ffmpeg -i 分割したい動画.mp4 保存先/%06d.jpg
その後,Paperspaceのワークスペース(/notebooks)直下に「photos」というフォルダを作成し,分割して得られた画像ファイルをすべてアップロードする.
FILMの実行
上記のColabのノートブックとほぼ同じだが,ディレクトリが異なるのでそこだけ修正した.
「/tmp」ディレクトリをHOMEに指定する.
import os
%cd /tmp
HOME='/tmp'
!nvidia-smi
コードをGithubからクローンする.
if not os.path.isdir(f'{HOME}/frame-interpolation'):
!git clone https://github.com/google-research/frame-interpolation
%cd frame-interpolation
FILMをインストールする.あと,事前学習モデルをダウンロードする.
!pip install -r requirements.txt
if not os.path.isdir(f'{HOME}/frame-interpolation/pretrained_models'):
!gdown 1C1YwOo293_yrgSS8tAyFbbVcMeXxzftE -O pretrained_models-20220214T214839Z-001.zip
!unzip -o "pretrained_models-20220214T214839Z-001.zip"
!rm -rf pretrained_models-20220214T214839Z-001.zip
実行する.生成する動画のフレーム数を決定するrecursion_times は最大の10とした.緑色のバーが2本終了すると処理が終わる.画像が8枚で,A6000を使用した場合,25~30分ほどで処理が終わった.
今回の場合,処理して作成した動画は「/notebooks/photos/interpolated.mp4」に保存される.
input_folder = '/notebooks/photos'
recursion_times = 10 #@param {type:"slider", min:1, max:10, step:1}
model_path = f'{HOME}/frame-interpolation/pretrained_models/film_net/Style/saved_model'
!python3 -m eval.interpolator_cli \
--pattern $input_folder \
--model_path $model_path \
--times_to_interpolate $recursion_times \
--output_video
# Interpolated frames will be saved at `${input_folder}/interpolated_frames`
# and the output video will be at `${input_folder}/interpolated.mp4`
最後に,必要に応じて,生成した画像ファイルを消す.
!rm -r /notebooks/photos/interpolated_frames
得られた動画
以下に得られた動画を掲載する.
非常に遅かったので,ffmpegで60倍速にした.recursion_timesは6で十分かもしれない.
背景の動きが変.無地の方が良いかも.腕の位置が極端に変わって,ワープした感じになってる時もある.
下半分(足の部分)だけ見れば,それなりにアニメーションしてるようにも見える.
まとめ
FILMを使うことで,動画をぬるぬる動くようにできた.某パズルソシャゲの動くアニメーションっぽい.
人が描いたアニメと比較すると違和感がある.すべての物体が同じ速度で動いてるからかな?
入力画像の背景が無い方が自然な感じになるのかもしれない.
コメント
こちらのコード使わせて頂きましたが
コードが動かずエラー出ます
何が悪いでしょうか?
Paperspace Gradient使用中です
test様
ご連絡いただきありがとうございます.
返信が遅くなり申し訳ありません.
エラーに関しては,コードを確認しないと分かりません.
ただ,Google Driveのリンクなどが切れてるのかと思いましたので,私の環境で動作させたところ,実行可能でした.
記事中のコードを間違えている可能性はあるので,以下よりipynbファイルをダウンロードして実行してみてください.
https://colab.research.google.com/drive/1yUX8Zizz5SeTMttHISaL_NLktxlvac4g?usp=sharing
以上よろしくお願いします.
test様
ブログを更新する時間が無く,返信が遅れました.
エラー内容を拝見しました.
どちらのエラーもpythonのモジュールのインストールの失敗に起因したものだと思われます.
pipをupgradeする方法が良いかもしれませんので,ひとまず以下のブログを参考にpipをupgradeした後に「!pip install -r requirements.txt」を実行してみてください.
https://www.curict.com/item/5a/5ac72d2.html
上記をやってもダメなら,tensorflowに関しては以下のサイトを参考にインストールしてみてください(FILMSのrequirementが2.6.2なので,そのバージョンを)
https://kajindowsxp.com/pip-unable/
mediapyに関しても,個別にインストールすれば有効になる可能性はあります.
!pip install -q mediapy
ちなみに,notebookの作成時にどの項目を選んでいますでしょうか.
私はすべて「Start from Scratch」で作成しておりますが,その辺りの設定が異なると環境が変わる可能性があるので,notebookの作成方法も確認してみてください.