なんかよくわかんないけどすごそうなDeep Learning研究の1つ、vid2vidはソースコードが公開されているのですが、対応OSがLinuxかmacOSと書いてありますが、頑張ればwindowsで動きます。頑張れば。windowsでは動かすまでが一筋縄ではいきませんでした。

READMEは充実しています。いろいろ試行錯誤した結果、生成も訓練もwindows10で動かすことができたので環境構築の方法をメモします。

いや、なんでwindowsで消耗してるの?ってのはあるんですが、あるんですが。。。

vid2vidって何?何ができるの?

動画を見てもなんか分かるような分からないような感じだと思います。

ひとことで言うと、線画やセグメント動画からリアルな表情や街の風景を合成できる生成モデルです。

vid2vidは生成モデルだというのはつまり、なんらかのインプットを与えると、それっぽい動画を作ってくれるということです。このアウトプットの動画がマジリアル&動きが滑らかでスゲーってのが驚きポイントですね。

今回の発表では、vid2vidは3つのタイプの動画について生成に成功しています。

  • 街の風景[Cityscapes]
  • 顔の動き[Face]
  • 体の動き[Pose]

で、インプットとなる動画はそれぞれただリアルな動画ではなく、ちょっと抽象的な動画をインプットとして与えます:

  • 街の風景[Cityscapes]の入力: 物体がセグメントされた画像をフレームとした動画(Cityscapesデータセットを独自にセグメント検出)
  • 顔の動き[Face]の入力: 線画の動画(dlibを使用)
  • 体の動き[Pose]の入力: 体のUV座標画像をフレームとした動画(DensePoseとOpenPoseを使用)

また、動きが滑らかでスゲーというところは、FlowNet2.0というオプティカルフローを計算するNNを使って実現しています。(実行のときにモデルのダウンロードが必要)

個人的に何よりもすごいと思うことは、「ビル」や「道路」というセグメントから動画を生成する際に、「ビル」を「森」に、「道路」を「湖」とかにできる点です。(もちろん、学習データの選定がとても大事ですが。。。)

これは現実を塗り替える新たな世界の誕生の端緒となる気がします

環境構築

動作環境

  • Windows10 Pro 1809: homeでも問題ないはず
  • Anaconda
  • Windows Subsystem for Linux(WSL, Ubuntu 16.04): シェルスクリプトの実行に必要
  • CUDA 9.0, cuDNN
  • PyTorch 0.4.1

前準備

vid2vidのインストールや実行はシェルスクリプトで書かれているので、シェルが必要です。

しかし、GPUやpythonはwindows上のものを使いたい。

これはconda envをactivateして呼び出したWSL上でwindowsのバイナリを呼ぶことで実現できます。な、なんだってー

コマンドプロンプトを開いたら、wslと打ちます。するとWSLのシェルが立ち上がるので、 vi .bashrcして以下を追記しましょう:

alias conda="conda.exe"
alias python="python.exe"
alias ipython="ipython.exe"
alias nosetests="nosetests.exe"
alias pip="pip.exe"

cd /mnt/c/Users/user_name

condaとかpythonにwindowsバイナリのエイリアスを作っています。あと、最後にwindows上のホームフォルダに移動すると便利でしょう。

これができたら、再びcmdを開いて次に進みます

環境構築

conda create -y -n vid2vid python==3.6
activate vid2vid

# launch wsl shell
wsl

conda install -y -c peterjc123 cuda90 cudnn vc
conda install -y -c soumith pytorch torchvision
conda install -y -c conda-forge opencv
conda install -y scipy scikit-image
pip install cffi
pip install dominate requests
pip install dlib

# パスに以下を追加:
- C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

condaのenvironment.ymlを用意しました。これをenvironment.ymlという名前で保存して、conda env create -f=environment.yml で再構築できるはずです。

name: vid2vid
channels:
  - conda-forge
  - soumith
  - peterjc123
  - anaconda
  - defaults
dependencies:
  - blas=1.0=mkl
  - ca-certificates=2018.03.07=0
  - certifi=2018.10.15=py36_0
  - cffi=1.11.5=py36h74b6da3_1
  - cloudpickle=0.6.1=py36_0
  - cudatoolkit=9.0=1
  - cudnn=7.1.4=cuda9.0_0
  - cycler=0.10.0=py36h009560c_0
  - dask-core=1.0.0=py36_0
  - decorator=4.3.0=py36_0
  - freetype=2.9.1=ha9979f8_1
  - hdf5=1.8.20=hac2f561_1
  - icc_rt=2017.0.4=h97af966_0
  - icu=58.2=ha66f8fd_1
  - imageio=2.4.1=py36_0
  - intel-openmp=2019.1=144
  - kiwisolver=1.0.1=py36h6538335_0
  - libopencv=3.4.2=h20b85fd_0
  - matplotlib=3.0.1=py36hc8f65d3_0
  - mkl=2019.1=144
  - mkl_fft=1.0.6=py36hdbbee80_0
  - mkl_random=1.0.1=py36h77b88f5_1
  - networkx=2.2=py36_1
  - numpy=1.15.4=py36ha559c80_0
  - numpy-base=1.15.4=py36h8128ebf_0
  - olefile=0.46=py36_0
  - opencv=3.4.2=py36h40b0b35_0
  - openssl=1.1.1=he774522_0
  - pillow=5.3.0=py36hdc69c19_0
  - pip=18.1=py36_0
  - py-opencv=3.4.2=py36hc319ecb_0
  - pycparser=2.19=py36_0
  - pyparsing=2.3.0=py36_0
  - pyqt=5.9.2=py36ha878b3d_0
  - python-dateutil=2.7.5=py36_0
  - pytz=2018.7=py36_0
  - pywavelets=1.0.1=py36h8c2d366_0
  - scikit-image=0.14.0=py36h6538335_1
  - scipy=1.1.0=py36h4f6bf74_1
  - setuptools=40.6.2=py36_0
  - sip=4.19.13=py36ha925a31_0
  - six=1.11.0=py36_1
  - tk=8.6.8=hfa6e2cd_0
  - toolz=0.9.0=py36_0
  - tornado=5.1.1=py36hfa6e2cd_0
  - vc=14.1=h21ff451_3
  - vs2015_runtime=15.5.2=3
  - wheel=0.32.3=py36_0
  - wincertstore=0.2=py36h7fe50ca_0
  - jpeg=9c=hfa6e2cd_1001
  - libpng=1.6.36=h7602738_1000
  - libtiff=4.0.10=h36446d0_1001
  - libwebp=1.0.1=hfa6e2cd_1000
  - python=3.6.0=2
  - sqlite=3.26.0=hfa6e2cd_1000
  - zlib=1.2.11=h2fa13f4_1004
  - qt=5.9.7=vc14h73c81de_0
  - cuda90=1.0=h4c72538_0
  - vs2017_runtime=15.4.27004.2010=1
  - pytorch=0.4.1=py36_cuda90_cudnn7he774522_1
  - torchvision=0.2.1=py_2
  - pip:
    - channelnorm-cuda==0.0.0
    - chardet==3.0.4
    - correlation-cuda==0.0.0
    - dask==1.0.0
    - dlib==19.16.0
    - dominate==2.3.5
    - idna==2.8
    - requests==2.21.0
    - resample2d-cuda==0.0.0
    - torch==0.4.1
    - urllib3==1.24.1

ねんのためenvironment.txtも用意しました。windows 64bitで conda create -n [env_name] –file environment.txt してください

# This file may be used to create an environment using:
# $ conda create --name  --file 
# platform: win-64
@EXPLICIT
https://conda.anaconda.org/anaconda/win-64/blas-1.0-mkl.tar.bz2
https://conda.anaconda.org/anaconda/win-64/ca-certificates-2018.03.07-0.tar.bz2
https://conda.anaconda.org/peterjc123/win-64/cuda90-1.0-h4c72538_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/cudatoolkit-9.0-1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/icc_rt-2017.0.4-h97af966_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/intel-openmp-2019.1-144.tar.bz2
https://conda.anaconda.org/anaconda/win-64/vs2015_runtime-15.5.2-3.tar.bz2
https://conda.anaconda.org/peterjc123/win-64/vs2017_runtime-15.4.27004.2010-1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/cudnn-7.1.4-cuda9.0_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/mkl-2019.1-144.tar.bz2
https://conda.anaconda.org/anaconda/win-64/vc-14.1-h21ff451_3.tar.bz2
https://conda.anaconda.org/anaconda/win-64/icu-58.2-ha66f8fd_1.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/jpeg-9c-hfa6e2cd_1001.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libwebp-1.0.1-hfa6e2cd_1000.tar.bz2
https://conda.anaconda.org/anaconda/win-64/openssl-1.1.1-he774522_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/python-3.6.0-2.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/sqlite-3.26.0-hfa6e2cd_1000.tar.bz2
https://conda.anaconda.org/anaconda/win-64/tk-8.6.8-hfa6e2cd_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/zlib-1.2.11-h2fa13f4_1004.tar.bz2
https://conda.anaconda.org/anaconda/win-64/certifi-2018.10.15-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/cloudpickle-0.6.1-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/dask-core-1.0.0-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/decorator-4.3.0-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/hdf5-1.8.20-hac2f561_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/kiwisolver-1.0.1-py36h6538335_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.36-h7602738_1000.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libtiff-4.0.10-h36446d0_1001.tar.bz2
https://conda.anaconda.org/anaconda/win-64/numpy-base-1.15.4-py36h8128ebf_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/olefile-0.46-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pycparser-2.19-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pyparsing-2.3.0-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pytz-2018.7-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/sip-4.19.13-py36ha925a31_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/six-1.11.0-py36_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/toolz-0.9.0-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/tornado-5.1.1-py36hfa6e2cd_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/wincertstore-0.2-py36h7fe50ca_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/cffi-1.11.5-py36h74b6da3_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/cycler-0.10.0-py36h009560c_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/freetype-2.9.1-ha9979f8_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/libopencv-3.4.2-h20b85fd_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/python-dateutil-2.7.5-py36_0.tar.bz2
https://repo.anaconda.com/pkgs/main/win-64/qt-5.9.7-vc14h73c81de_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/setuptools-40.6.2-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/networkx-2.2-py36_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pillow-5.3.0-py36hdc69c19_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pyqt-5.9.2-py36ha878b3d_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/wheel-0.32.3-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pip-18.1-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/imageio-2.4.1-py36_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/matplotlib-3.0.1-py36hc8f65d3_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/mkl_fft-1.0.6-py36hdbbee80_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/mkl_random-1.0.1-py36h77b88f5_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/numpy-1.15.4-py36ha559c80_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/py-opencv-3.4.2-py36hc319ecb_0.tar.bz2
https://conda.anaconda.org/soumith/win-64/pytorch-0.4.1-py36_cuda90_cudnn7he774522_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/pywavelets-1.0.1-py36h8c2d366_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/scipy-1.1.0-py36h4f6bf74_1.tar.bz2
https://conda.anaconda.org/anaconda/win-64/opencv-3.4.2-py36h40b0b35_0.tar.bz2
https://conda.anaconda.org/anaconda/win-64/scikit-image-0.14.0-py36h6538335_1.tar.bz2
https://conda.anaconda.org/soumith/noarch/torchvision-0.2.1-py_2.tar.bz2

 

サンプルの実行

ソースコードのクローン:

git clone https://github.com/NVIDIA/vid2vid.git
cd vid2vid

モデルのダウンロード(Cityscapes):

python scripts/street/download_models.py

# モデルのダウンロード(flownet)
python scripts/download_flownet2.py
# 以下のエラーを出して失敗するけど無視> The system cannot find the path specified.

関連パッケージのビルド:

cd models\flownet2_pytorch
cd networks\correlation_package
cd src
nvcc -c -o correlation_cuda_kernel.o correlation_cuda_kernel.cu -x cu -arch=sm_70 -Xcompiler -fPIC -Xcompiler "/MD /wd 4819"

train

# CityScape
# 以下スクリプトでpythonとなっているところはpython.exeに変更すること
bash ./scripts/street/test_2048.sh

pythonをpython.exeにすることでwindows上のanacondaのpythonが実行され、ちゃんとGPU実行ができます。そしてシェルスクリプトの処理はwslが担ってくれます。すごいなこれ。

test

# CityScape
# 以下スクリプトでpythonとなっているところはpython.exeに変更すること
bash ./scripts/street/test_2048.sh

実行するとセグメンテーション画像から生成されたリアルな動画の連番画像が出力されます。

関連記事

numpyで3次元座標インデックスの配列を作る方法

300ドル15W中華半導体レーザーカッター買った その5

deep learningフレームワーク・ライブラリをGPU環境のwindows10にインストールする方法と応用まとめ

transformerで自然な会話ができるボットを作った

エンジニアの苦しい毎日を救う魔法の白い粉

汎用クローラのリポジトリを更新しました

コメント

コメントを返信する

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です