なんかよくわかんないけどすごそうな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を使って実現しています。(実行のときにモデルのダウンロードが必要)
個人的に何よりもすごいと思うことは、「ビル」や「道路」というセグメントから動画を生成する際に、「ビル」を「森」に、「道路」を「湖」とかにできる点です。(もちろん、学習データの選定がとても大事ですが。。。)
これは現実を塗り替える新たな世界の誕生の端緒となる気がします
次の「スマホ」はARグラスで、キラーアプリは現実のフィルタリングアプリ(リアルタイムvid2vidで大自然や人間の能力を引き出す風景に変更する)になるという確信が降りてきた
ウォークマンと同じ— ミートパッカーやすし (@Drunkar) March 11, 2019
環境構築
動作環境
- 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
実行するとセグメンテーション画像から生成されたリアルな動画の連番画像が出力されます。
コメント