14
Jubatusを利用した運転手の状況推定 2016年6月18日 NTT ソフトウェアイノベーションセンタ 熊崎 宏樹

Jubatusを利用した運転手の状況推定

Embed Size (px)

Citation preview

Jubatusを利用した運転手の状況推定

2016年6月18日

NTT ソフトウェアイノベーションセンタ

熊崎 宏樹

1 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• Jubatusを用いた画像分析システムを作りたい

• Jubatusらしさが活かせてる物にしたい

–末端に近い所で機械学習ができる(エッジヘビー)

• 素早い応答と通信コスト削減の両立

• 自動車の運転手の状態を推定するシステムを試作してみる

–居眠り・よそ見・スマホ運転などを監視する需要があるのでは

モチベーション

2 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

描いた絵

車内カメラ

車内サーバ

・エッジで計算する事でネットワーク・計算効率を最適化 ・車の通信回線をより効果的に使えるソフトウェアとして売り込めるのでは?

訴求ポイント

3 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• Brain4cars: http://brain4cars.com/

–車載カメラで運転手と道路の情報をニューラルネットに投げ込んで運転手の行動を予測しよう

先行研究

4 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• データセット公開してる(github)

– Dropboxに16GBっておい…

Brain4cars

5 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• Rubyで専用のダウンロードツール書いた – 個々のファイルは数秒の長さの運転手映像

– 画像の方が取り回しやすかったな…

• 動画群の入ったディレクトリから画像ファイル切り出して羅列するRuby書いた – 車が曲がる方向のタグ付けしかされてない…

• 画像を次々表示して数字キーでタグ付けするRuby書いた – sinatra+Javascriptでやっつけ仕事

– 人にも協力してもらって1000枚ほどタグ付け

• 後輩「くまさんなんでも屋ですねw」

• 僕「くっ」

Brain4cars

6 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

得られた画像

なんか食べてる…

7 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• Jubatusはbinary_featureとして任意のバイナリ列から特徴抽出が可能だが、デフォルトの特徴抽出アルゴリズムが存在しない

• プラグインで実装可能なのでC++で記述する

• dlibというヨサゲなオープンソースライブラリがあったので使ってみる事にした。

画像からの特徴抽出

8 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• http://dlib.net

• Boostライセンスで提供されるC++用ライブラリ

–画像処理がメイン

• 品揃えはOpenCVとも違うけど珍しい物がある

–画像以外の処理も入ってる

• 顔のランドマーク検出というアルゴリズムが学習済みデータセットと共に提供されてる。

画像からの特徴抽出

9 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• 顔画像から、68個の頂点を抽出する

dlib: face landmark detection

10 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

開発の実体

• 運転手が「前を向いている」「目を閉じている」「横を向いている」「下を向いている」のどの状況かをJubatusによって判定させるPythonクライアントプログラムを作成

• 二次元上の座標点が68点得られるので、x軸y軸で136次元ベクトルが得られる。

• 顔画像の位置を差し引きサイズで割り、顔画像上での相対座標へと正規化

• Jubatusはclassifierを利用し、線形分類器とkNN分類器を試して精度の良い方を採用

dlib

プラグイン 0.3 0.41 0.22 0.21 0.82 0.99 0.82 0.51 . . .

136次元ベクトル

学習

RPC

11 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

• dlibのlandmarkに放り込んだ結果をadd_feature()するだけの簡単なコード

–正味60行ぐらい

Jubatusプラグインの実装

12 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

細かな工夫

• 顔のサイズを1へ正規化

• 顔の矩形の左上ポジションを(0, 0)へ移動

• 高速化の為、今回のタスクに関係ない顔検出は先に行って保存した

• 顔検出としていまいちっぽい不鮮明な画像は教師から消去した

13 Copyright©2016 NTT corp. All Rights Reserved.

NTT Highly Confidential

開発状況・分析結果

一次調査結果 ・「目を閉じている」「下を向いている」「横を向いている」の画像360件でk=10でのk交叉検定をしたところ、正解率90% ・「前を向いている」の画像を743件足した所、正解率72% ・顔パーツ検出部分が重くて1fps程度しか出ない。 ・kNN分類器の方が線形分類器よりおよそ10%ほど好成績

考察 ・前を向いている画像の中にノイズ(教師ラベル振り間違い)が割とあった ・ラベル毎の画像の件数に大きな偏りがある(本当は揃えるべき) ・顔のパーツ検出に所与の学習済みモデルを未チューニングで使っている ・そもそもラベルをまだ振ってない教師データがまだ1000枚以上ある

結論 ・Jubatusを用いて運転手の状態を推定する事はある程度可能。 ・精度においてはまだ改善の余地がある。 ・これだけ気軽に高度なシステムを組めるJubatusはやはり便利。