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

The motion recognition from the sensor values ...

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. 表1 主要なコンシューマ機周辺端末の内蔵センサ ※ 各メーカの公式情報を独自にリストアップしたものです。 ※ 純正品の情報です。非純正品はこの通りでない可能性があります。 端末名 センサ(公式情報引用) PS4専用 ワイヤレスコントローラー(DUALSHOCK®4)

    6軸検出システム(3軸ジャイロ、 3軸加速度) PS3専用 ワイヤレスコントローラ(DUALSHOCK®3) 6軸検出システム搭載 Wii リモコンプラス モーションセンサー:傾きや 動きの変化を検出(3軸) Wii U GamePad 加速度センサー、ジャイロセンサー、地磁気センサーの利用によるモー ションコントロール PlayStation®Vita(PCH-2000シリーズ) 6 軸検出システム(3 軸ジャイロ・ 3 軸加速度)、3 軸電 コンパス機能
  2. 表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 ※ 各メーカの公式情報を独自にリストアップしたものです。
  3. ? センサ値 x 動作(OHV) y int[3] [ a, b, c

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

    double[6] [ ax, ay, az, gx, gy, gz ] a : 正拳突きとチョップ以外 b : 正拳突き c : チョップ
  5. h = φ( X * W + b ) Neuron

    Activator ニューラルネットワーク
  6. 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++)
  7. 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)
  8. WiP

  9. • 現在の単純なネットワークで分類クラスを増やしてどの程度まで精度を保てるのか ◦ 今回の発表には間に合わず ◦ 教師データの調達・ラベル付けが非常にしんどい ( 時間がかかる …) ◦

    割と露骨な限界があると予測しているため精度を上げる案も同時に考えている • 学習データを増やしネットワークを育てる ◦ 明らかにデータが少ないが、教師データの作成に時間が (ry • 情報量を増やす ◦ 他のセンサの値 ◦ 加速度から得られる特徴情報(エッジやコーナなど)を意図的に与えてみる • 時系列データを学習 ( および予測 ) できるネットワークの形成 ◦ 加速度などのセンサデータは時系列データ ◦ 人間の動作は時系列データに可変長のパターンとして出現する ◦ NN 、 DNN などの FFNN(Feed forward neural network) は可変長データを解析しづらい ◦ 故に今回は、データのもつ時系列の因果関係は無視しその「瞬間」を固定長データとして扱った ▪ 何かしらの方法で時系列学習を行えれば精度の向上が見込める 精度の調査と向上
  10. 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) など
  11. Recurrent Neural Network(再帰型ニューラルネット) 2. LSM(Liquid state machine) a. データ入力と重み計算を分離する方法 b.

    相互接続した中間層に時系列データを適用し、その後教師データに線形回帰する 3. 時間軸を持たせて FFNN に流し込んでしまう方法 a. TDNN(Time delay neural network) i. 時間軸を持たせる場合、長さの違いやずれを吸収する仕組みが必要 ii. ディレイを中間層でスケールすることで差異を吸収する
  12. 参考文献 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