[AMT] AIで2つのフレーム画像の中間画像を生成する

2023年5月18日木曜日

Artificial Intelligence

本記事では、AMTと呼ばれる機械学習手法を用いて2画像間の中間画像を生成するVideo Frame Interpolation技術をご紹介します。

アイキャッチ

AMT

概要

All Pairs Multi Field Transforms(AMT)は、2つのフレーム画像から中間画像を生成するVideo Frame Interpolation技術です。

AMTでは、入力フレームが相関エンコーダー(Correlation encoder)に送信されて特徴が抽出され、これを使用して双方向相関ボリュームが構築されます。

次に、コンテキストエンコーダ(Context encoder)は、可視フレームのピラミッド特徴を抽出し、初期の双方向フローと補間された中間特徴を生成します。

次に、双方向フローを使用して、フローと各レベルの中間特徴を共同更新するための双方向相関を取得します。

最後に、中間フレームを補間するための粗い推定に基づいて、フローフィールド、オクルージョンマスク、および残差の複数のグループを生成します。

AMTは、これらの設計により、様々なベンチマークでSOTAを達成しています。

Architecture

詳細はこちらの論文をご参照ください。

本記事では上記手法を用いて、Video Frame Interpolationを動かしていきます。

デモ(Colaboratory)

それでは、実際に動かしながらVideo Frame Interpolationを試していきます。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

初めにGithubからソースコードを取得します。

%cd /content

!git clone https://github.com/MCG-NKU/AMT.git

%cd /content/AMT
# Commits on Apr 26, 2023
!git checkout 70f988fbfc0d3d458beba1ee49caf876e57968fe

次にライブラリをインストールします。

%cd /content/AMT

!pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
!pip install omegaconf Pillow==9.4.0 tqdm==4.64.1
!pip install gdown

# install for video
!pip install yt-dlp
!pip install imageio==2.4.1 moviepy==0.2.3.5

最後にライブラリをインポートします。

from moviepy.video.fx.resize import resize
from moviepy.editor import VideoFileClip

from yt_dlp import YoutubeDL

以上で環境セットアップは完了です。

学習済みモデルのセットアップ

ここでは、論文発表元が公開する学習済みモデルをダウンロードしていきます。

%cd /content/AMT

%mkdir -p pretrained

!gdown 1WmOKmQmd6pnLpID8EpUe-TddFpJuavrL -O pretrained/amt-s.pth
!gdown 1UyhYpAQLXMjFA55rlFZ0kdiSVTL7oU-z -O pretrained/amt-l.pth
!gdown 1yieLtKh4ei3gOrLN1LhKSP_9157Q-mtP -O pretrained/amt-g.pth

Video Frame Interpolation

それでは、スクリプトを使用してVideo Frame Interpolationを実行します。

!rm -rf {outputs_dir}

!python demos/demo_2x.py \
  --config cfgs/AMT-G.yaml \
  --ckpt pretrained/amt-g.pth \
  --niters 6 \
  --input assets/quick_demo \
  --out_path results_origin \
  --frame_rate 25 \
  --save_images

推論結果を表示して確認します。

# 取得動画の表示
clip = VideoFileClip('results_origin/demo_0000.mp4')
clip = resize(clip, height=380)
clip.ipython_display()
result

また、任意のフレーム画像からVideo Frame Interpolationを実行したケースは以下の通りです。
コードはGoogle Colabをご参照ください。

Result2

まとめ

本記事では、AMTを用いたVideo Frame Interpolationをご紹介しました。

部分的に欠損したフィルムタイムのビデオの修復などに活用されることが想定されます。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - AMT: All-Pairs Multi-Field Transforms for Efficient Frame Interpolation

2. GitHub - MCG-NKU/AMT

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology