18
Deep Learningで物体検出 CaffeBINGR-CNN皆川卓也

20140131 R-CNN

Embed Size (px)

Citation preview

Deep Learningで物体検出~CaffeとBINGでR-CNN~

皆川卓也

自己紹介

2

テクニカル・ソリューション・アーキテクト

皆川 卓也(みながわ たくや)フリーエンジニア(ビジョン&ITラボ)「コンピュータビジョン勉強会@関東」主催博士(工学)

テクニカル・ソリューション・アーキテクト

皆川 卓也(みながわ たくや)フリーエンジニア(ビジョン&ITラボ)「コンピュータビジョン勉強会@関東」主催博士(工学)

略歴:1999-2003年日本HP(後にアジレント・テクノロジーへ分社)にて、ITエンジニアとしてシステム構築、プリセールス、プロジェクトマネジメント、サポート等の業務に従事

2004-2009年コンピュータビジョンを用いたシステム/アプリ/サービス開発等に従事

2007-2010年慶應義塾大学大学院 後期博士課程にて、コンピュータビジョンを専攻単位取得退学後、博士号取得(2014年)

2009年-現在フリーランスとして、コンピュータビジョンのコンサル/研究/開発等に従事

R-CNNって何?

3

Regions with CNN feature

畳み込みニューラルネットワークで学習した特徴量を用いて物体検出を行う手法

論文:

Girshick, R., Donahue, J., Darrell, T., & Malik, J. “Rich feature hierarchies for accurate object detection and semantic segmentation”. CVPR2014.

R-CNNの流れ

4

Bingを使用 Caffeを使用 SVM

物体っぽい候補領域を抽出し、そのそれぞれの領域を畳み込みニューラルネットワーク(CNN)で取得した特徴量を用いて物体認識

R-CNNのコード

5

実際に論文で使用されたR-CNNのコード

https://github.com/rbgirshick/rcnn

領域検出にはMatlabが必要

Pythonのラッパー有

https://github.com/sergeyk/selective_search_ijcv_with_python

J. R. R. Uijlings, K. E. A. van de Sande, T. Gevers, A. W. M. “Smeulders, Selective Search for Object Recognition”,In International Journal of Computer Vision 2013.

Objectness検出の実装

6

Matlab持ってないし、高いよなあ。。。。

そういえば、以前CV勉強会でBingっていうObjectness検出の論文紹介したけど、あれってC++のコードが公開されてたな。。。

Bingって最新の手法だし、勉強もかねて自分でR-CNN全体を実装してみるかな。。。

Bing

8

Ming-Ming Cheng,et.al.,”BING: Binarized Normed Gradients for Objectness Estimation at 300fps”, CVPR2014

CV勉強会での発表資料 http://d.hatena.ne.jp/takmin/20140727/1406441098

Bingのソースコード

9

本家

http://mmcheng.net/bingreadme/

ただしこれだとWindowsでしか動かない。。。

CaffeがWindowsを公式サポートしてない

以下でLinux版をダウンロードできる!

https://github.com/bittnt/Objectness

Caffe

10

http://caffe.berkeleyvision.org/

おそらくもっともメジャーなDeep CNNのためのツール/ライブラリ

ググると、日本語でも色々解説が出てくる。

ネットワークの構成をテキストファイルで定義できる

既にトレーニング済みの学習パラメータが用意されている。

自分が認識したいカテゴリを、このパラメータを初期値として学習させることで、学習の労力を削減できる。(Fine-tuning)

開発環境

11

マシン: Magnate SX

CPU: Core i7-3770 (クアッドコア 3.4GHz)

RAM: 16GB

GPU: NVIDIA GeForce GTX650 1GB

HDD: 2TB

OS: Ubuntu 14.04

検出の流れ

12

Bingのコードを改変して、結果をテキストファ

イルへ(C++)

Bingのコードを改変して、結果をテキストファ

イルへ(C++)Pythonで実装

CaffeをPythonから呼び出しCaffeをPythonから呼び出し

こういうアーキテクチャになった理由

13

本当は、認識部分は全てC++で完結したかった。。。

BingのコードがPascalVOCに特化しすぎていて、ライブラリ化するのは時間を食いそう。

CaffeはC++で書かれているが、サンプルやドキュメントが少ない。

Pythonの方がまだ多い

C++の仕様自体が数か月前のバージョンと変わるなど

画像を1枚1枚読み込んで、メモリから直接Caffeへデータを渡す方式がC++ではややこしそう

学習の流れ

14

学習画像

1画像2000個くらい

Bing物体位置

候補正解データ正解データ

学習用正例画像と負例画像を生成

画像変換(Warp)

学習データ(CNN用)

学習データ(SVM用)

Fine tuning(Caffe)

パラメータ(CNN)

特徴量抽出(Caffe)

SVMの学習パラメータ

(SVM)

正解画像と背景画像

15

CNN用

正解データ(物体の正しい位置のラベル)とのオーバーラップが0.5以上の物体候補領域を正例、それ以外は負例

SVM用

正例は正解データをそのまま仕様

負例は正例とのオーバーラップが0.3以下

Warp Region

16

認識と学習は以下のサイズに変換して行った

227 pixel

227 pixel16pixel

学習の流れ

17

学習画像

1画像2000個くらい

Bing物体位置

候補正解データ正解データ

学習用正例画像と負例画像を生成

画像変換(Warp)

学習データ(CNN用)

学習データ(SVM用)

Fine tuning(Caffe)

パラメータ(CNN)

特徴量抽出(Caffe)

SVMの学習パラメータ

(SVM)

インターフェース部分を改良(C++)

インターフェース部分を改良(C++)

OpenCVで開発(C++)

OpenCVで開発(C++)

Caffeのコマンドを使用(caffe train)Caffeのコマンドを使用(caffe train)

Caffeのツールを使用(extract_features.bin)Caffeのツールを使用(extract_features.bin)

結果

18

まとめ

19