LoginSignup
17
10

More than 5 years have passed since last update.

Docker版のRefineDetで物体検出してみる

Posted at

RefineDetとは

Single-Shot Refinement Neural Network for Object Detection ⇒ RefineDet
(Shifeng Zhang, Longyin Wen, Xiao Bian, Zhen Lei, Stan Z. Li:2017/11/18)

ソースはこちらから。

物体検出アルゴリズムのひとつで、SSDよりやや速度は劣るが、認識精度が高い。
Two-Step Cascaded Regressionという仕組みで、
より小さな物体に対しての認識が可能なようです。

※以下の記事で日本語でも解説されているので、是非ご一読ください。
リアルタイム物体検出向けニューラルネット、SSD(Single Shot Multi Detector)及びその派生モデルの解説

その他のアルゴリズムと比べるとこんな感じ。

System VOC2007 test mAP FPS (Titan X)
Faster R-CNN(VGG16) 73.2 7
YOLO(GoogLeNet) 63.4 45
YOLOv2(Darknet-19) 78.6 40
SSD300(VGG16) 77.2 46
SSD512(VGG16) 79.8 19
RefineDet320(VGG16) 80.0 40
RefineDet512(VGG16) 81.8 24

システム名に続く数字は入力サイズです。

実行環境

OS:Ubuntu16.04
GPU:GeForce GTX 1080
Docker:18.06.1-ce

実行手順 

  1. RefineDetリポジトリをクローンする。
    Terminal
    $ git clone https://github.com/sfzhang15/RefineDet.git
    

  2. Dockerイメージを作成する。 
    ※CPU版は通常のdocker buildでOKです。
    その場合、dockerfileディレクトリもCPU版のものを指定してください。
    Terminal
    $ nvidia-docker build -t [任意のイメージ名] [RefineDetGPUdockerfileディレクトリ]
    

  3. Dockerコンテナを作成する。
    ※CPU版は--runtime=nvidiaは不要です。
    また2~4行目ではX Window Systemの設定を行っています。(画像表示のため)
    Terminal
    $ docker run -it --runtime=nvidia \
          --net host \
          -e DISPLAY=$DISPLAY \
          -v $HOME/.Xauthority:/root/.Xauthority \
          --name [任意のコンテナ名] [作成したイメージ名]
    

  4. 学習モデルをDLする。

    学習モデルはGitHubのREADME下部、ModelsよりDLできます。
    今回はPASCAL VOC models (VGG-16)07+12 : RefineDet320を使用します。

    DLしたファイルを解凍し、Dockerコンテナの/opt/caffe/にコピーします。
    docker cpでホスト⇔コンテナ間のコピーが可能です。

    Terminal
    $ docker cp [Modelsディレクトリ] [コンテナ名]:/opt/caffe/
    

  5. Dockerコンテナに入り、必要なライブラリをインストールする。
    docker start [コンテナ名]docker attach [コンテナ名]でDockerコンテナに入れます。

    Dockerコンテナに入ったら、カレントディレクトリを/opt/caffe/に変更してください。
    またインストール前にapt-getを更新してください。

    Terminal
    $ pip install matplotlib
    $ apt-get install python-tk
    $ pip install scikit-image
    

  6. RefineDetを実行する。
    Terminal
    $ python ./test/refinedet_demo.py
    

    Screenshot from 2018-08-29 11-29-37.png
    Screenshot from 2018-08-29 11-29-45.png
    Screenshot from 2018-08-29 11-29-51.png
    Screenshot from 2018-08-29 11-29-58.png
    Screenshot from 2018-08-29 11-30-03.png
    画像が表示されれば成功です。
    バスの運転手や後方の馬、人物など、
    画像サイズに対して小さな物体も検出できていることがわかります。

    まとめ

    普段は物体検出アルゴリズムにSSDを使用していますが、
    小さな物体の認識精度が上がらず、試験的にRefineDetを使用しました。

    今回はデモの実行のみですが、今後に期待が持てそうな結果となりました。
    引き続き調査を続けていきたいと思います。

    参考文献

    以下の記事がたいへん参考になりました。

17
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10