9

加速度計のデータによって、歩行ノイズとダブルタップの違いを認識する必要があるAndroidデバイス用のアプリケーションを構築しています。私はニューラルネットワークを使用してこの問題を解決しようとしています。

最初はかなりうまくいき、立ったり座ったり、ゆっくりと歩き回ったりするなどのノイズからタップを認識するように教えました。しかし、通常の歩行に関しては、ノイズデータの大部分を供給したにもかかわらず、学習するようには見えませんでした。

私の質問:私のアプローチに重大な欠陥はありますか?問題はデータの不足に基づいていますか?

ネットワーク

25入力1出力の多層パーセプトロンを選択しました。これはバックプロパゲーションでトレーニングしています。入力は20msごとの加速度の変化であり、出力範囲は-1(タップなしの場合)から1(タップの場合)です。私はそこにある隠された入力のほとんどすべての構築を試みましたが、3-10で最も幸運でした。

トレーニングとJavaへのエクスポートにNeurophのeasyNeuronsを使用しています。

データ

私の合計トレーニングデータは、約50個のダブルタップと約3kのノイズです。しかし、私はまた、ダブルタップに比例した量のノイズでそれを訓練しようとしました。

データは次のようになります(+ 10から-10の範囲):

ダブルタップで座る:ダブルタップに座って、決定するのはかなり簡単です。


早歩き: 速く歩くとダブルタッピング、それほど簡単ではありません

繰り返しになりますが、ここでの私のアプローチに重大な欠陥はありますか?ウォーキングとダブルタッピングの違いを認識するために、より多くのデータが必要ですか?他のヒントはありますか?

アップデート

さて、多くの調整を行った後、私たちは、活発な散歩をしながらダブルタップを認識できるようになるまで、本質的な問題を煮詰めました。座って定期的に(社内で)歩くことで、かなりうまく解決できます。

活発な散歩 活発な散歩

これは、私が最初に歩いてから停止し、静止してから、歩いて、歩いている間に5回のダブルタップを行ったテストデータです。

生データに興味のある方は、こちらから最新の(早歩き)データにリンクしました

4

3 に答える 3

4

ニューラルネットワークの使用を主張しますか?そうでない場合は、ここにアイデアがあります:

0.5秒のウィンドウを取り、曲線の下の領域を検討します(または、信号が離散的であるため、各センサー読み取り値の絶対値の合計-添付画像の赤い領域)。おそらく、ユーザーが歩いているときはその合計が高く、座っているときやタップしているときははるかに低いことがわかります。ユーザーが歩いているときに特定のウィンドウが表示されると見なすしきい値を設定できます。または、データにラベルを付けているので、任意の二項分類器をトレーニングして、歩行と非歩行を区別できます。

線のギザギザなど、信号の他の機能を考慮することで、システムを改善できる可能性があります。電話がテーブルの上に座っている場合、ラインはほぼフラットになります。ユーザーが入力している場合、線はフラットになり、時々スパイクが表示されます。彼らが歩いていると、正弦波のようなものが表示されます。

ここに画像の説明を入力してください

于 2012-06-26T13:24:49.923 に答える
3

「早歩き」と「早歩き+ダブルタッピング」の信号は、加速度計のデータだけを使用して区別するには類似しすぎている可能性があると考えましたか?一定以上の精度を達成できない場合があります。

そうでなければ、ニューラルネットワークはおそらくあなたのデータにとって良い選択であり、それでもそれらからより良いパフォーマンスを得ることが可能かもしれません。

この非常に便利な論文(http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf)では、データセットを白くして、平均がゼロで単位共分散になるようにすることを推奨しています。

また、問題は分類の問題であるため、RMSEではなくクロスエントロピー基準(http://arxiv.org/pdf/1103.0398v1.pdf)を使用してネットワークをトレーニングしていることを確認する必要があります。(Neurophがクロスエントロピーをサポートしているかどうかはわかりません。)

他のポスターが示唆しているように、試すことができるもう1つの比較的簡単なことは、データを変換することです。FFTまたはDCTを使用してデータを周波数領域に変換することは、時系列分類では比較的標準的です。

また、さまざまなサイズのウィンドウでネットワークをトレーニングし、結果を平均化することもできます。

より難しいNNアーキテクチャを試してみたい場合は、Time-Delay-Neural-Network(この論文ではグーグルで検索してください)を見てください。これは、その構造で複数のウィンドウを考慮に入れています。Torchライブラリ(http://www.torch.ch/)の1つを使用してこれを実装するのは比較的簡単ですが、ネットワークをAndroid環境にエクスポートするのは難しい場合があります。

最後に、時系列データで分類パフォーマンスを向上させる別の方法は、隣接するラベル間の関係を考慮することです。条件付き確率場(http://code.google.com/p/cnf/-注:私はこのコードを使用したことがありません)は、ニューラルネットワークを条件付き確率場に統合することによってこれを行います。データは、より良い仕事をするかもしれません。

于 2012-06-27T17:03:25.327 に答える
1

おそらくうまくいくのは、最初にフーリエ変換を使用してデータをフィルタリングすることです。ウォーキングには振幅のような副鼻腔があり、ダブルタップは変換結果で異なる周波数として際立っています。ニューラルネットワークは、余分な頻度(ダブルタブの頻度)があるため、データにダブルタブが含まれているかどうかを判断できると思います。いくつかの質問が残っています:

  1. データのサンプルはどのくらいの期間である必要がありますか?
  2. あなたの電話はそれがする必要があるすべての仕事をすることができますか、それは十分な処理能力を持っていますか?

このためにGPUの使用を検討することもできます。

もう1つのオプションは、フーリエ出力と古き良きファジーロジックを使用することです。

これは楽しそうですね...

于 2013-02-20T13:16:28.377 に答える