windowsで動かしてみたシリーズでございます
過去にはvid2vidとかいろいろ動かしてみてるので今回もいけるでしょう
なお、TecoGANのGitHubリポジトリはこちら:
使用環境
- windows 10 1809
- 最新のAnaconda
- RTX 2080 Ti
環境のセットアップ
tensorflowとpytorchが必要みたいですね。これはwindows使いには一番嬉しいパターンです。
あとopencvも必要なので、以前の記事のやり方にしたがってまずはanaconda環境でopencv3とtensorflowを入れます:
conda create -y -n tecogan -c conda-forge python=3.6 anaconda python-lmdb opencv
activate tecogan
conda install tensorflow-gpu
pytorchは公式のやりかたで簡単にインストールできますね
pip install https://download.pytorch.org/whl/cu100/torch-1.1.0-cp36-cp36m-win_amd64.whl
pip install https://download.pytorch.org/whl/cu100/torchvision-0.3.0-cp36-cp36m-win_amd64.whl
あとはrequirements.txtでインストールすれば良いのかと思いきや、落とし穴があります。
注意1: numpyのバージョン
僕のanaconda環境ではデフォルトでインストールされるnumpyが1.15でした。requirements.txtではnumpy>=1.14.3となっているので問題ないように思えるのですが、python runGan.py 2という評価テストの実行で以下のエラーが出てしまいました:
Testing test case 2
Traceback (most recent call last):
File "metrics.py", line 5, in
from LPIPSmodels import util
File "D:\TecoGAN\LPIPSmodels\util.py", line 13, in
import torch
File "C:\Users\user\AppData\Local\conda\conda\envs\tensor2tensor\lib\site-packages\torc
h\__init__.py", line 79, in
from torch._C import *
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
なんか調べるとnumpy 1.16にアップグレードしたら解決したよ!てのを見ました
なので以下のコマンドでnumpyを1.16にアップグレード:
conda install numpy=1.16
しかし問題は続きます
注意2: scikit-imageのバージョン
引き続きpython runGan.py 2の実行でエラーが出ます:
Testing test case 2
Traceback (most recent call last):
File "metrics.py", line 5, in
from LPIPSmodels import util
File "D:\TecoGAN\LPIPSmodels\util.py", line 12, in
from skimage.measure import compare_ssim
File "C:\Users\user\AppData\Local\conda\conda\envs\tensor2tensor\lib\site-packages\skim
age\__init__.py", line 167, in
from .util.dtype import (img_as_float32,
File "C:\Users\user\AppData\Local\conda\conda\envs\tensor2tensor\lib\site-packages\skim
age\util\__init__.py", line 8, in
from .arraycrop import crop
File "C:\Users\user\AppData\Local\conda\conda\envs\tensor2tensor\lib\site-packages\skim
age\util\arraycrop.py", line 8, in
from numpy.lib.arraypad import _validate_lengths
ImportError: cannot import name '_validate_lengths'
今度はscikit-image関連のエラーのようです。privateなコンポーネントをimportするのは行儀が悪いのでこういうことになるのです。
pipでインストールされていたscikit-imageのバージョンは0.14.1だったので、下記コマンドで0.15.0にアップグレードです:
conda install -c conda-forge scikit-image
これでエラーは回避できます。
最後に、まだインストールしてない残りのモジュールをインストールします。
pip install -r requirements.txt
exampleの実行
READMEにある通り、exampleの実行は以下のコマンドでできます:
python runGan.py 0
python runGan.py 1
python runGan.py 2
- データ、モデルのダウンロード
- calenderデータの超解像を実行
- 結果のevaluation
という具合です。ただし、これらはpython内でunixシェルコマンド(wgetやunzipなど)を呼び出しているのでwindowsでは実行できません。
WSLでwindowsのバイナリを実行するという方法も以前書きましたが、実行されるpythonがwindows上のもの → subprocessコマンドで呼び出されるターミナルもwindowsのシェルになってしまい、今回は実行できません。
でもrunGan.py 0でやってることはwgetとunzipなので、各コマンドをWSLに手動コピペして実行しましょう。
runGan.py 1とrunGan.py 2はpythonを呼び出しているだけなので、上記記事の通りにWSL上でpython.exeへのaliasを作った後、runGan.py内で”python”となっているところを”python.exe”に書き換えましょう。
これで各コマンドが実行できます。
結果
入力データは動画から書き出した連番画像です。これはffmpegを使えば作成できます。
41枚の画像の変換に15秒弱ぐらいかかった気がします。
Testing test case 1
Using TensorFlow backend.
[1, 144, 180, 3]
[1, 576, 720, 3]
Finish building the network
2019-05-27 02:09:44.784414: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU
supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2019-05-27 02:09:44.972386: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found
device 0 with properties:
name: GeForce RTX 2080 Ti major: 7 minor: 5 memoryClockRate(GHz): 1.755
pciBusID: 0000:01:00.0
totalMemory: 11.00GiB freeMemory: 9.03GiB
2019-05-27 02:09:44.979885: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Addin
g visible gpu devices: 0
2019-05-27 02:09:45.401648: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device
interconnect StreamExecutor with strength 1 edge matrix:
2019-05-27 02:09:45.405607: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0
2019-05-27 02:09:45.407833: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0:
N
2019-05-27 02:09:45.410791: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Creat
ed TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 8702 MB memory) ->
physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute cap
ability: 7.5)
Loading weights from ckpt model
Frame evaluation starts!!
Warming up 5
Warming up 4
Warming up 3
Warming up 2
Warming up 1
saving image output_0001
saving image output_0002
saving image output_0003
saving image output_0004
saving image output_0005
saving image output_0006
saving image output_0007
saving image output_0008
saving image output_0009
saving image output_0010
saving image output_0011
saving image output_0012
saving image output_0013
saving image output_0014
saving image output_0015
saving image output_0016
saving image output_0017
saving image output_0018
saving image output_0019
saving image output_0020
saving image output_0021
saving image output_0022
saving image output_0023
saving image output_0024
saving image output_0025
saving image output_0026
saving image output_0027
saving image output_0028
saving image output_0029
saving image output_0030
saving image output_0031
saving image output_0032
saving image output_0033
saving image output_0034
saving image output_0035
saving image output_0036
saving image output_0037
saving image output_0038
saving image output_0039
saving image output_0040
saving image output_0041
total time 3.3254575729370117, frame number 46
結果はresultフォルダに入ってます:
うんまあ、確かに超解像できてます。でもまだちょっと自分で動画用意して実行してみないとわからないですね。
(2019-05-28 追記)
TecoGAN、変換自体のスピードはRTX 2080 Tiで2FPS ぐらい
その前に初期化処理が10秒ちょい
全フレームをGPUメモリに読み込むため
11GBのグラボで10000フレームぐらいがバッチ処理できる限度— ミートパッカーやすし (@Drunkar) May 27, 2019
TecoGANの配布モデルでBoys Awareというパブリックドメイン映画を超解像してみた。
左が変換前。右が変換後。うーん
結局ドメインごとに訓練が必要そう
訓練コードの発表に期待 pic.twitter.com/G6Kz0Ry9Zq— ミートパッカーやすし (@Drunkar) May 27, 2019
コメント