はじめに
MaskR-CNN, SSD, YOLO等を超える最新の物体検出手法としてM2Detが出てきました。
嬉しいことにその筆者実装コードが公開されているので、試したい方も多いはず。
ただ、たぶんWindows環境だとコンパイルの段階でつまづいてしまう。
とりあえずで動かすことはできたので、同じように困った方のために書いておきます。
確認した環境
OS : Windows 10 Pro
GPU : NVIDIA GeForce GTX 1080Ti
CPU : intel Core i7-8700K
前準備
- Visual Studio
- Anaconda(Python)
- cuda, cudnn
- PyTorch
あたりは入れておいてパスを通しておくといいです。
手順
1. M2Detとpy-faster-rcnn-windowsをとってくる
git clone https://github.com/qijiezhao/M2Det
git clone https://github.com/MrGF/py-faster-rcnn-windows
2. M2Detフォルダへpy-faster-rcnn-windowsから必要なファイルをコピー
copy py-faster-rcnn-windows\lib\setup.py M2Det\utils\
copy py-faster-rcnn-windows\lib\setup_cuda.py M2Det\utils\
copy py-faster-rcnn-windows\lib\nms\gpu_nms.cu M2Det\utils\nms\
3. ファイル編集
M2Det\utils\setup.py
-
(Python3の場合)61行目を以下に変更
変更前:
for k, v in cudaconfig.iteritems():
変更後:for k, v in cudaconfig.items():
-
128~136行目の以下の箇所をすべてコメントアウトする。
Extension(
"utils.cython_bbox",
sources=["utils\\bbox.pyx"],
#define_macros={'/LD'},
#extra_compile_args={'gcc': ['/link', '/DLL', '/OUT:cython_bbox.dll']},
#extra_compile_args={'gcc': ['/LD']},
extra_compile_args={'gcc': []},
include_dirs = [numpy_include]
),
M2Det\utils\setup_cuda.py
- 61行目を以下に変更
変更前:nvcc_compile_args = ['-O', '--ptxas-options=-v', '-arch=sm_35', '-c', '--compiler-options=-fPIC']
変更後:nvcc_compile_args = ['-O2', '--ptxas-options=-v', '-arch=sm_35', '-c', '--compiler-options=-fPIC']
ここでGPUに合わせて-archは変更してもいいと思います。
- 100行目と101行目の間に以下を追記
#Remove ',ID=2'
elif ',ID=2' in c: cmd[idx] = c[0:len(c)-5]
4. コンパイル実行
cd M2Det/utils
python setup.py build_ext --inplace
python setup_cuda.py build_ext --inplace
確認
m2det512_vgg.pthをダウンロードしてM2Det/weights/に置く。
python demo.py -c=configs/m2det512_vgg.py -m=weights/m2det512_vgg.pth --show
がうまく実行できればOK。