スタイル変換の動作検証(TensorFlow 1.3/AMD Radeon Vega 56/ROCm)

Introduction

SourceStyle Transfer

今回は画像生成や変換の分野で人気の、StyleTransferをTensorFlow(ROCm) on Radeon Vega 56で動かしてみます。

使用フレームワークは、ROCm-TensorFlow1.3, ROCm1.7.137を使用します。
Logan Engstromという方のリポジトリからFast StyleTransferのソースを流用します。

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




Setup TensorFlow on Radeon GPU

近日、HIP-TensorFlow1.0.1から1.3へアップデートされ、同時に名前がのHIPという部分が取れてリポジトリも別になり、旧HIP-TensorFlowのリポジトリが見えなくなっています。旧HIP−TensorFlowはこちらのリポジトリですがすでにリンク切れになっています。
https://github.com/ROCmSoftwarePlatform/hiptensorflow

新しいTensorFlowはなんと呼べば良いかわからないので、ROCm−TensorFlowという風に呼びたいと思います。
https://github.com/ROCmSoftwarePlatform/tensorflow

以下のコマンドを叩くと、Python3上にROCm-TensorFlow1.3を簡単に構築できます。なおOpenCV3.3.0、ビデオコーデック、CythonやPillowイメージ等々も含まれます。

1
curl -sL http://install.aieatr.com/setup_rocm_tensorflow_p3

[Ubuntu16.04用]




Fast Style Transfer

まずは、fast-style-transferをクローンし、必要なパッケージをインストールします。
内部に動画変換用モジュールをロードしている部分があるので、moviepyをpip3経由でインストールが必要になります。

1
2
git clone https://github.com/lengstrom/fast-style-transfer.git
sudo pip3 install moviepy

gitリポジトリのReadmeに書いてある、学習済みモデルを持ってきます。
Google Drive - udnie.ckpt

stylesディレクトリを作って、

1
mkdir -p fast-style-transfer/styles

fast-style-transfer/styles/udnie.ckpt
として設置します。


実行

fast-style-transfer/examples/content以下にテスト用の画像が含まれますので、それを学習済みネットワークのudnie.ckptと一緒に指定して実行します。

1
python3 evaluate.py --checkpoint styles/udnie.ckpt --in-path examples/content/chicago.jpg --out-path output.jpg --allow-different-dimensions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
johndoe@sonoba:~/projects/fast-style-transfer$ python3 evaluate.py --checkpoint styles/udnie.ckpt --in-path examples/content/chicago.jpg --out-path output.jpg

2018-04-16 00:42:46.922074: W tensorflow/stream_executor/rocm/rocm_driver.cc:405] creating context when one is currently active; existing: 0x7f6d67384a80
2018-04-16 00:42:46.922178: I tensorflow/core/common_runtime/gpu/gpu_device.cc:907] Found device 0 with properties:
name: Device 687f
AMDGPU ISA: gfx900
memoryClockRate (GHz) 1.622
pciBusID 0000:04:00.0
Total memory: 7.98GiB
Free memory: 7.73GiB
2018-04-16 00:42:46.922194: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929] DMA: 0
2018-04-16 00:42:46.922200: I tensorflow/core/common_runtime/gpu/gpu_device.cc:939] 0: Y
2018-04-16 00:42:46.922208: I tensorflow/core/common_runtime/gpu/gpu_device.cc:997] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Device 687f, pci bus id: 0000:04:00.0)
2018-04-16 00:42:47.295424: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt
2018-04-16 00:42:47.591796: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
2018-04-16 00:42:47.690422: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
2018-04-16 00:42:47.746517: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
2018-04-16 00:42:47.753080: I tensorflow/core/kernels/conv_grad_input_ops.cc:858] running auto-tune for Backward-Data
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt
2018-04-16 00:42:47.835384: I tensorflow/core/kernels/conv_grad_input_ops.cc:858] running auto-tune for Backward-Data
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt
2018-04-16 00:42:47.897467: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt

以下に出力されます。
fast-style-transfer/output/output.jpg

違うスタイルにしたい場合は、
Google Drive - wave.ckpt
からwave.ckptなどの別の学習済みネットワークを持ってきて、

1
python3 evaluate.py --checkpoint styles/wave.ckpt --in-path examples/content/chicago.jpg --out-path output.jpg --allow-different-dimensions

として指定するのみです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
johndoe@sonoba:~/projects/fast-style-transfer$ python3 evaluate.py --checkpoint styles/wave.ckpt --in-path examples/content/chicago.jpg --out-path output.jpg

2018-04-16 00:43:40.259885: W tensorflow/stream_executor/rocm/rocm_driver.cc:405] creating context when one is currently active; existing: 0x7f37ff404050
2018-04-16 00:43:40.259977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:907] Found device 0 with properties:
name: Device 687f
AMDGPU ISA: gfx900
memoryClockRate (GHz) 1.622
pciBusID 0000:04:00.0
Total memory: 7.98GiB
Free memory: 7.73GiB
2018-04-16 00:43:40.259993: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929] DMA: 0
2018-04-16 00:43:40.259999: I tensorflow/core/common_runtime/gpu/gpu_device.cc:939] 0: Y
2018-04-16 00:43:40.260007: I tensorflow/core/common_runtime/gpu/gpu_device.cc:997] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Device 687f, pci bus id: 0000:04:00.0)
2018-04-16 00:43:40.634307: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt
2018-04-16 00:43:40.893959: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
2018-04-16 00:43:40.987932: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
2018-04-16 00:43:41.043334: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
2018-04-16 00:43:41.049861: I tensorflow/core/kernels/conv_grad_input_ops.cc:858] running auto-tune for Backward-Data
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt
2018-04-16 00:43:41.130803: I tensorflow/core/kernels/conv_grad_input_ops.cc:858] running auto-tune for Backward-Data
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt
2018-04-16 00:43:41.191681: I tensorflow/core/kernels/conv_ops.cc:670] running auto-tune for Convolve
MIOpen(HIP): Warning [FindRecordUnsafe] File is unreadable: /opt/rocm/miopen/share/miopen/db/gfx900_56.cd.pdb.txt

Style変換自体も、一般的なCNN系の技術の組み合わせでできていますので、ROCm−TensorFlowでも十分に動作するようです。

source

wreck

wave

udnie

scream

rain_princess

la_muse

絵をベースとしたニューラルネットはユニークなものが多く、視覚的にも非常に楽しいです!

References


GPU EATER - AMD GPU-based Deep Learning Cloud