#やりたいこと
Magentaのプリセットで用意されているモデルを使って、モネ風の画像に変換する。
##出来上がったもの
マシンスペックの関係で大きいファイルだと変換ができなかったので、以下の通り画像の一部分だけ切り取って変換しました
すごい!完全にモネ!
これを実現するためにハマったポイントが以下の通りです。
#ハマった現象
何度トライしても真っ黒な画像が出力されてしまいました。
実行時にエラーも出ず、心が折れてしまいそうになりました。
#原因はCPUでTensorFlowを動かしていたから
ググると以下のissueにたどり着きました
Image stylization example only produces black images when run on CPU #570
MagentaはTensorFlowをバックエンドに使用しています。
TensorFlowは基本的にGPUの使用を前提にしているのですが、オプションとしてCPU上だけで処理をすることができます。
しかしMagentaのdocker imageの最新版( 0.1.13
)ではそのbug fix対応版が入っておらず、正常に動作しなかった結果、真っ黒な画像が出力されていました。
#古いバージョンのdocker imageなら動かせた
私が動作させることができたバージョンは 0.1.6
でした。
操作手順は以下の通りです。
##docker imageの取得と起動
$ docker pull tensorflow/magenta:0.1.6
$ docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta:0.1.6
###フォルダ構成
magenta-data
└── img
├── original ← ソースとなる画像ファイル置き場
└── generated ← 生成された画像が吐き出されるディレクトリ
##画像変換コマンド
$ image_stylization_transform \
--num_styles=10 \
--checkpoint=/magenta-models/multistyle-pastiche-generator-monet.ckpt \
--input_image=/magenta-data/img/original/IMG_1337.jpg \
--which_styles="{0:0.1,1:0.1,2:0.1,3:0.1,4:0.1,5:0.1,6:0.1,7:0.1,8:0.1,9:0.1}" \
--output_dir=/magenta-data/img/generated/ \
--output_basename="all_monet_styles"
ポイントとしては --checkpoint
パラメータでプリセットのモデルファイルを指定すること、 --which_styles
パラメータで、用意されているモデルのどれをどのくらいの割合で使うかという指定です。
詳しくはこちらの解説がわかりやすかったです。
#参考
magenta/magenta/models/image_stylization at master · tensorflow/magenta
TensorFlowのMagentaで高速に画風変換してみた
写真をモネ風タッチに変換する(magenta image_stylization)