TecoGANはGANをつかったアルゴリズムの一種で、低画質の映像を高画質化する超解像モデルです。落合陽一さんも言うように画像解像度で勝負する時代は終わるかもしれません。今回はソニーの ニューラルネットワークライブラリ”NNabla”を用いたTecoGANの使い方、高解像度化を説明します。
ゼルダBoWを高画質化!
NNablaはソニーのニューラルネットワークライブラリーで現在の主要なディープラーニングアルゴリズムがサポートされています。実装もGithubからに比べ簡単にできる(GoogleColabならコードを書く必要もありません)ので、かなりオススメです。サンプルのリンクは↓
ディープラーニングの出力画像をTecoGANで高解像度化してみました。併せてご覧ください↓
TecoGANのアーキテクチャについて
TecoGANの基本的なアーキテクチャーは、GANの仕組みに時系列の要素を加えたモノになっています。↓図a)一般的なGANのアルゴリズムでは前後の画像を関連つけて生成する仕組みになっておらず、時間的な問題が発生します。その弱点を補うため、↓の図b)で過去に生成した画像を入力とするFrame-Recurrent Generatorアーキテクチャーを用いています。また、↓図c)のDiscriminatorにおいても前後に生成した画像を結合して識別することで時間的な要素を取り入れています。
これらにより、動画としての滑らかな超解像を実現しています。さらに長期的な整合性を保つ仕組みなど様々な工夫がされていますが、詳細は論文をご覧ください。
NNablaを実装してみる
NNablaをインストールしてローカル環境で実行していきます。マシンスペックに不安の方はGoogleClabからも実行できますのでここのページをスクロールしていき、”Open in Colab”をクリックすると実装することができます。自分の用意した動画でもできます。
使用PCスペック
- Windows 10
- CPU : AMD Ryzen 7 5800
- GPU : RTX3070 8GB
事前準備としてCUDA、cudnnのインストールします。この辺りはここに詳しく掲載されているので、その通りにインストールしています。インストールしたバージョンは下記です。
- NVIDIA CUDA Toolkit 11.4
- NVIDIA cuDNN v8.2.0
ソースコード
nnabla examplesをgit clone かダウンロードしてください。必要なライブラリは下記です。AnacondaPromptなどでpipインストールしてください。
- tensorflow >= 1.8.0(TensorFlow-gpu 2.5で動作確認しています)
- nnabla >= 1.9.0
事前学習データのダウンロード
tecoganの中段ちょい下にある“TecoGAN pre-trained weights”をダウンロードし、nnabla-examples/video-superresolution/tecoganディレクトリ下へ保存してください。
コード実行
TecoGANの超解像は何のことは無い、↓のコードを実行すればOKです。AnacondaPromptなどで実行してみてください。※generate.pyに若干コードエラーがあります。ワードパッドなどで開いてもらい”(clear_buffer=True))”の”)”を削除し上書き保存してください。2か所あります。修正されました。
python generate.py --model ./tecogan_model.h5
nnabla-examples/video-superresolution/tecogan/results/calendarディレクトリ下へ画像が出力されたと思います。これが超解像後の画像です。元の画像は nnabla-examples/video-superresolution/tecogan/LR/calendarディレクトリにあるので比較してみます。
TecoGAN後の画像がくっきり見えると思います。NNablaを駆使することで、こんな簡単に超解像ができてしまいます😲
自前の動画で超解像を試してみる
自前の動画で超解像を試す手順は↓です。
- 動画ファイルの準備
- 動画→複数の静止画化
- TecoGANで超解像
- 複数の静止画→動画化
動画の静止画化、静止画の動画化は過去の実装コードを参考にしてもらうと良いかと思います。
まずは 動画→静止画化した画像の保存先ですが、 nnabla-examples/video-superresolution/tecogan/LR下へ適当なディレクトリを作成し、そこへ入れてください。※注意:png画像でないとこの先でエラーが発生します。過去コードを.jpgから.pngへ書き直して実行してください。
nnabla-examples
-> video-superresolution
-> tecogan
-> LR
-> Mountain
1.png
2.png
3.png
4.png
……
画像が準備できたらTecoGANを実行します。AnacondaPromptなどで↓のコードを実行してください。この時メモリエラーが発生することがあります。その場合は画像を縮小して実行してください。
python generate.py --model ./tecogan_model.h5 --input-dir-lr ./LR/Mountain --output-dir ./results/Mountain
# "Mountain"の部分はご自身が設定したディレクトリ名へ変更してください。
nnabla-examples/video-superresolution/tecogan/resultsディレクトリへ超解像処理をした画像が出力されたと思います。あとは 静止画→動画化すれば完成です。
今回は比較のために、過去につくった浮世絵動画をわざと低画質化して、それをTecoGANで超解像処理することでオリジナルと比較してみました。
若干のボケはありますが、綺麗に超解像処理できていると思います。NNablaを使うことで簡単にできてしまいました。是非お試しあれ!
ディープラーニングをやってみたい方におすすめ書籍
ディープラーニングをやってみたい!という方には↓の書籍もオススメです。TecoGANの他にもたくさんのアルゴリズムがありますので一緒に試してみましょう👍
コメント