DeepLearning
caffe2
ObjectDetection

Facebook DetectronをWindowsで動かす

公式URL https://github.com/facebookresearch/Detectron

(開発者が自身で使用している)Linuxで動作確認しているけどWindowsで動くかは知らんぜよというケースがよくありますが、仕事で何か活用するぞとなるとほぼ100%がWindowsの状態で、簡単に「Linux入れれば使えるよ」と言うわけにもいかないので、かなりアドホックに修正しました。


使用環境


  • Windows 7

  • GeForce GTX 1080

  • CUDA 8+cuDNN v6(CUDA 9+cuDNN v7でも可)

  • Visual Studio 2015 Update 3

  • Python 2.7


Caffe2 のビルド

公式にはWindows 10以上が必要となっていますが、Windowsバージョンが違うくらいで影響が出るようなAPI叩いたりしてないでしょと、Windows 7 で動かしました。

基本的には公式ドキュメントの https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile の手順通りに行います。

使用したCaffe2 https://github.com/pytorch/pytorch/tree/a44d9d6eb40a28975967f5a7c7fb828b2429ad04


Caffe2の修正

Detectronで使用するカスタムオペレータのDLLがそのままロードして使えないので、Caffe2本体に直接組み込むことにしました。

本来ならCaffe2の方をきちんとDLLを読み込めるように修正するのが筋でしょうが、Windows DLLの動作の仕組みもほとんど覚えてないので修正方法の見当をつけられませんでした。


  1. pytorch/modules/detectron のファイル(CMakeList.txtを除く)を pytorch/caffe2/operators にコピー

  2. pytorch/binaries/benchmark_helper.cc にダミーの sleep() 関数を作成


    • Windowsにはsleep()ないんだよ……

    • ベンチマーク用なので適当でよさそう



  3. pytorcch/scripts/build_windows.bat の編集



  4. ライブラリパスに python27.lib の場所を追加



あとは build_windows.bat を実行して、ビルド終わるのをお待ちください。

CUDA 9 を使った場合は Eigen ライブラリの修正する必要が出てきますが、エラーになった箇所(Half.hの204行目だったかな)はCaffe2で使われてない箇所なのでカットするだけでいいです。


Detectronのビルド

公式ドキュメント通りにビルドを進めます。

コンパイルオプション指定のところでエラーになるので setup.py の -Wno-cpp は削除して make すればすんなり終わります……が実行するとエラーになるので、問題箇所を修正します。


Detectron の修正


COCO APIの修正

Detectronで必要な COCO API もWindows対応版( https://github.com/philferriere/cocoapi )があるのでビルドは問題なく済みますが、実際にDetectronで使ってみるとエラーが起きるので修正します。


おわり

Detectronのテストコード(test_spatial_narrow_as_op.py)が正常に動くようなら、infer_simple.py で物体検出も動作することでしょう。