Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

表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 ※ 各メーカの公式情報を独自にリストアップしたものです。

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

正拳突きx5 チョップx4

Slide 7

Slide 7 text

リアルタイム識別の注意

Slide 8

Slide 8 text

つまり… ① ② ③

Slide 9

Slide 9 text

つまり… ① ② ③ 遅い

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

? センサ値 x 動作 y

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

h = φ( X * W + b )

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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++)

Slide 25

Slide 25 text

TensorFlow

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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)

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

WiP

Slide 36

Slide 36 text

● 現在の単純なネットワークで分類クラスを増やしてどの程度まで精度を保てるのか ○ 今回の発表には間に合わず ○ 教師データの調達・ラベル付けが非常にしんどい ( 時間がかかる …) ○ 割と露骨な限界があると予測しているため精度を上げる案も同時に考えている ● 学習データを増やしネットワークを育てる ○ 明らかにデータが少ないが、教師データの作成に時間が (ry ● 情報量を増やす ○ 他のセンサの値 ○ 加速度から得られる特徴情報(エッジやコーナなど)を意図的に与えてみる ● 時系列データを学習 ( および予測 ) できるネットワークの形成 ○ 加速度などのセンサデータは時系列データ ○ 人間の動作は時系列データに可変長のパターンとして出現する ○ NN 、 DNN などの FFNN(Feed forward neural network) は可変長データを解析しづらい ○ 故に今回は、データのもつ時系列の因果関係は無視しその「瞬間」を固定長データとして扱った ■ 何かしらの方法で時系列学習を行えれば精度の向上が見込める 精度の調査と向上

Slide 37

Slide 37 text

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) など

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

参考文献 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