Torchのリアルタイム画風変換を試す(実行)
Nov 9, 2017 · othersMachineLearning
リアルタイム画風(スタイル)変換といわれる、ディープラーニングを使って画像の画風(雰囲気)を変換する技術を実際に試すまでの手順のメモ
利用するアルゴリズムの元の論文はこちら
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
が生成される
新しいモデルの作成
自分でオリジナルの画風変換をしたい場合は、
- 適用したい画風の画像(=スタイル画像)を用意
- モデルをトレーニング(学習)して作成する
という流れになる
つまり、一つの画風の変換につき、一つの専用のモデルを作成することになる
データの準備
基本的な流れは公式の説明通り
モデルのトレーニングをするにはトレーニング用のデータセットが必要となる。今回は分類(画像認識)ではないので、トレーニング用とバリデーション用のデータを準備する
といっても、自分で用意する必要はなくて、COCO datasetのデータを利用する。なお、今回は2017のバージョンを使ったが、本家は2014のバージョンをつかっている様子
以下の2つのデータセットをダウンロードし解凍しておく
- トレーニング用: 2017 Train images [118K/18GB]
- バリデーション用: 2017 Val images [5K/1GB]
データセットをトレーニング用に変換する
変換用の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
変換する
python scripts/make_style_dataset.py --train_dir (1のトレーニング用データのフォルダのパス) --val_dir (1のバリデーション用データのフォルダのパス) --output_file dataset.h5
実行すると、
dataset.h5
という1つのファイルが作成される作成されれば、
deactivate
として環境から抜ける
トレーニング用のモデルを準備
トレーニングには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の場合は適当なものに変更した方が良いと思われる