TensorFlow で動く高速な画風変換を試す

TensorFlow で動く高速な画風変換を試す

先日の旅行の写真を、話題の画風変換にかけてみた。

これが元の写真 スタイル画像

こちらで紹介されている、高速に動く画風変換を試してみた時のエラーについて

紹介されているのは、この論文↓
Perceptual Losses for Real-Time Style Transfer and Super-Resolution

CPUでも高速に変換可能らしい。論文名で検索するとTensorFlowのコードがあった。
https://github.com/antlerros/tensorflow-fast-neuralstyle

こちらの環境は

Windows 8.1
CUDA v8.0
cuDNN v5.1 Library for Windows 10

ちなみにcuDNNはwindows10版だが、windows8.1でも動いた。

まずサンプルコードのimport部分は次のように変更する必要がある。
train.pyとgenerate.py内で

from tf_net import *
⇒from net import *

これでサンプルモデルを使った変換は問題なく動く。
>python generate.py sample_images\tubingen.jpg -m .\models\Robert_D.model -o result.jpg
しかし、train.pyでモデルを生成しようとしてできたモデルを使ってgenerate.pyを動かすと次のようなエラーを吐く。

DataLossError (see above for traceback): Unable to open table file .\models\test
.model.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhap
s your file is in a different file format and you need to use a different restor
e operator?
[[Node: save/RestoreV2 = RestoreV2[dtypes=[DT_FLOAT], _device=”/job:loc
alhost/replica:0/task:0/cpu:0″](_recv_save/Const_0, save/RestoreV2/tensor_names,
save/RestoreV2/shape_and_slices)]]

モデル名も 拡張子が test.model.data-00000-of-00001のようになっていておかしい。

CUDAのバージョンや環境次第でこのようになるようだが、こちらを参考に、

from tensorflow.core.protobuf import saver_pb2
saver = tf.train.Saver(write_version = saver_pb2.SaverDef.V1)

とすると、拡張子がmodelと正しくなって変換も動いた。やってみると結構楽しい。