Torchのリアルタイム画風変換を試す(実行)

リアルタイム画風(スタイル)変換といわれる、ディープラーニングを使って画像の画風(雰囲気)を変換する技術を実際に試すまでの手順のメモ

利用するアルゴリズムの元の論文はこちら
Github上での実装:fast-neural-style

前回の環境構築ができれば、実際に動かしてみる

リポジトリの取得

まずは、適当な場所で、

​git clone https://github.com/jcjohnson/fast-neural-style.git

として、リポジトリを落としてくる

変換を試す

サンプルモデルの取得

テスト用に、あらかじめ準備されているサンプルのトレーニング済​モデルを取得する

cd fast-neural-style/
bash models/download_style_transfer_models.sh

実行すると、modelsの中にTorch形式のモデル(.t7)がダウンロードされてくる

変換の実行

以下のコマンドで変換する

​th fast_neural_style.lua -model (モデルのパス) -input_image (変換するイメージのパス) -output_image (変換後のイメージのパス)

実際に付属のサンプルで試す場合は、

​th fast_neural_style.lua -model models/eccv16/starry_night.t7 -input_image images/content/chicago.jpg -output_image out.png

という感じで実行すると、out.pngが生成される

新しいモデルの作成

自分でオリジナルの画風変換をしたい場合は、

  1. 適用したい画風の画像(=スタイル画像)を用意
  2. モデルをトレーニング(学習)して作成する

という流れになる

つまり、一つの画風の変換につき、一つの専用のモデルを作成することになる

データの準備

基本的な流れは公式の説明通り

モデルのトレーニングをするにはトレーニング用のデータセットが必要となる。今回は分類(画像認識)ではないので、トレーニング用とバリデーション用のデータを準備する

といっても、自分で用意する必要はなくて、COCO datasetのデータを利用する。なお、今回は2017のバージョンを使ったが、本家は2014のバージョンをつかっている様子

  1. 以下の2つのデータセットをダウンロードし解凍しておく

    • トレーニング用: 2017 Train images [118K/18GB]
    • バリデーション用: 2017 Val images [5K/1GB]
  2. データセットをトレーニング用に変換する

    1. 変換用のPython2.7環境を準備

      sudo apt-get install python2.7-dev
      sudo apt-get install libhdf5-dev
      sudo apt-get install virtualenv
      virtualenv .env
      source .env/bin/activate
      pip install -r requirements.txt
      
    2. 変換する

      python scripts/make_style_dataset.py  --train_dir (1のトレーニング用データのフォルダのパス) --val_dir (1のバリデーション用データのフォルダのパス)
      --output_file dataset.h5
      

    実行すると、dataset.h5という1つのファイルが作成される

    作成されれば、

    deactivate
    

    として環境から抜ける

  3. トレーニング用のモデルを準備
    トレーニングにはVGG16のモデルを使うのでダウンロードする

    bash models/download_vgg16.sh
    

環境のセットアップ

h5ファイルを扱える様にLuaのモジュールをインストールする

luarocks install https://raw.githubusercontent.com/deepmind/torch-hdf5/master/hdf5-0-0.rockspec
luarocks install hdf5

なお、公式では上の行で良いとなっているが、それだけではエラーになったので、下の行も実行した。上の行は実行不要かもしれない

トレーニング実行

以下のコマンドで実行する

th train.lua -h5_file (dataset.h5へのパス) -style_image (スタイル画像へのパス) -style_image_size 300 -content_weights 1.0 -style_weights 5.0 -batch_size 3

実行すると、checkpoint.t7というモデルが生成される。 生成されたモデルはわかりやすい様に名前を変更しておく。 あとは、前述の方法で画風変換を実行すれば良い

なお、今回はGPUにGTX970を利用したが、だいたい4時間ほどかかった・・・
(例の3.5GB問題がどう影響しているかは不明)

トレーニング時のパラメータについて

公式のデフォルトとの相違点は、以下の2つ - style_image_size: 384 → 300 - batch_size: 4 → 3

これはバリデーション時に、GPUのメモリ不足で

​THCudaCheck FAIL file=/torch/extra/cutorch/lib/THC/generic/THCStorage.cu line=66 error=2 : out of memory

という感じのエラーが発生してしまう為

GTX970はVRAMが4GBなので、この設定になったが、他のGPUの場合は適当なものに変更した方が良いと思われる

関連記事一覧