GANを使って写真・映像に対する高速な画風変換を実行しよう【fast style transfer】

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

今回は動画や画像を、有名な絵画の画風と似たようは雰囲気の動画や画像に変換するStyle Transfer(画風変換)を実行してみようかと思います

fast style transferという高速な画風変換手法を用いて実行していきます

今回とりあげるfast style transferは、下記の論文で発表されたもので、GANというニューラルネットワークを用いて、ある画像をインプットすると特定の画像の画風に合わせた画像を出力します

https://arxiv.org/pdf/1508.06576.pdf

今回はその学習済みのモデルを使用させていただいて、自分の好きな画像に対していろんな画像変換を試してみました

実行方法は興味がない方も、結果がとても面白いので結果だけでも見ていってください

スポンサーリンク

実行環境

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

  • PC
    • NVIDIA GeForce 1070
  • OS
    • Ubuntu 18.04LTS
  • 言語
    • Python 3.6
  • ライブラリ
    • git
    • ffmpeg
    • tensorflow-gpu=2.1.0
    • moviepy=1.0.2
    • CUDA 10.0

事前準備

NVIDIAドライバ、CUDA、cuDNNのインストール

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

Anacondaで作業環境を作成

condaで新しい環境をつくってください

$ conda create -n style-transfer tensorflow-gpu=2.1.0
$ source activate style-transfer
$ pip install moviepy==1.0.2

必要なライブラリ・ソフトウェアをインストールしよう

下記のとおりライブラリをインストールします

$ sudo apt-get install git ffmpeg libjpeg-dev

今回使用するfast-style-transferのgitをクローンしてきます

$ git clone https://github.com/lengstrom/fast-style-transfer.git
$ cd fast-style-transfer

必要なディレクトリを作成しておきます

$ mkdir inputs
$ mkdir inputs/images
$ mkdir inputs/movies
$ mkdir results/images
$ mkdir results/movies
$ mkdir checkpoints

下記にあるすべてのckptファイルをダウンロードしてcheckpointsディレクトリに配置してください

Fast Style Transfer Models - Google ドライブ

変換を行いたい画像はinputs/imagesに、変換を行いたい動画はinputs/moviesに配置してください

私の場合は下記の画像と動画を用いました

style transferを実行しよう

fast-style-transfer/examples/styleにあるstyle画像を見て、どの画風に変換したいか選んでください

以降選んだ画像と同じ名前の入ったckptファイルを用います

画像を変換する方法

まずはinputs/imagesに配置した画像に対して変換する方法です

$ python evaluate.py --checkpoint checkpoints/[選んだstyleのckptファイル名].ckpt \
  --in-path inputs/images \
  --out-path results/images \
  --allow-different-dimensions

いろんな画像に対して、それぞれのstyleを試してみてください!とても面白い結果が得られます

動画を変換する方法

私の場合、gitに記載のある方法だとエラーになったので、別の方法で実行します

まず、下記の処理で動画を画像に切り出しを行います

$ ffmpgeg -i inputs/movies/test.mp4(適宜名前を読み替えてください) --s 0 -t [動画の長さ(秒)] -r 30 -f image2 inputs/images/%06d.jpg

次に切り出した画像にたいして画像変換を行います

$ python evaluate.py --checkpoint checkpoints/[選んだstyleのckptファイル名].ckpt \
  --in-path inputs/images \
  --out-path results/images \
  --allow-different-dimensions

次に変換した画像を動画に変換します

$ ffmpeg -r 30 -i results/images/$06d.jpg results/movies/result.mp4

かわいいネコちゃんが画風になりながら動いています!

最後に

最後までご覧いただきましてありがとうございました!

今後もこういった面白い技術について実際に実行する方法を含めて紹介していければと思います

コメント

Copied title and URL