えいむーさんは明日も頑張るよ

最強のアプコンアルゴリズム、Real-CUGANを使ってみた

価格

アプコンとは

アプコンとはアップコンバートの略で、解像度が低い画像や動画を解像度が高くすることをいう。単にアプコンするだけなら Bilinear が最速であることは知られているのだが、単に Bilinear でアプコンしてしまうとノイズが乗りまくってしまって意味がない。

よって、解像度を上げつつ、ノイズを減らしつつという技術が必要になってくる。

アプコンアルゴリズム

アプコンのアルゴリズムはいろいろあるので、有名なものを簡単にご紹介。

アプコンアルゴリズムはニューラルネットを使うか使わないか、リアルタイム変換可能かそうでないかが結構重要な分かれ目になってきます。

アニメはほとんどのものが 23.97fps なので 1 秒間に約 24 枚の画像を表示しています。ということは画像 1 枚が表示されている時間は 0.0417 秒なので 41.7 ミリ秒ということになります。

よって、41.7 ミリ秒以下で変換ができればリアルタイム変換できるというわけです。

Bilinear

線形補間。

めちゃ速いけど画質は最低レベル。

Bicubic

個人的三大高速アルゴリズム(Bilinear、Nearlest Neighbor、Bicubic)の中で最も自然な結果が得られやすいと言われるアルゴリズム。

速いので当然、画質は後述するものに比べると劣る。

NGU(Next Generation Upscaling)

MadVR に使われているアルゴリズムらしいけど、調べてもよくわからなかった。

GPU 補助があればリアルタイム変換可能らしい。

Waifu2x

畳み込みニューラルネットワークを使ったアップスケーリングアルゴリズム。

畳み込み積分なので CPU で処理するとビビるほど遅く、GPU でやってまあなんとかなるレベル。当然ながらリアルタイム変換はできない。

Anime4K

なんかやたら速いらしい噂のアルゴリズム。Waifu2x レベルの画質をほぼリアルタイム変換できるとかなんとか(30 倍くらい速いらしい)でちょっと気になっていたりする。

これより後に初回するアルゴリズムは画質の良さと引き換えに時間という対価を失っているので注意。

Real-ESRGAN

異常に重い驚異のアルゴリズム。画像一枚変換するのに 1 秒くらいかかるので、要求される速度の 20 倍以上も遅いことになる。

その代わり、とてもきれい。あまりに拡大しすぎると細部が失われる問題があるが、拡大しすぎなければ良い話。問題点としては 4 倍拡大しかできないので、フル HD を 4K にはできない(8K になってしまう)

Real-CUGAN

アニメ専用の現時点でおそらく最強のアプコンアルゴリズム。ただし開発途中なのでまだ問題もいろいろあるようだ。

非常に重いが Real-ESRGAN と比較すれば倍くらいは速いらしい。速度でいうと Waifu2x と同じくらい。

Realm-CUGAN-NCNN

NCNN で Real-CUGAN を置き換えたもの。Intl, AMD, Nvidia, Apple Silicon などの Vulkan API で高速に動作するらしい。

で、今回使ったのはこれなのですがいうほど速くないです。いや、これで速くなっているならもともとの Real-CUGAN はどんだけ遅いんだっていうレベル。

比較

というわけで、ESRGAN は重すぎる割に CUGAN に負けているところが多く、Waifu2x は時間をかける割に CUGAN に画質で負ける、ということで Waifu2x や ESRGAN を使うなら CUGAN を使えばよいということになります。

で、Anime4K はリアルタイム変換できて便利ですね〜って話なんですが、リアルタイム変換できるなら予めエンコードしておく必要なんてないわけです。

予め 4K にアプコンしておきたいっていうのは、リアルタイムでアプコンできないから前もって高画質化しておこうってことなので。なので、リアルタイム変換できてしまうアルゴリズムに興味はないです。

ノイズを減らすものだと他には NLMeans とかがあるのですが、あれも CUGAN 並みに重い(エンコードすると 2fps くらいしかでない)ですがせいぜい Waifu2x 並の性能しかないので、やっぱり CUGAN 一択なのかなあという気はします。

エンコード方法

CUGAN は画像変換アルゴリズムなのでそのまま動画変換には使えません。ただ、Windows であれば動画を突っ込めば画像に分解して変換 → 再び動画化を自動でやってくれるソフトがあります。

waifu2x ncnn Vulkan - GUI Edition Reloaded (opens new window)

これを使えばめちゃ簡単に変換できます。

ちなみに、このツールは三つのステップに分かれるのですが、

  1. 動画を画像化
  2. 画像をアプコン
  3. 画像を動画化

となっており、1,3 は CPU を 2 は GPU で処理します。

で、i7 9700K+GTX1060(6GB)でどのくらい時間がかかるか検証してみました。

動画分割 画像アプコン 動画化
65 秒 1103 秒 648 秒

思ったよりも動画化に時間がかかっているのですが、8 コアの 9700K でこんなにかかるというのはちょっと意外でした。これが 4K のパワーというやつか...

WARNING

ちなみに動画化では x264 でエンコードしているのですが、画質が 0 設定(最高)になっているので実際には画像をそのまま突っ込んでいるだけになっています。

そのおかげでノイズは 0 です、はええ。

ちなみに 90 秒の動画で 5GB くらい食います、ヤバすぎなんですよね。

アプコンは 1 秒にせいぜい 1 枚か 2 枚しか変換できないのですこぶる遅いです。せめて今の 10 倍くらいの速さにならないと厳しいですね。

M1 Ultra だともっといい感じにできそうだったのですが、実際にやってみてもそんなに速くありませんでした。なんかうまくマルチスレッドを使えていないとかの問題がありそうです。

で、たかだか 90 秒の動画を 1800 秒近くかけて(実時間の 20 倍!!!)変換したものが以下になります。

放課後のプレアデス (opens new window)

R.O.D (opens new window)

ちなみにそのままアップロードすると時間がかかりすぎるので x265 で再エンコードしたのでオリジナル画質とは異なります。オリジナルはマジで全くノイズないので(ヤバい)

というわけで家で GPU リソースが余っている方は動画エンコードしてみてはいかがでしょうか。

記事は以上。

価格
    えいむーさんは明日も頑張るよ © 2022