Introduction

2019年最新のObject DetectionであるM2Detを使ってみます。
目標は自作のデータセットを使うこと。
まずはサンプルを実行してみます。

How to

公式ページはこちら。

なお

  • 推奨はAnacondaのようですが、ピュアなPythonで試します。
  • Python 3.6.7
  • CUDA 9.2

という前提です。

仮想環境構築

仮想環境を作成しアクティベートします。

1
2
3
$ sudo apt-get install python3-venvpython3-tk
$ python3 -m venv M2Det
$ source M2Det/bin/activate

環境変数設定

CUDAの環境変数を設定します。
設定済みならスキップ。

1
2
3
4
VERSION=9.2
export CUDA_HOME=/usr/local/cuda-${VERSION}
export PATH=/usr/local/cuda-${VERSION}/bin:${PATH}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CUDA_HOME}/lib64

設定後、下記のコマンドで確認を行います。

1
2
3
4
$ nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Tue_Jun_12_23:07:04_CDT_2018
Cuda compilation tools, release 9.2, V9.2.148

パッケージのインストール

M2DetPyTorch0.4.1をサポートと明言していますので従います。
古いバージョンは下記のページから入手します。
自分の環境のCUDAと合わせて適切なファイルをダウンロードします。

今回はtorch-0.4.1-cp36-cp36m-linux_x86_64.whlになります。
なお、途中の –cache-dir は、自環境でディスク容量不足のエラーが出たための対策です。

1
2
3
$ python -m pip install torch-0.4.1-cp36-cp36m-linux_x86_64.whl
Processing ./torch-0.4.1-cp36-cp36m-linux_x86_64.whl
Could not install packages due to an EnvironmentError: [Errno 28] デバイスに空き領域がありません
1
2
3
4
5
6
7
8
$ wget https://download.pytorch.org/whl/cu92/torch-0.4.1-cp36-cp36m-linux_x86_64.whl

$ python -m pip install pip --upgrade
$ python -m pip install numpy
$ python -m pip install --cache-dir=./cache --build ./cache torch-0.4.1-cp36-cp36m-linux_x86_64.whl
$ python -m pip install torchvision
$ python -m pip install opencv-python tqdm
$ python -m pip install cython matplotlib addict termcolor python3-tk

インストール後、下記のようにしてPyTorchがCUDAを認識しているかどうかを確認します。

1
2
3
4
5
6
7
8
9
$ python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> torch.cuda.get_device_name(0)
'GeForce GTX 1080'

ソースの入手

1
git clone https://github.com/qijiezhao/M2Det.git

pycocotoolsとnms

ソースに付属のスクリプトを使ってpycocotoolsnmsをインストールします。

1
2
3
cd M2Det
chmod +x make.sh
./make.sh

デモ

まず、pretrainedファイルをダウンロードします。

ダウンロードしたファイルはどこでもいいので移動します。
そして、下記のコマンドを実行します。
ダウンロードしたファイルの移動先をどこでもよいといったのは、**-m** 引数にダウンロードしたファイルのパスを指定するからです。

1
python demo.py -c=configs/m2det512_vgg.py -m=m2det512_vgg.pth --show

実行時はGUI画面が必要です。SSHからだと、

1
2
3
pos:(15.4,175.9,34.7,213.7), ids:handbag, score:0.009
pos:(97.1,248.4,128.3,304.3), ids:handbag, score:0.002
: cannot connect to X server

とエラーが出るためです。
ただし、**–showを外せば画面には表示されません。
出力結果が
imgs**ディレクトリに書き出されます。

GUI上で実行すると下記のように画像が一定間隔で切り割って結果が表示されます。
(クリックして拡大するとアニメーションします)

ちなみに、実行時のGPUの使用メモリは約3600MBでした。