みらいテックラボ

音声・画像認識や機械学習など, 管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

ペットボトルを認識してみよう! (4)

これは, 昨年の10月~12月に開催された「チームで学ぼう! TensorFlow(機械学習)実践編第2期」において, 私の参加した「チーム仲鶴後吉(仮)」の成果を数回に分けて紹介するものである.

前回までは, STEP1としてペットボトルが1本だけ含まれる画像のカテゴリ認識について紹介したが, 今回はSTEP2として複数のペットボトルが含まれる画像のカテゴリ認識について紹介する.

6. 領域切り出し
複数本のペットボトルが含まれる画像の中から, 各ペットボトルのカテゴリ認識を行うには, まず画像内の物体の領域を検出する必要がある.

今回は時間もあまりないことから, ペットボトル領域の検出については使えそうなツール, ライブラリ等を利用する方向で進めた.

ツール候補:
1) OpenCVの物体検出
2) Selective Search[1]
3) SSD(Single Shot Multibox Detector)[2]
4) Google Cloud Vision API

6.1 OpenCVの物体検出
ここ[3]を参照し, Haar-Like特徴でペットボトル検出の学習を行い試したが, 学習が不十分なのか検出性能はダメダメ.
[お試し結果]
f:id:moonlight-aska:20170421232334j:plain:w150

6.2 Selective Search
Alpaca[4]のライブラリを使って試してみたが, これも今一の感じ.
パラメータを調整すればもっとましになるかもしれないが, 今回はパス.
[お試し結果]
f:id:moonlight-aska:20170422000302j:plain:w150

6.3 SSD
mxnet-ssd[5]を試してみたところ, これまでのものよりかなりよさそう.

[お試し結果]
f:id:moonlight-aska:20170418001525p:plain:w150

どうしてもダメならGoogle Cloud Vision APIとも思っていたが, 今回はペットボトル位置の検出にmxnet-ssdを使うことにした.

7. STEP2システム
実は, このmxnet-ssdは20カテゴリの一般物体認識を行っていて, カテゴリの1つにペットボトルがある.
そこで, ペットボトルとして切り出し/認識された領域に対して, STEP1のCNNを使ってペットボトルのカテゴリを認識するようにしてみた.

f:id:moonlight-aska:20170422001725p:plain

[お試し結果]
f:id:moonlight-aska:20170422002825p:plain:w400

f:id:moonlight-aska:20170422002855p:plain:w400

精度はまだまだですが, 一応ペットボトルの領域切り出し&カテゴリ認識の枠組みが動作するようになった.

8. 最後に
最終目標だった応用の検討&実装まではたどり着けなかったが, 約2か月間結構楽しく取り組めた.
もう少し, Deep Learningに取り組んでから, 識別精度アップには再度チャレンジしてみたい.
また, ペットボトルの領域切り出しに今回はmxnet-ssdをそのまま利用したが,オブジェクトの検出についてもいろいろと試してみたい.

---
参照URL:
[1] Selective Search for Object Recognition
[2] SSD: Single Shot MultiBox Detector
[3] OpenCVで物体検出器を作成する① ~基礎知識~ - 技術者ブログ
[4] 一歩進んだ物体認識を行うためのSelective SearchのPython版オープンソースの提供とLabellioを組み合わせた活用方法 - Alpaca技術ブログ
[5] MXNet port of SSD





画像認識 (機械学習プロフェッショナルシリーズ)

画像認識 (機械学習プロフェッショナルシリーズ)



ディジタル画像処理 [改訂新版]

ディジタル画像処理 [改訂新版]