MATLAB+Pythonで簡単機械学習

一般社団法人二足歩行ロボット協会
西村輝一

機械学習
OpenCVで物体検出器を作成する
https://www.pro-s.co.jp/engineerblog/opencv/post_6202.html

 学習 物体を検出する際、あらかじめ画像から、特徴量を抽出する。

 推論/検証
 学習済の特徴に合う部分がないかを画像上を探査する。

カスケード分類器
haartraining（ハールトレーニング）
Haar-Like特徴による機械学習
traincascade（トレインカスケード）
haartrainingのあとに作られたもの
Haar-Like特徴・LBP特徴・HOG特徴から1つを選択●正解画像は7000枚以上、不正解画像は3000枚以上

ARGOS Challenge
ROS,OpenCV,Pythonの活用

機械学習(カスケード分類器)

具体的にはどうすれば良いのか?
 MATLABをインストール
 仕様
 2017a Windows 64bit

 画像を集める。
 映像から切り出し。

 Labelerでラベリング
 正解画像と不正解画像を準備

 MATLABで学習 学習と検証 推論/検出を行う。
 MATLAB Python+OpenCV

画像を集める。
正解画像（ポジティブ画像）└検出させたい物体が映っている画像

不正解画像（ネガティブ画像、背景画像）└検出させたい物体が映っていない画像
正解画像は7000枚以上、不正解画像は3000枚以上あると良いようですが今回は1/100程度で行った。

MATLAB Labelerでラベリング
アプリケーションの学習イメージラベラーを使う。

全ての画像にROIを指定し、ROIのエキスポートを構造体で行う。

実演トレーニング
Negativeフォルダーを指定して学習を開始するプログラム

trainCascadeObjectDetectorの説明

実演

特徴量

MATLAB2017a<?xml version="1.0"?><opencv_storage><!-- Created using Computer Vision System Toolbox(tm) for MATLAB(R) --><!-- Version 9.2.0.556344 (R2017a) --><?xml version="1.0"?><!-- Compatible with OpenCV 3.1 --><opencv_storage><cascade><!-- Created using Computer Vision System Toolbox(tm)for MATLAB(R) --><stageType>BOOST</stageType><!-- Version 9.0.0.341360 (R2016a) --><featureType>HOG</featureType><!-- Compatible with OpenCV 2.4 --><height>45</height><cascade><width>32</width><stageType>BOOST</stageType><stageParams><featureType>HOG</featureType><boostType>GAB</boostType><height>32</height><minHitRate>9.9500000476837158e-01</minHitRate><width>32</width><maxFalseAlarm>1.0000000149011612e-01</maxFalseAlarm><stageParams><weightTrimRate>9.4999999999999996e-01</weightTrimRate><boostType>GAB</boostType><maxDepth>1</maxDepth><minHitRate>9.9500000476837158e-01</minHitRate><maxWeakCount>100</maxWeakCount></stageParams><maxFalseAlarm>2.0000000298023224e-01</maxFalseAlarm><featureParams><weightTrimRate>9.4999999999999996e-01</weightTrimRate><maxCatCount>0</maxCatCount><maxDepth>1</maxDepth><featSize>36</featSize></featureParams><maxWeakCount>100</maxWeakCount></stageParams><stageNum>8</stageNum><featureParams><stages><maxCatCount>0</maxCatCount><!-- stage 0 --><featSize>36</featSize></featureParams><_><stageNum>5</stageNum><maxWeakCount>2</maxWeakCount><stages><stageThreshold>-3.1767034530639648e-01</stageThreshold><!-- stage 0 --><weakClassifiers><_><_><maxWeakCount>3</maxWeakCount><internalNodes><stageThreshold>-9.3406349420547485e-01</stageThreshold>0 -1 34 1.4037833549082279e-02</internalNodes><weakClassifiers><leafValues><_>-9.7777777910232544e-01 8.0392158031463623e-01</leafValues></_><internalNodes><_>
0 -1 17 4.8831082880496979e-02</internalNodes> <internalNodes><leafValues>
0 -1 38 1.0892081074416637e-02</internalNodes>-8.9519649744033813e-01 8.3636361360549927e-01</leafValues></_><leafValues><_>-9.7785842418670654e-01 6.6010743379592896e-01</leafValues></_><internalNodes></weakClassifiers></_>
0 -1 23 3.7281963974237442e-02</internalNodes>

MATLAB2016a

検証

黄色の枠で囲まれたところがロボットと判断された。

実演

Pythonを使ってみる
Anacondをインストール
https://www.continuum.io/からダウンロード。
Windowsでも使えます。

Spyderを使うとMATLABな感じ。
NumPyとmatplotlibなどのライブラリーが有難い。

実演

カメラ画像から認識
図はSpyder画面
PythonからOpenCVライブラリーを呼び、PCのカメラでROBO-ONEポスターのロボットをリアルタイムで認識させてみた。

実演

まとめ
 MATLABのM-fileとPythonのコードは似ている。
 MATLABの画像処理関数と同じものがOpenCVにもある。
 MATLABのHMI環境は整っている。

 Pytho,OpenCVは不安、英文での情報が豊富だが・・

 企業の方にもこれから就職する方にもMATLAB+Pythonはお勧めです。
 ROBO-ONE用カスケード分類器が増えることを期待。
 さらなる高速で深層学習もROBO-ONE実装に期待。