みらいテックラボ

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

ペットボトルを認識してみよう! (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





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

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



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

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

おススメ! Deep Learning AMI

最近, Deep Learningを使った画像認識などにチャレンジしているのだが, 学習時間の短縮のために時々AWSのG2インスタンを使うことがある.

G2インスタンスを使う場合, ここ[1]などのようにCUDAやcuDNNをインストールしてGPUを使えるようにし, その上でTensorFlowやKerasをインストールするなど, 結構環境づくりに手間がかかった.
その上, G2インスタンスGPUであるGRID K520は, 最新のNDIVAドライバではサポートされていない(Ver367.xxまで)といったトラップまである.
(最初は見事にトラップにはまってしまった.)

そこで, Deep Learningが簡単に使えるAMIがないかと探していたところ, 最近Oregonリージョンでは「Deep Learning AMI Ubuntu Version」[2]なるAMIがAWS Marketplaceにあることが分かった.

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

そこでこれをちょい試してみることに.
すると, インスタンス生成時にこのAMIを選択するだけで, すぐに以下のDeep Learningフレームワークが利用できるようになった.

MCNetv0.9.3 tag
TensorFlowv1.0.1 tag
Theanorel-0.8.2 tag
Cafferc5 tag
Caffe2(Experimental)v0.6.0
Torchmaster branch
Keras1.2.2 tag
CNTKv2.0rc1 tag

注) 2017/4/20現在

Kerasを使った画像分類の学習を試してみたが, 問題なく動作しているようだ.

最近まで, Deep Learning用にGPUボード搭載のPC組み立てようかと考えていたが, こんなに環境構築が簡単な上に, 用途によってはよりハイスペックなP2インスタンスの選択も可能な点を考えると, 当面AWSをスポットインスタンスで使うのもいいか, と考え始める今日この頃.

GPU使ってDeep Learningを試してみたい方には, これはおススメです.

---
参照URL:
[1] AWS g2インスタンス(GPU:K520)にCUDAを入れる際の落とし穴(2017年3月版)
[2] AWS Marketplace: Deep Learning AMI Ubuntu Version




Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門 (CodeZine BOOKS)

Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門 (CodeZine BOOKS)


Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版


Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon Web Services実践入門 (WEB+DB PRESS plus)


Amazon Web Services完全ソリューションガイド

Amazon Web Services完全ソリューションガイド