Tom’s PCparts Blog With Other Games

主に自作PCと惑星WTのネタをぶち込むブログ

CUDAとAIの力でフレーム補間を作成するDAIN-APP

皆様こんにちは。TOM1192です。

今回は閑話休題GPUを酷使することでフレーム補間を作成してくれるDAIN-APPの紹介です。

当方ですらやべーことになりました。

 

 

 1.DAIN-APPとは

grisk.itch.io

AIの力でフレーム補間を作るアプリケーションです。NvidiaGPUのCUDAを使用するのでAMDやIntelGPUでは使用できません。

また、CUDA5.0に対応している必要があり、最低でもMaxwell(GTX900番台)を必須とします。

 

2.DAIN-APPのやべーところ

このアプリケーションは、

  1. 動画をフレーム単位でPNG画像として分割
  2. GPUの力でフレーム補間した画像を生成
  3. 再度動画として組み上げるもの

となっています。

動画のフレーム単位での分割と動画生成はCPUで行われるのですが、フレーム補間の生成をGPUで行うようになっています。

 

が、なんとこのフレーム補間生成にとんでもないGPUメモリを要求してくるのがこのDAIN-APPのやべーところとなります。

f:id:buybuysute:20210220015347p:plain

実際のVRAM使用量

さて問題です。これは生成中の解像度はどれくらいでしょうか?

答えは720p(1280x720)です。

実際はもともと使用されているのが2GBくらいあるのですが、それでも6GBをフレーム補間生成に使用しています。

ちなみに、このアプリでは分割数を増やすことでVRAM消費を抑えることができるのですが、それを使わずにできるのはRTX3090でもFullHD(1920x1080)が限界かもしれません。

 

4Kに関しては縦横4分割(合計16分割)を行うことで可能にすることができました。

f:id:buybuysute:20210220015811p:plain

4KにおけるVRAM使用量。もはやVRAM喰い虫とかそんなレベルじゃない。

4Kは平気で24GBを使い切ります。

最上位のRTX3090でこのザマなので、本気で4Kでフレーム補間を生成したい方はさらに上位のRTX A6000(VRAM48GB)を狙うほかありません。

なお、価格はRTX3090の3倍です。

当方は途中で打ち切りましたが、4Kの2分動画を生成しようとすると13時間かかるそうです。

720pですら1時間半とか平気でかかるので、いかにやべーかわかるかと思います。

 

今までRTX3090を酷使した事例は

  • DaVinci Resolve(18GB/24GB)
  • Waifu2x Caffe(19.7GB/24GB)

というものはありましたが、DAIN-APPはそれを超えるという時点でおかしいです。

 

3.操作画面

3-1 ファイル入出力

f:id:buybuysute:20210220022045p:plain

赤枠部分がファイル入出力制御。動画及び画像が使用可能。

動画のインポートと出力先を指定します。

  • Input Videosはffmpegで読める動画
  • Input PNG Sequenceは連番のフレームキー
  • Resume Renderは中途再開用

です。

その下は出力の方式です。

  • MP4、WebM・・・動画として出力
  • Gif・・・Gifアニメーションで出力
  • APNG・・・AnimationPNGで出力

となっています。

Output Folderは出力先です。自動設定されないので予めちゃんと設定しておきましょう。

 

3-2 フレーム補間生成の条件

f:id:buybuysute:20210220022615p:plain

赤枠部分のInterpolation Optionsがフレーム補間設定。

フレーム補間の生成条件を指定します。

Interpolation Optionsで設定します。

3-2-1 Use Harf-Precision float

いわゆる半精度浮動小数点数演算(FP16)で行うかという設定です。

精度が低くなりますが、高速になります(単純に倍にくらいになる)。RTX3000番台以降はFP32コアが別途追加されてるので更に倍になります。

 

3-2-2 Use Pytorch benchmark

機械学習(AI)をベンチマークモードで運用するかどうかの設定です。

有効化すると、オートチューニングで効率よく行えるそうですが、一方でVRAM使用量もふえるそう。

速度と容量の両立は厳しいです。

 

3-2-3 Batch Size

バッチ数です。コレが多いほど処理速度は速くなりますが、CPU負荷が増大するのとまたしもVRAM使用量が増えます。

たとえ1にしていても平気でVRAMが8GB近く消費されるあたり、増やすのは自殺行為ともいえるでしょう。

ただし、後述する分割を有効化した場合は増やしてもいいかもしれません。

 

3-2-4 Device to Use

使うGPUの設定です。複数搭載している場合は良いほうを選びましょう。

といっても複数搭載自体は珍しいので設定することはほとんどの場合はないでしょう。

 

3-2-5 Depth Awareness Mode

映像の奥行き処理の設定です。

  • Real life or 3D 奥行きが多い撮影系動画や3DCG用に最適化します。
  • Cartoon or anime 2次元動画用に最適化します。

 

3-2-6 Interpolation Algorithm

フレーム補間生成のアルゴリズム設定です。

現段階ではDefaultともう一つありますが、もう一つのほうはNot Workingと書いてあるので設定不要です。

 

3-2-7 InputFPSとInterpolate

最初のファイル入出力を動画にした場合は自動的にFPSが入力されますが、連番のフレームキーの場合は手動入力する必要があります。

Interpolateは出力動画のFPSの倍率を指定し、30FPSの場合でInterpolateをX2にすると出力される動画は60FPSになります。

最大でX8倍まで行えますが、当然時間も負荷もVRAM消費量も増えます。

 

3-2-8 PNG files compression

フレーム補間で生成するPNG画像の圧縮率です。

1に近づくほどきれいになりますが、1枚あたりのサイズが大きくなり、速度が低下します。

逆に9に近づくほど圧縮率が上がり、速度も向上しますが品質は低下します。

なお、初期値は6です。ほぼオリジナルと同じサイズの画像を生成します。

0で無圧縮になりますが、1枚あたりだいたい3倍くらいのサイズになるためストレージ圧迫が凄まじくなります。

 

 

3-3 VRAM不足対策

RTX3090をもってしてもVRAMが不足することはままあります。

故にこちらでVRAMが不足しないように設定することができます。

f:id:buybuysute:20210220025743p:plain

赤枠部分のFix OutOfMemory OptionsがVRAM不足対策設定
3-3-1 Downscale Video

チェックを入れると有効化され、高い解像度の動画を意図的に落とし込むことでVRAMの使用を減らします。

解像度が減るので出力される動画の解像度まで減ってしまいます。

縦解像度(例:1280x720であれば720)を指定します。

 

3-3-2 Split frames into sections

画像1枚を多数に分割することで擬似的に解像度を低下させ、VRAMの使用量を抑えます。

  • Number of divisions X・・・X軸方向(横解像度)の分割数
  • Number of divisions Y・・・Y軸方向(縦解像度)の分割数
  • Section Padding・・・縦横それぞれのかぶらせるドット数

をそれぞれ設定します。

分割数を増やせば増やすほどVRAM使用量が減りますが、べらぼうに時間が伸びていきますので長時間使用が封印される公算が高くなります。

RTX3090ですら13時間もかかるということはもっと分割数を増やすと日単位になりかねません。

 

他の設定もあるんですが、個人的にはこの2つのタブを設定するといいかと思います。

4.実際に生成してみて

当方で実際に720p30fpsの動画を60fps化してみたところ、動きが少ないところでは歪んだところが発生してしまうのですが、逆にそこそこ動きの多いところでは歪んだところも少なく十分実用的であると感じました。

なお、このアプリではフレーム補間を生成するまでを担当させられるので、それを動画編集ソフトで取り込めば自分好みの動画生成も可能です。

f:id:buybuysute:20210220020958p:plain

実際に歪んだところ。コレでなんの動画かわかるやつは多分よくわかってる。

 

5.終わりに

特定の欠点を除けば十分実用的なフレーム補間生成ソフトです。

AMDのFluidMotionとは異なり、物理的にフレームを生成する仕様上取り回し自体は非常に良いというメリットがあります(もともとのコンセプトが違うので一概に同じとはいえませんが)。

が、VRAMの消費量とかかる時間は圧倒的に長いという欠点がありますが、それに見合った価値は存分にあります。

なお、当方の使用量的に最低でもVRAMが8GB以上(GTX1070以上)で推奨RTX2080以上であると思われます。

 

自分で使えると思った方はぜひ試していただきたいと思っています。