OpenCV と MobileNet を使って物体検出を行った

Introduction

物体検出を Deep Leaning と OpenCV を用いて行う

OpenCV 3.3 からdnnモジュールが正式にリリースされた

The main news is that we promoted DNN module from opencv_contrib to the main repository, improved and accelerated it a lot. An external BLAS implementation is not needed anymore. For GPU there is experimental DNN acceleration using Halide (http://halide-lang.org_). The detailed information about the module can be found in our wiki: Deep Learning in OpenCV.   https://opencv.org/opencv-3-3.html

今回はその dnn モジュールを使って物体検出を行う

この記事は主にpyimagesearch の記事を参考に行いました。詳細な解説がありがたいです Deep Leaning を基にした物体検出で有名な手法は以下の 3 つである

  • Faster R-CNN : 2015
  • YOLO : 2015
  • SSDs : 2015

物体検出を行う際の DNN のアーキテクチャでは主に VGG か ResNet が用いられる。しかし欠点としてこれらのアーキテクチャは非常に大きく 200–500MB のサイズになってしまう

物体検出において速度、精度、メモリの3つのバランスを考慮する場合、どのアーキテクチャを選ぶべきかを Google が論文としてまとめている

[1611.10012] Speed/accuracy trade-offs for modern convolutional object detectors

一行でまとめると、基本的に速度と精度はトレードオフであり、最速は SSDs MobileNet, 最高精度は Faster R-CNN w/Inception Resnet at stride 8

今回は省メモリかつ速度が早い SSDs MobileNet を用いて物体検出を行った hurutoriya/yolov2_api

Study

  • Print デバッグをやめて、logging module に切り替えた。出力が綺麗になっていい感じ
  • OpenCV だけで DNN を使えるのは結構便利(学習済モデルとかは必須)

Future Work

  • YOLO v2 も C++のサンプルがあるので、Python でも動くようにしたい
  • Web App に組み込めるくらい速そうなので、やってみましょう