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

The motion recognition from the sensor values for wearable terminal

The motion recognition from the sensor values for wearable terminal

Student WiP in ABC2016Springにて発表した内容のスライドです。

Arata Furukawa

March 12, 2016
Tweet

More Decks by Arata Furukawa

Other Decks in Technology

Transcript

  1. ウェアラブル端末のセンサ値から
    動きをリアルタイムに識別する
    ABC2016Spring Student WiP
    発表資料
    東海大学 理学部(進学予定)
    日本Androidの会 学生部 
    古川 新   

    View full-size slide

  2. コントローラとしてのウェアラブル端末

    View full-size slide

  3. 表1 主要なコンシューマ機周辺端末の内蔵センサ
    ※ 各メーカの公式情報を独自にリストアップしたものです。
    ※ 純正品の情報です。非純正品はこの通りでない可能性があります。
    端末名 センサ(公式情報引用)
    PS4専用 ワイヤレスコントローラー(DUALSHOCK®4) 6軸検出システム(3軸ジャイロ、
    3軸加速度)
    PS3専用 ワイヤレスコントローラ(DUALSHOCK®3) 6軸検出システム搭載
    Wii リモコンプラス モーションセンサー:傾きや
    動きの変化を検出(3軸)
    Wii U GamePad 加速度センサー、ジャイロセンサー、地磁気センサーの利用によるモー
    ションコントロール
    PlayStation®Vita(PCH-2000シリーズ) 6 軸検出システム(3 軸ジャイロ・
    3 軸加速度)、3 軸電 コンパス機能

    View full-size slide

  4. 表2 主要なウェアラブル端末の内蔵センサ
    端末名 センサー(公式情報引用)
    Apple Watch(各エディション共通) 心拍センサー、加速度センサー、ジャイロスコープ
    環境光センサー
    moto 360 Accelerometer, Ambient Light Sensor, Gyroscope, Vibration/Haptics engine
    LG G Watch Urbane 9軸センサー(ジャイロ/
    加速度/コンパス)気圧センサー、心拍センサー
    WSD-F 圧力(気圧/高度)センサー、 加速度センサー、 ジャイロセンサー、 方位(磁気)セン
    サー
    SmartWatch3 加速度センサー、ジャイロセンサー、磁気センサー、GPS、光センサー
    ASUS ZenWatch 2 6-Axis (A+G) with Sensor-hub
    ※ 各メーカの公式情報を独自にリストアップしたものです。

    View full-size slide

  5. 正拳突きx5 チョップx4

    View full-size slide

  6. リアルタイム識別の注意

    View full-size slide

  7. つまり…
    ① ② ③

    View full-size slide

  8. つまり…
    ① ② ③
    遅い

    View full-size slide

  9. その瞬間の特徴を識別する

    View full-size slide


  10. センサ値
    x
    動作
    y

    View full-size slide


  11. センサ値
    x
    動作(OHV)
    y
    int[3]
    [ a, b, c ]
    double[6]
    [ ax, ay, az, gx, gy, gz ]
    a : 正拳突きとチョップ以外
    b : 正拳突き
    c : チョップ

    View full-size slide

  12. センサ値
    x
    動作(OHV)
    y
    int[3]
    [ a, b, c ]
    double[6]
    [ ax, ay, az, gx, gy, gz ]
    a : 正拳突きとチョップ以外
    b : 正拳突き
    c : チョップ

    View full-size slide

  13. h = φ( X * W + b )

    View full-size slide

  14. h = φ( X * W + b )
    Neuron
    Activator
    ニューラルネットワーク

    View full-size slide

  15. 考案したニューラルネットワーク
    x
    n
    a
    n
    b
    n
    c
    y
    6 3
    h
    softmax
    W
    6x3
    b
    3

    View full-size slide

  16. 簡単なので
    手動学習してみた

    View full-size slide

  17. 正拳突き
    約80%
    チョップ
    約100%

    View full-size slide

  18. constexpr std::array< double, 6 > weight_ = { 1, 80, -40, -20, 1, 50 };
    constexpr double bias_ = -1000;
    constexpr std::array< double, 6 > weight_ = { 80, -30, 55, 0.1, 60, 30 };
    constexpr double bias_ = -1400;
    h
    b
    の重みとバイアス
    h
    c
    の重みとバイアス
    手動学習 コード抜粋(C++)

    View full-size slide

  19. ※正拳突き→10
     チョップ→20
     としてプロットしています

    View full-size slide

  20. 考案したディープニューラルネットワーク(3層)
    x h
    1
    h
    2
    h
    3
    y
    6 6x24 24x96 96x3 3
    LRelu LRelu Softmax

    View full-size slide

  21. つよさを実感するためグラフにしてみた

    View full-size slide

  22. W1 = tf.Variable(tf.truncated_normal([6, 24], stddev=0.1), name="weight1")
    b1 = tf.Variable(tf.constant(0.1, shape=[24]), name="bias1")
    h1 = leaky_relu(tf.matmul(x, W1) + b1)

    W2 = tf.Variable(tf.truncated_normal([24, 96], stddev=0.1), name="weight2")
    b2 = tf.Variable(tf.constant(0.1, shape=[96]), name="bias2")
    h2 = leaky_relu(tf.matmul(h1, W2) + b2)

    W3 = tf.Variable(tf.truncated_normal([96, 3], stddev=0.1), name="weight3")
    b3 = tf.Variable(tf.constant(0.1, shape=[3]), name="bias3")
    u = tf.nn.softmax(tf.matmul(h2, W3) + b3)
    cross_entropy = -tf.reduce_sum(y * tf.log(u))
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
    r = npr.randint(len(ix))
    feed = {x: ix[r].reshape((1,6)), y: iy[r].reshape((1,3))}
    sess.run(train, feed_dict=feed)
    Deep Learning コード抜粋(python)

    View full-size slide

  23. Deep Lerning 自己テスト結果
    学習回数 実施回数 平均正答率
    1000 10 92.0513%
    10000 10 96.1538%
    1000000 10 96.8947%

    View full-size slide

  24. ● 現在の単純なネットワークで分類クラスを増やしてどの程度まで精度を保てるのか
    ○ 今回の発表には間に合わず
    ○ 教師データの調達・ラベル付けが非常にしんどい
    (
    時間がかかる
    …)
    ○ 割と露骨な限界があると予測しているため精度を上げる案も同時に考えている
    ● 学習データを増やしネットワークを育てる
    ○ 明らかにデータが少ないが、教師データの作成に時間が
    (ry
    ● 情報量を増やす
    ○ 他のセンサの値
    ○ 加速度から得られる特徴情報(エッジやコーナなど)を意図的に与えてみる
    ● 時系列データを学習
    (
    および予測
    )
    できるネットワークの形成
    ○ 加速度などのセンサデータは時系列データ
    ○ 人間の動作は時系列データに可変長のパターンとして出現する

    NN

    DNN
    などの
    FFNN(Feed forward neural network)
    は可変長データを解析しづらい
    ○ 故に今回は、データのもつ時系列の因果関係は無視しその「瞬間」を固定長データとして扱った
    ■ 何かしらの方法で時系列学習を行えれば精度の向上が見込める
    精度の調査と向上

    View full-size slide

  25. Recurrent Neural Network(再帰型ニューラルネット)
    1.
    内部状態を持たせる方法
    (
    オートマトン
    )
    a.
    時間方向のグラフを持ち重みとバイアスを共有する
    i.
    同一データでも入力順によって反応が変わる
    ii. BPTT(Back propagation through time)
    1.
    誤差を時系列と逆方向にも 伝搬する
    iii. RTRL (Real Time Recurrent Learning)
    1.
    誤差を時系列方向にも伝搬する
    (
    オンライン処理向き
    )
    iv.
    重みの伝搬やノイズ、記憶の取捨選択など、問題が山積み
    b. ElmanN(
    中間層→中間層の結合を持つ
    )

    LSTM(Long short-term memory)
    など

    View full-size slide

  26. Recurrent Neural Network(再帰型ニューラルネット)
    2. LSM(Liquid state machine)
    a.
    データ入力と重み計算を分離する方法
    b.
    相互接続した中間層に時系列データを適用し、その後教師データに線形回帰する
    3.
    時間軸を持たせて
    FFNN
    に流し込んでしまう方法
    a. TDNN(Time delay neural network)
    i.
    時間軸を持たせる場合、長さの違いやずれを吸収する仕組みが必要
    ii.
    ディレイを中間層でスケールすることで差異を吸収する

    View full-size slide

  27. 参考文献
    TensorFlow 公式サイト
    https://www.tensorflow.org/
    Neural Network + Tensorflow 入門講座 / 丸山不二夫 先生
    http://www.slideshare.net/maruyama097/neural-network-tensorflow
    Recurrent Neural Networks / 得居 誠也 氏
    http://www.slideshare.net/beam2d/pfi-seminar-20141030rnn
    リカレントニューラルネットワークの概要と動作原理 / 竹田 卓也 氏
    http://wbawakate.jp/wp-content/uploads/2015/03/RNN%E3%83%95%E3%82%9A%E3%83%AC%E3%82%BB%
    E3%82%99%E3%83%B3.pdf

    View full-size slide