chainercvとは
PFN様がCV関係の有名な画像認識・検出ネットワーク構造をまとめてくださったありがたいPythonライブラリです。
matplotlib関係のパッケージとOpenCVがpythonで動く環境であれば、以下のコマンドでスルッと入ると思います。
$ sudo pip install chainercv
ですが、どんな環境でも学習用のプログラムが動くようにしたかったので、Docker(nvidia-docker)を使ってまとめることにしました。chainerは、公式でnvidia-dockerのイメージがあるのですが、それを入れても私の環境ではtrainerがフリーズしたため、1から環境を作成しています(たぶん、CUDAのDockerイメージのバージョンが悪かったみたい)。
実行環境
- OS : Ubuntu 16.04 LTS
- GPU: GeForce GTX 980 Ti (6GB)
- docker : Docker version 17.09.0-ce
- nvidia-docker : 1.0.1-1
以下は、私が行った作業手順です。
nvidia-docker
Dockerとnvidia-dockerの入れかたは公式を参照してください。
nvidia/cuda image
CUDAがインストール済みのDockerが公開されているので、nvidia-dockerでRUNします。
nvidia/cuda docker hub
$ nvidia-docker run -it nvidia/cuda:7.5-cudnn5-devel
作成したイメージを更新して、作業スペースを作成しておきます。
$ apt-get update && apt-get upgrade
$ mkdir /workspace
$ cd workspace
python2.7
初期のイメージにはpythonが入っていないため、インストールします。
ついでに、numpy,pip,python-tk
を一緒に入れておきましょう。
$ apt-get install python-dev python-numpy python-pip python-tk
インストール確認
$ python -V
Python 2.7.6
opencv3.2
次に、OpenCVをインストールします。現時点で最新は3.3.1ですが、自分が使ったことないので、バージョンを下げています。
ほとんどの手順は公式の通りですが、3.2.0を公式サイトからダウンロードしてきました。
$ apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
念の為に、ビルドする際に、 BUILD_opencv_python2
をONにしました。
$ apt-get install unzip wget
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip
$ unzip 3.2.0.zip
$ cd opencv-3.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_opencv_python2=ON -D WITH_TBB=ON ..
インストール確認
$ python
> import cv2
> exit()
pip install
あとは、pipで順にインストールします。
指定しているバージョンは、私が動作確認した際のバージョンです。
$ pip install matplotlib==2.1.0
$ pip install cupy==2.0.0
$ pip install chainer==3.0.0
$ pip install chainercv==0.7.0
動作確認
※動作確認なのでバッチサイズは適当です。
$ cd /workspace
$ wget https://github.com/chainer/chainercv/archive/v0.7.0.zip
$ unzip v0.7.0.zip
$ cd chainercv-0.7.0/examples/ssd
$ python train.py --model ssd512 --batchsize 4 --gpu 0 --out /workspace/result_chainercv
上記で、Pascal VOCの学習が始まれば、大丈夫です。
なお。Pascal VOCのデータセットが ~/.chainer
に自動的に保存されるので、
dockerの容量が大きくなります。docker imageが大きくなるのが嫌な方は、注意してください。