【Paperspace Gradient】FILM(Frame Interpolation for Large Motion)で動画の補間をしてみた

はじめに

先日の記事『【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版)に基づき動画を生成する.

生成直後の動画.プロンプトは「A girl walks in the woods」とした.

動画の分割とアップロード

以下のコマンドで動画を分割した(ローカル環境で実施した).

ffmpeg -i 分割したい動画.mp4 保存先/%06d.jpg
分割後

その後,Paperspaceのワークスペース(/notebooks)直下に「photos」というフォルダを作成し,分割して得られた画像ファイルをすべてアップロードする.

/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`
緑色のバーが2本終了すれば,処理が終わる.recursion_timesを10にした場合は画像8枚で25分~30分かかった.recursion_timesが6の場合は,その16分の1ぐらいの時間で終了した.

最後に,必要に応じて,生成した画像ファイルを消す.

!rm -r /notebooks/photos/interpolated_frames

得られた動画

以下に得られた動画を掲載する.

非常に遅かったので,ffmpegで60倍速にした.recursion_timesは6で十分かもしれない.

背景の動きが変.無地の方が良いかも.腕の位置が極端に変わって,ワープした感じになってる時もある.

下半分(足の部分)だけ見れば,それなりにアニメーションしてるようにも見える.

得られた動画(60倍速)

まとめ

FILMを使うことで,動画をぬるぬる動くようにできた.某パズルソシャゲの動くアニメーションっぽい.

人が描いたアニメと比較すると違和感がある.すべての物体が同じ速度で動いてるからかな?

入力画像の背景が無い方が自然な感じになるのかもしれない.

コメント

タイトルとURLをコピーしました