Upload
takuya-minagawa
View
4.246
Download
3
Embed Size (px)
Citation preview
自己紹介
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のコード
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以下
学習の流れ
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)