AIでネコの低解像度の動画を高解像に変換(超解像度)してみよう【tecoGAN】

プログラミング・数学・英会話
スポンサーリンク

画像生成などに用いられるAIモデルのGANの考え方を用いて低解像度の動画を高解像度に変換するtecoGANというモデルが発表されていました

  • 昔に撮影した動画を高解像度化したい
  • 超解像度に興味がある
  • tecoGANを実行する方法がしりたい

といった方向けにtecoGANを使った動画の高解像度化の方法を説明します

スポンサーリンク

超解像度とは?

低解像度を高解像度に変換する試みはいろいろな試みがを超解像度といわれています

通常は低解像度の動画は高解像度の動画に比べて情報量が少ないので、低解像度から高解像度へ変換するのは難しい問題です

以前に本ブログでも紹介した2次元画像から3次元に変換するのも低次元から高次元へ変換しているので同様に難しい問題になります

そういう本来できないはずの解像度をあげる試みであるため超解像度という仰々しい名前がついているのだと思います

AI技術の発展によってこういった難しい問題が自動で行えるようになってきているのは、今後もいろいろな可能性を期待できます

それでは、今回はtecoGANを用いて低解像度のネコの動画を高解像にしてみましょう

実行環境

私が実行した環境は下記の通りですが、PCについてはこれと同じである必要はありません

  • PC
    • メモリ 16GB (8GB以上推奨)
    • NVIDIA GeForce 1070
  • OS
    • Ubuntu 18.04LTS
  • 言語
    • Python 3.6
  • ライブラリ
    • git
    • ffmpeg
    • tensorflow gpu 1.14.0
    • keras 2.0.8
    • CUDA 10.0

事前準備

NVIDIAドライバ、CUDA、cuDNNのインストール(GPUを使わない場合は不要)

NVIDIAドライバ、CUDA、cuDNNなどのインストールは下記の記事を参考に行ってください

Anacondaで作業環境を作成

下記の通りcondaでpython 3.6の仮想環境をつくり、つくった環境にスイッチします

$ conda create -n tecogan python=3.6
$ conda activate tecogan

TecoGANのインストール

今回利用させていただくのはこちらのgithubです

thunil/TecoGAN
This repo will contain source code and materials for the TecoGAN project, i.e. code for a TEmporally COherent GAN - thunil/TecoGAN

githubからTecoGANのソースをクローンします

$ git clone https://github.com/thunil/TecoGAN.git

必要なライブラリをインストールします

tensorflowでも一応動きますが今回はtensorflow-gpuを用います

1.8以上が必要なので今回は1.14.0を入れてます

$ sudo apt-get install ffmpeg
$ pip install tensorflow-gpu==1.14.0
$ pip install keras==2.0.8
$ pip install -r requirements.txt

必要なtecoGANのモデルファイルとサンプルデータをダウンロードして配置します

下記のコマンドで自動でダウンロードして適切なディレクトリに配置してくれますがサンプルデータのサイズが大きく時間がかかります

サンプルデータがいらない方はあとで紹介する方法で直接モデルだけダウンロードしましょう

$ python runGan.py 0

モデルだけダウンロードして配置する手順を下記の通りです

TecoGANディレクトリ配下で実行してください

$ mkdir model
$ wget https://ge.in.tum.de/download/data/TecoGAN/model.zip -O model/model.zip
$ unzip model/model.zip -d model; rm model/model.zip

低解像度の動画を画像に切り出して、LR/testディレクトリに配置しましょう

今回は長さ47秒、FPS24の猫の動画を使いました

$ mkdir -p LR/test
$ ffmpeg -i cat_low.mp4 -ss 0 -t 47 -vcodec png -r 24 -f image2 LR/test/%04d.png

ちなみに低解像度の動画がない場合は下記の手順で動画を低解像度化することもできます

動画の低解像度化、動画の解像度・長さ・FPSの確認

まず下記のmediainfoというコマンドをつかって動画の解像度と長さおよびFPSを確認します(今回は640×360)

$ sudo apt-get install mediainfo
$ mediainfo cat.mp4
---省略----
Duration                                 : 47 s 589 ms
---省略----
Width                                    : 640 pixels
Height                                   : 360 pixels
---省略----
Frame rate                               : 23.976 (24000/1001) FPS
---省略----

つづいてWidthとHeightの値が割り切れる値で割った値に低解像度化します

$ ffmpeg -i cat.mp4 -vf --scale=-1:180 cat_low.mp4

上記はHeightを180(元の2分の1)にしているのでWidthは自動で320になります

インプットファイルの場所をデフォルトから変更するためにrunGan.pyスクリプトの70行目にあるtestpreの代入する部分をtestに変更します

$vi runGan.py
 67 elif( runcase == 1 ): # inference a trained model
 68 
 69     dirstr = './results/' # the place to save the results
 70     testpre = ['test'] # the test cases
 71 
 72     if (not os.path.exists(dirstr)): os.mkdir(dirstr)
 73 

tecoGANで高解像度化を実行する

それでは高解像度化の処理を行ってみましょう

$ runGan.py 1

するとresults/testというディレクトリに高解像度化された画像の結果がout_[数字].pngという形式で出力されます

最後に出力されたフレームごとの画像を動画に戻します

$ ffmpeg -r 24 -i results/test/output_%4d.png cat_high.mp4

まずは変換前の画像と、高解像度化した画像を比べてみましょう

変換前

変換後

若干わかりにくいですが高解像度にした方がはっかりと見える気がします

続いて動画も見比べてみましょう

変換前

変換後

こちらもなんとなく見やすくなった気がします!

学習済みのモデルをそのまま使った場合はこれくらいの結果になりました

類似するような動画で追加学習するなどをすればもう少しきれいにしたり改善できると思いますが、今回はここまでとさせてください

最後に

今回は超解像と言われる、低解像度の動画を高解像度に変換する方法をtecoGANを用いて実行してみました

本来少ない情報の低解像度の動画から高解像度にするというのは難しい問題ですが、GANなどの新しい手法を応用することで、たくさんの動画を学習させれば、こういった難しいにも対応できてきているのは素晴らしい技術の進歩だなと思います

引き続き気なる技術について勉強した内容を発信していければと思いますので、よろしければまた本ブログを見に来てください

コメント

Copied title and URL