Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Red Neural para reconocer el patrón del acelerómetro

Estoy construyendo una aplicación para dispositivos Android que requiere reconocer, por los datos del acelerómetro, la diferencia entre el ruido de caminar y el doble golpeo. Estoy tratando de resolver este problema utilizando Redes Neuronales.

Al principio, fue bastante bien, enseñándolo a reconocer los golpes del ruido, como levantarse / sentarse y caminar a un ritmo más lento. Pero cuando se trata de caminar normal nunca parecía aprender, a pesar de que lo alimentó con una gran proporción de los datos de ruido.

Mi pregunta : ¿Hay algún defecto grave en mi enfoque? ¿Es el problema basado en la falta de datos?

La red

He elegido un 25 de entrada de 1 salida multi-capa perceptron, que estoy entrenando con backpropagation. La entrada es los cambios en la aceleración cada 20ms y los rangos de salida de -1 (para no-tap) a 1 (para tap). He intentado prácticamente cada constallation de insumos ocultos que hay, pero tuve más suerte con 3 – 10.

Estoy usando easyNeurons de Neuroph para el entrenamiento y la exportación a Java.

Los datos

Mi total de datos de entrenamiento es de aproximadamente 50 piezas de grifos dobles y cerca de 3k de ruido. Pero también he tratado de entrenar con cantidades proporcionales de ruido a los grifos dobles.

Los datos parecen esto (oscila entre +10 y -10):

Grifos dobles sentados: Sentando grifos dobles, bastante fácil de determinar.


Caminando rápido: Caminata rápida y doble tapping, no es tan fácil

Así que para reiterar mis preguntas: ¿Hay algún defecto grave en mi enfoque aquí? ¿Necesito más datos para reconocer la diferencia entre el caminar y el doble golpeteo? ¿Alguna otra sugerencia?

Actualizar

Ok así que después de mucho ajuste hemos hervido el problema esencial hasta poder reconocer grifos dobles mientras tomamos un paseo enérgico. Sentado y regular (in-house) caminar podemos resolver bastante bien.

Caminar a paso ligero Caminar a paso ligero

Así que esto es algunos datos de prueba de mí primero caminar luego detenerse, parado, luego caminar y hacer 5 grifos dobles mientras estoy caminando.

Si alguien está interesado en los datos sin procesar, lo relacioné con los datos más recientes (caminata rápida) aquí

3 Solutions collect form web for “Red Neural para reconocer el patrón del acelerómetro”

¿Ha considerado que las señales de "caminar rápido" y "caminar rápido + doble tapping" podrían ser demasiado similares para diferenciar usando sólo datos de acelerómetro? Puede que simplemente no sea posible alcanzar la precisión por encima de cierta cantidad.

De lo contrario, las redes neuronales son probablemente una buena opción para sus datos, y todavía puede ser posible obtener un mejor rendimiento de ellos.

Este artículo muy útil (http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf) recomienda que blanquee su conjunto de datos de manera que tenga una media de cero y covarianza de unidades.

Además, dado que su problema es un problema de clasificación, debe asegurarse de que está entrenando su red utilizando un criterio de entropía cruzada (http://arxiv.org/pdf/1103.0398v1.pdf) en lugar de RMSE. (No tengo ni idea si Neuroph apoya la entropía cruzada o no.)

Otra cosa relativamente simple que puedes intentar, como otros carteles sugeridos, es transformar tus datos. El uso de una FFT o DCT para transformar sus datos en el dominio de la frecuencia es relativamente estándar para la clasificación de series de tiempo.

También puede probar las redes de formación en diferentes ventanas de tamaño y el promedio de los resultados.

Si desea probar algunas arquitecturas NN más difíciles, puede mirar la Red Neural de Retardo de Tiempo (sólo google esto para el papel), que tiene varias ventanas en cuenta en su estructura. Debe ser relativamente sencillo utilizar una de las bibliotecas de la antorcha (http://www.torch.ch/) para implementar esto, pero puede ser difícil exportar la red a un entorno de Android.

Finalmente, otro método para obtener un mejor rendimiento de clasificación en datos de series de tiempo es considerar las relaciones entre etiquetas adyacentes. Los campos neuronales condicionales (http://code.google.com/p/cnf/ – nota: nunca he usado este código) hacen esto integrando redes neuronales en campos aleatorios condicionales y dependiendo de los patrones de comportamiento en su Datos, puede hacer un mejor trabajo.

¿Insiste en usar una red neuronal? Si no, aquí está una idea:

Tome una ventana de 0.5 segundos y considere el área debajo de la curva (o ya que su señal es discreta, la suma de los valores absolutos de cada sensor que lee – el área roja en la imagen adjunta). Probablemente encontrará que esa suma es alta cuando el usuario está caminando y mucho más bajo cuando están sentados y / o tocando. Puede establecer un umbral por encima del cual se considera que una ventana determinada se debe tomar mientras el usuario está caminando. Como alternativa, ya que ha etiquetado datos, puede entrenar a cualquier clasificador binario para diferenciar entre caminar y no caminar.

Probablemente puede mejorar su sistema considerando otras características de la señal, como por ejemplo, la forma de la línea es irregular. Si el teléfono está sentado sobre una mesa, la línea será casi plana. Si el usuario está escribiendo, la línea será algo plana y verá un pico de vez en cuando. Si están caminando, usted verá algo como una onda senoidal.

Introduzca aquí la descripción de la imagen

Lo que probablemente funcionaría es filtrar los datos usando una transformada de Fourier primero. Caminar tiene un seno como la amplitud, sus grifos dobles se destacan en la transformación de resultados como una frecuencia diferente. Supongo que una red neuronal puede determinar si los datos contienen las pestañas dobles, ya que tiene la frecuencia extra (la frecuencia de doble pestaña). Quedan algunas preguntas:

  1. ¿Cuánto tiempo debe ser la muestra de datos?
  2. ¿Puede su teléfono hacer todo el trabajo que necesita hacer, tiene suficiente potencia de procesamiento?

Es posible que incluso desee considerar el uso de la GPU para esto.

Otra opción es utilizar la salida de Fourier y alguna buena vieja lógica difusa .

Esto suena divertido …

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.