Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20180209 DroidKaigi2018 ActivityRecognition simulation

KAKKA
February 09, 2018

20180209 DroidKaigi2018 ActivityRecognition simulation

近年のAndroidデバイスには多くのセンサーが組み込まれるようになった。Googleはこれらのセンサーを活用してActivityRecognitionというユーザーの行動認識APIをAndroidフレームワークで提供した。
ユーザーの行動を認識することによって、アプリケーションプロバイダは適切なタイミングで適切な内容のコンテンツを提示することができるようになる。
例えば車を運転中であれば、車やドライブに関する情報である。

このActivityRecognitionを実用的に活用するためには、その認識精度が非常に重要になる。誤認識が発生するとユーザー離反の原因となり得る。また、ActivityRecognitionのエンジン自体はブラックボックスとなっているため、改善が難しい。

このセッションではActivityRecognitionの基本的な利用方法を説明し、現状の認識精度を調べた結果を報告する。さらに、複数のセンサーデータをシミュレーションし、精度向上のヒントとなる情報を探る。最後に実用的なActivityRecognitionの利用方法を説明する。

KAKKA

February 09, 2018
Tweet

More Decks by KAKKA

Other Decks in Technology

Transcript

  1. 複数センサーシミュレーションによ
    る行動認識
    (ActivityRecognition)解剖
    そして実用化
    DroidKaigi 2018
    2018/02/09 17:40- @Room1
    Drivemode, Inc.
    KAKKA (Nobuhisa Hirata)

    View Slide

  2. 目次
    Android ActivityRecognitionについて
    ● 基本的な使い方
    ● 特徴や注意点
    センサーデータを用いたActivityRecognitionシミュレーション
    ● 手法
    ● 結果
    ActivityRecognitionを用いた行動認識の実用化について

    View Slide

  3. KAKKA
    [email protected]_Blog

    View Slide

  4. ActivityRecognition

    View Slide

  5. Activity Recognition
    ユーザーの行動が認識できる

    View Slide

  6. Activity Recognitionの使い方
    パーミッション付与

    View Slide

  7. Activity Recognitionの使い方
    IntentServiceで検出されたActivityを受け取る

    View Slide

  8. Activity Recognitionの使い方
    IntentServiceで検出されたActivity(ユーザーの行動)を受け取る
    intent からActivityRecognitionResultを取得

    View Slide

  9. Activity Recognitionの使い方
    IntentServiceで検出されたActivity(ユーザーの行動)を受け取る
    最も可能性の高いActivityを取得

    View Slide

  10. Activity Recognitionの使い方
    IntentServiceで検出されたActivity(ユーザーの行動)を受け取る
    可能性のあるActivityのListを取得

    View Slide

  11. Activity Recognitionの使い方
    DetectedActivity
    type: 検出した行動タイプ (e.g. ON_FOOT)
    confidence: 信頼度スコア (0 to 100)

    View Slide

  12. Activity Recognitionの使い方
    ActivityRecognitionClientで認識リクエスト
    clientのインスタンス作成

    View Slide

  13. Activity Recognitionの使い方
    ActivityRecognitionClientで認識リクエスト
    認識結果受け取るためのPendingIntent作成

    View Slide

  14. Activity Recognitionの使い方
    ActivityRecognitionClientで認識リクエスト
    リクエスト実行(detectionIntervalMillis, pendingIntent)
    detectionIntervalMillisは0が最速。
    しかしAPI21からデバイスがパワーセーブモードのときに頻度が少なくなる。

    View Slide

  15. Activity Recognitionの使い方
    ActivityRecognitionClientで認識リクエスト

    View Slide

  16. Activity Recognitionの使い方
    IntentServiceで検出されたActivityを受け取る

    View Slide

  17. Activity Recognitionの特徴・注意点
    ON_FOOT
    歩いているときに検出
    かなり精度と頻度が高い
    歩きスマホでも、ポケットに入れてるときでも検出される
    WALKING, RUNNING
    名前の通り、歩いている時、走っている時に検出
    検出頻度は少ない
    ON_FOOTよりも具体的なActivity

    View Slide

  18. Activity Recognitionの特徴・注意点
    IN_VEHICLE
    何かしらの乗り物に乗っているときに検出
    車、電車、バス、飛行機など
    mostProbableActivityはUNKNOWNになることが多い
    スマホホルダーに固定している時、シートに放置している時、ポケットに入れてる時のいずれでも検
    出される
    昔はIN_VEHICLE_HOLDINGもあったが、今は削除されている
    ON_BICYCLE
    自転車に乗っている時に検出
    ホルダーに装着時に確認

    View Slide

  19. Activity Recognitionの特徴・注意点
    STILL
    スマホを静かなところに放置しているときに検出
    家の机の上、床など
    体が静止しているという条件ではポケットに入れているときでも検出される
    TILTING
    スマホを回転させている時に検出
    portrait - landscapeなど

    View Slide

  20. Activity Recognitionの特徴・注意点
    ON_FOOTを無理やり検出させる

    View Slide

  21. Activity Recognitionの特徴・注意点
    IN_VEHICLEを無理やり検出させる

    View Slide

  22. Activity Recognitionの特徴・注意点
    IN_VEHICLEを無理やり検出させる

    View Slide

  23. Activity Recognitionの特徴・注意点
    予想外のシチュエーションで誤検出がある
    実用化するにはそのまま使えない

    View Slide

  24. Activity Recognitionの特徴・注意点
    精度を改善する方法は?
    → うーん・・・
    位置情報使ってスピード測ればいい?近接センサーとか?
    → そもそもそれらはActivtyRecognitionに使われているの?
    ActivityRecognitionの中身どうなってるの?
    わからん!

    View Slide

  25. Activity Recognitionの特徴・注意点
    予めセンサーデータを集めて、
    各センサーごとに、端末に注入して
    シミュレーションすると
    何かわかるかもしれない

    View Slide

  26. ActivityRecognitionシミュレーション

    View Slide

  27. シミュレーション手順
    Androidエミュレーター
    センサーの値は何も動かないが、直接デー
    タを入力可能

    View Slide

  28. シミュレーション手順
    Androidエミュレーターのaccelerationセンサーに(x, y, z) = (0, 0, 0)が注入される

    View Slide

  29. シミュレーション手順

    View Slide

  30. シミュレーション手順
    各Activityを実際に行う
    &&
    ActivityRecognitionで認識結果を記録
    &&
    センサーデータ記録

    View Slide

  31. シミュレーション手順
    エミュレーターにセンサーデータを流し込む
    &&
    ActivityRecognitionで認識結果を記録

    View Slide

  32. シミュレーション手順
    どのセンサーを使うか
    TYPE_ACCELEROMETER:加速度。使いそう。
    TYPE_AMBIENT_TEMPERATURE:気温。使わなそう。
    TYPE_GRAVITY:重力。ACCELEROMETERで十分そう。
    TYPE_GYROSCOPE:角速度。微妙。
    TYPE_LIGHT:照度。ポケットに入れてるときも同じ結果だから使わなそう。
    TYPE_LINEAR_ACCELERATION:Monitoring acceleration along a single axis. 使わなそう。
    TYPE_MAGNETIC_FIELD:磁場。関係なさそう。
    TYPE_ORIENTATION:ACCELEROMETERやGYROSCOPEで十分そう。
    TYPE_PRESSURE:気圧。使わなそう。ハイキングみたいな
    Activityなら使うのか?
    TYPE_PROXIMITY:近接。ポケット入れてる時も同じ結果だから使わなそう。
    TYPE_RELATIVE_HUMIDITY:湿度。雨の日のランニングとか検出するには必要?今不要。
    TYPE_ROTATION_VECTOR:TILTINGには使うか?一旦使わない。
    TYPE_TEMPERATURE:デバイス温度。使わなそう

    View Slide

  33. シミュレーション手順
    どのセンサーを使うか
    TYPE_ACCELEROMETER
    TYPE_AMBIENT_TEMPERATURE
    TYPE_GRAVITY
    TYPE_GYROSCOPE
    TYPE_LIGHT
    TYPE_LINEAR_ACCELERATION
    TYPE_MAGNETIC_FIELD
    TYPE_ORIENTATION
    TYPE_PRESSURE
    TYPE_PROXIMITY
    TYPE_RELATIVE_HUMIDITY
    TYPE_ROTATION_VECTOR
    TYPE_TEMPERATURE
    とりあえずこの2つを使ってみて、精度悪そうなら他のセンサーも増やしてみる
    精度良さそうならさらにセンサーを絞ってみる

    View Slide

  34. シミュレーション
    ON_FOOT
    実機でのActivityRecognition結果

    View Slide

  35. シミュレーション
    ON_FOOT
    シミュレーションでのActivityRecognition結果

    View Slide

  36. シミュレーション
    ON_FOOT
    Activity正解率 - 100%
    平均信頼度 96.83 97.17

    View Slide

  37. シミュレーション
    ON_FOOT
    Activity正解率 - 100%
    平均信頼度 96.83 97.17
    accelerationとgyroscopeだけですでに完璧な精度

    View Slide

  38. シミュレーション
    ON_FOOT
    accelerationのみを用いたシミュレーションでの
    ActivityRecognition結果

    View Slide

  39. シミュレーション
    ON_FOOT
    Activity正解率 - 100% 100%
    平均信頼度 96.83 97.17 97.33
    実機 センサー2つ accelerationのみ

    View Slide

  40. シミュレーション
    ON_FOOT
    Activity正解率 - 100% 100%
    平均信頼度 96.83 97.17 97.33
    実機 センサー2つ accelerationのみ
    accelerationだけで完璧な精度

    View Slide

  41. シミュレーション
    IN_VEHICLE
    実機でのActivityRecognition結果

    View Slide

  42. シミュレーション
    IN_VEHICLE
    accelerationシミュレーションでのActivityRecognition結果

    View Slide

  43. シミュレーション
    IN_VEHICLE
    Activity正解率 - 100%
    平均信頼度 90.8 90.2

    View Slide

  44. シミュレーション
    IN_VEHICLE
    Activity正解率 - 100%
    平均信頼度 90.8 90.2
    accelerationだけで完璧な精度

    View Slide

  45. シミュレーション結果から言えること
    ● ActivityRecognitionにおいて、センサーはほぼaccelerationを使っている
    ○ 他のActivity(TILTING, ON_BICYCLE, WALKING, RUNNING)は、追加検証して確かめる必要が
    ある
    ● 位置情報やその他のセンサーの影響は少ない
    ○ エミュレータに位置情報を与えていないので、位置情報を ONにしていたら精度があがるとは考え
    にくい
    ● ActivityRecognitionは、accelerationのデータから予測できる実際のユーザーの行動のヒント
    と捉えるべき
    ○ 他のセンサーを組み合わせると、精度の高いユーザー行動検出が可能

    View Slide

  46. ActivityRecognitionを実用化するために
    車に乗っていて、スマホはホルダーにセットしている状態を検出

    View Slide

  47. ActivityRecognitionを実用化するために
    車に乗っていて、スマホはホルダーにセットしている状態を検出
    ActivityRecognitionでIN_VEHICLEを検出
    車かバスか電車か飛行機に乗っているか
    ドラムを叩いているか
    机を叩いていて
    ポケットにあるかないか
    位置情報使ってスピードを計測
    車かバスに乗っていて
    ポケットにあるかないか
    proximityセンサで離れていることを確認 車かバスに乗っていて
    ポケットに入ってない

    View Slide

  48. ActivityRecognitionを実用化するために
    車に乗っていて、スマホはホルダーにセットしている状態を検出?

    View Slide

  49. ActivityRecognitionを実用化するために
    車に乗っていて、スマホはホルダーにセットしている状態を検出
    Super rare case!

    View Slide

  50. ActivityRecognitionを実用化するために
    車に乗っていて、スマホはホルダーにセットしている状態を検出?

    View Slide

  51. ActivityRecognitionを実用化するために
    車に乗っていて、スマホはホルダーにセットしている状態を検出?
    Super rare case!

    View Slide

  52. ActivityRecognitionを実用化するために
    歩きスマホの状態を検出

    View Slide

  53. ActivityRecognitionを実用化するために
    歩きスマホの状態を検出
    ActivityRecognitionでON_FOOTを検出
    歩いているか
    スマホをリズミカルに振っていて
    ポケットに入っているかいないか
    画面を見ているか見ていないか
    proximityセンサで離れていることを確認
    歩いていて
    ポケットに入っていなくて
    画面を見ているか見ていないか
    gravity(orientation)を確認
    歩いていて
    ポケットに入っていなくて
    画面を見ている
    位置情報でスピードをチェック
    歩いていて
    ポケットに入っているかいないか
    画面を見ているか見ていないか

    View Slide

  54. ActivityRecognitionを実用化するために
    歩きスマホの状態を検出?

    View Slide

  55. ActivityRecognitionを実用化するために
    歩きスマホの状態を検出?
    Super rare case!

    View Slide

  56. まとめ
    ActivityRecognitionでは、accelerationをメインに使って行動検出をしていそうだ
    ActivityRecognitionは現状、誤検出がかなり多い
    ActivityRecognitionの検出結果をヒントにして、様々な情報からユーザーの行動認識の精度が高
    められる

    View Slide