2016-05-09 23 views
4

私は、加速度計を備えたARM cortex-m0マイクロコントローラ(Freedom-KL25Z)を使用して人間の活動を検出(分類)するプロジェクトを行っています。私は機械学習を使ってユーザーの活動を予測しようと考えています。組み込みシステムで機械学習アルゴリズムを使用するにはどうすればよいですか?

問題は、cortex-m0はトレーニングやアルゴリズムの予測ができないため、データを収集し、コンピュータでトレーニングしてから、何とか埋め込む必要があります。実際には分かりませんどうやってするの。

私はインターネットで、重みの行列を生成してマイクロコントローラに埋め込むことができると言っていましたので、この関数で提供するデータに基づいて何かを予測する簡単な関数になります。それは正しい方法でしょうか?

とにかく私の質問は、どのように私はマイクロコントローラの分類アルゴリズムを組み込むことができますか?

私は皆さんが私を助け、いくつかの指導をしてくれることを願っています。私はここで迷っています。

ありがとうございます。

答えて

2

あなたのハードウェアによっては制限があると思われます。もう少し強力なものを手に入れたいと思うかもしれません。あなたのプロジェクトでは、ARMのMシリーズプロセッサを選択しました。これはもっともシンプルなプラットフォームであり、あなたがしようとしている処理の種類に適していません。 ARMは、以下の3つの基本的な分類があります。

  1. M - マイクロコントローラ
  2. R - リアルタイム
  3. A - アプリケーションを
  4. あなたはこれらの複雑なため、強力なハードウェアサポートを持っている何かを取得したい

計算。あなたは出発点がこれのためのAシリーズでなければなりません。浮動小数点演算を行う必要がある場合は、Aシリーズから始めて、おそらくNEON-FPUで取得する必要があります。

TIのディスカバリーシリーズは、ラズベリーパイ(少なくとも開発用部品)を使用するのに適した場所ですか?

しかし、あなたがM0の使用を主張するなら、あなたはROS-Cのような軽量のものを使用してそれを取り除くことができると思います。私はそれを行うことができるROSのパッケージがあることを知っていますが、主にロボット工学のためにあなたがしていることにそれを適応させることができるかもしれません。

Dependency Free ROS

Neural Networks and Machine Learning with ROS

+0

こんにちはStevieV、私は全く同意しますが、実際には私のプロジェクトは低コストのウェアラブルデバイスになることを意図しているので、cortex-m0やarduino nanoのようなかなり単純なハードウェアでなければなりません。 アイデアは、コンピュータ(トレーニングとか)で処理を行った後、あなたは私が何を意味するか知っていれば、マイクロでは既に訓練されたデータを扱うことができ、いくつかの機能を埋め込むことになります。 –

+0

@RenanFontelesさて、あなたはそれで機械学習をするのに苦労するかもしれません。あなたのソフトウェアは確かにより多くの作業をしなければなりません。なぜCortex-Aシリーズデバイスは低価格のウェアラブルではありませんか? – Snoopy

+0

実際、それは正直なところ、私は資源の乏しいところです。このプロジェクトを終了するには、皮質-m0と1ヶ月しかありません。 (ちなみに、幽☆遊☆白書ニースプロフィール画像、いまいましいちょうど私の思春期を思い出させる) –

4

私は手でのためのヒューリスティックを開発する苦労を持っていた問題を解決するために自分自身をこのことについて考えてきました。

あなた自身の機械学習方法を書く必要があります。なぜなら、私が知る限り、ローエンドMCUに適した機械学習ライブラリがないからです。

問題の程度によっては、ローエンドのMCUでうまく動作する単純な機械学習アルゴリズムを開発してトレーニングすることが可能な場合があります。結局のところ、古い/より単純な機械学習方法のいくつかは、同様の制約を有するハードウェア上で満足のいく結果を伴って使用されていた。

極めて一般的に、これは私がこれをやっていいと思う方法です:

  1. (UART、SDカード経由、またはあなたが利用可能なあらゆる手段)PCにデータを(ラベル)を取得します。
  2. データと実験と機械学習ツールキット(scikit-学び、WEKA、vowpalのwabbit、など)。既成の方法が、前進する前に満足のいく結果を出すことができることを確認してください。
  3. フィーチャエンジニアリングと選択の実験。リソースを節約できる最小のフィーチャセットを取得してください。
  4. 組み込みシステムで最終的に使用される独自の機械学習方法を記述してください。私はおそらくパーセプトロンやディシジョンツリーを選ぶでしょう。なぜならこれらは必ずしも多くのメモリを必要としないからです。 FPUがないので、整数と固定小数点演算のみを使用します。
  5. 通常のトレーニング手順を実行します。私。最高のチューニングパラメータ、整数ビット幅、基数の位置など
  6. ラン開催アウトテストセットの最終的な訓練を受けた予測因子を見つけるために、クロスバリデーションを使用しています。
  7. あなたの訓練を受けた予測因子の性能はMCUへのあなたの関連するコード(予測を計算コード)とあなたが訓練されたモデル(例えば重み)を移動し、テストセットに良好であった場合。モデル/重みは変化しないので、それらをフラッシュ(例えば、const配列として)に格納することができる。