Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Reconocimiento de Actividad Humana Modelo Simulink para la Implementación de Smartphone

En este ejemplo se muestra cómo preparar un modelo de ® Simulink que clasifica la actividad humana en función de las señales del sensor del smartphone para la generación de código y la implementación de teléfonos inteligentes. En el ejemplo se proporcionan dos modelos de Simulink que están listos para su implementación en un dispositivo Android y un dispositivo iOS. Después de instalar el paquete de soporte necesario para un dispositivo de destino, entrene el modelo de clasificación e implemente el modelo de Simulink en el dispositivo.

Requisitos previos

Los paquetes de soporte de Simulink son necesarios para los modelos de Simulink en este ejemplo.

Cargar conjunto de datos de ejemplo

Cargue el conjunto de datos.humanactivity

load humanactivity

El conjunto de datos contiene 24.075 observaciones de cinco actividades humanas físicas diferentes:humanactivity Sentado, de pie, caminando, corriendo y bailando. Cada observación tiene 60 características extraídas de los datos de aceleración medidos por sensores de acelerómetro de teléfonos inteligentes. El conjunto de datos contiene las siguientes variables:

  • — Vector de respuesta que contiene los datos de actividad en enteros:actid 1, 2, 3, 4 y 5 representando Sentado, De pie, Caminando, Corriendo y Bailando, respectivamente

  • — Nombres de actividad correspondientes a los documentos de uso enteros de actividadactnames

  • — Matriz de características de 60 características para 24.075 observacionesfeat

  • — Etiquetas de las 60 funcionesfeatlabels

La aplicación Sensor HAR (reconocimiento de actividad humana) se utilizó para crear el conjunto de datos.[1] (Statistics and Machine Learning Toolbox)humanactivity Al medir los datos de aceleración sin procesar con esta aplicación, una persona colocó un teléfono inteligente en un bolsillo para que el teléfono inteligente estaba al revés y la pantalla se enfrentaba hacia la persona. A continuación, el software calibraba los datos sin procesar medidos en consecuencia y extrajo las 60 características de los datos calibrados. Para obtener más información sobre la calibración y la extracción de funciones, consulte y , respectivamente.[2] (Statistics and Machine Learning Toolbox)[3] (Statistics and Machine Learning Toolbox) Los modelos de Simulink descritos más adelante también utilizan los datos de aceleración sin procesar e incluyen bloques para la calibración y la extracción de características.

Preparar datos

Este ejemplo utiliza el 90% de las observaciones para entrenar un modelo que clasifica los cinco tipos de actividades humanas y el 10% de las observaciones para validar el modelo entrenado. Se utiliza para especificar un 10% de retención para el conjunto de pruebas.cvpartition

rng('default') % For reproducibility Partition = cvpartition(actid,'Holdout',0.10); trainingInds = training(Partition); % Indices for the training set XTrain = feat(trainingInds,:); YTrain = actid(trainingInds); testInds = test(Partition); % Indices for the test set XTest = feat(testInds,:); YTest = actid(testInds);

Convierta la matriz de características y el vector de respuesta en una tabla para cargar el conjunto de datos de entrenamiento en la aplicación Classification Learner.XTrainYTrain

tTrain = array2table([XTrain YTrain]);

Especifique el nombre de la variable para cada columna de la tabla.

tTrain.Properties.VariableNames = [featlabels' 'Activities'];

Tren Boosted Tree Ensemble usando la aplicación de aprendizaje de clasificación

Entrene un modelo de clasificación mediante la aplicación Classification Learner. Para abrir la aplicación Classification Learner, escriba en la línea de comandos.classificationLearner Como alternativa, haga clic en la pestaña y haga clic en la flecha situada a la derecha de la sección para abrir la galería.AplicacionesAplicaciones A continuación, en , haga clic en .Aprendizaje automáticoAprendiz de Clasificación

En la pestaña, en la sección, haga clic y seleccione .Aprendiz de ClasificaciónArchivoNueva sesiónDesde el espacio de trabajo

En el cuadro de diálogo Nueva sesión , haga clic en la flecha para , y, a continuación, seleccione la tabla .Variable de espacio de trabajotTrain El alumno de clasificación detecta los predictores y la respuesta de la tabla.

La opción predeterminada es 5 veces la validación cruzada, que protege contra el sobreajuste. Haga clic.Iniciar sesión El alumno de clasificación carga el conjunto de datos y traza un gráfico de dispersión de las dos primeras entidades.

En la pestaña, haga clic en la flecha situada a la derecha de la sección para abrir la galería.Aprendiz de ClasificaciónTipo de modelo A continuación, en , haga clic en .Clasificadores de conjuntoArboles potenciados

El panel Modelo actual del Explorador de datos muestra la configuración predeterminada del modelo de conjunto de árbol es aumentado.

En la pestaña, en la sección, haga clic en .Aprendiz de ClasificaciónEntrenamientoTren Una vez completado el entrenamiento, el panel Historial del Explorador de datos muestra la precisión de clasificación validada cruzada mente 5 veces.

En la pestaña, en la sección, haga clic en y, a continuación, seleccione .Aprendiz de ClasificaciónexportarModelo de exportaciónModelo compacto de exportación Haga clic en el cuadro de diálogo.De acuerdo La estructura aparece en el espacio de trabajo de MATLAB.trainedModel El campo de contiene el modelo compacto.ClassificationEnsembletrainedModel Extraiga el modelo entrenado de la estructura.

classificationEnsemble = trainedModel.ClassificationEnsemble; 

Tren Boosted Tree Ensemble en la línea de comando

Como alternativa, puede entrenar el mismo modelo de clasificación en la línea de comandos.

template = templateTree('MaxNumSplits',20); classificationEnsemble = fitcensemble(XTrain,YTrain, ...     'Method','AdaBoostM2', ...     'NumLearningCycles',30, ...     'Learners',template, ...     'LearnRate',0.1, ...     'ClassNames',[1; 2; 3; 4; 5]);

Realice una validación cruzada de 5 veces y calcule la precisión de la validación.classificationEnsemble

partitionedModel = crossval(classificationEnsemble,'KFold',5); validationAccuracy = 1-kfoldLoss(partitionedModel)
validationAccuracy = 0.9830 

Evaluar el rendimiento de los datos de prueba

Evaluar el rendimiento en el conjunto de datos de prueba.

testAccuracy = 1-loss(classificationEnsemble,XTest,YTest)
testAccuracy = 0.9763 

El modelo entrenado clasifica correctamente el 97,63% de las actividades humanas en el conjunto de datos de prueba. Este resultado confirma que el modelo entrenado no se ajusta demasiado al conjunto de datos de entrenamiento.

Tenga en cuenta que los valores de precisión pueden variar ligeramente dependiendo de su sistema operativo.

Guardar modelo entrenado

Para la generación de código, incluido un objeto de modelo de clasificación, use y .saveLearnerForCoderloadLearnerForCoder

Guarde el modelo entrenado utilizando .saveLearnerForCoder

saveLearnerForCoder(classificationEnsemble,'EnsembleModel.mat');

El bloque de funciones de los modelos de Simulink carga el modelo entrenado mediante el uso y utiliza el modelo entrenado para clasificar nuevos datos.predictActivityloadLearnerForCoder

Implementar simulink Model en el dispositivo

Ahora que ha preparado un modelo de clasificación, puede abrir el modelo Simulink, dependiendo del tipo de teléfono inteligente que tenga, e implementar el modelo en su dispositivo. Tenga en cuenta que el modelo Simulink requiere el archivo y el archivo de matriz de calibración o .EnsembleModel.matslexHARAndroidCalibrationMatrix.matslexHARiOSCalibrationMatrix.mat Si hace clic en el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo que incluye estos archivos de matriz de calibración.

Escriba para abrir el modelo simulink para la implementación de Android.slexHARAndroidExample

Escriba para abrir el modelo de Simulink para la implementación de iOS.slexHARiOSExample Puede abrir el modelo en la plataforma Mac OS.

Los dos modelos Simulink clasifican la actividad humana en función de los datos de aceleración medidos por un sensor de smartphone. Los modelos incluyen los siguientes bloques:

  • El bloque recibe datos de aceleración sin procesar de sensores de acelerómetro en el dispositivo.Accelerometer

  • El bloque es un bloque Matlab Function que calibra los datos de aceleración sin procesar.calibrate Este bloque utiliza la matriz de calibración en el archivo o en el archivo.slexHARAndroidCalibrationMatrix.matslexHARiOSCalibrationMatrix.mat Si hace clic en el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo que incluye estos archivos.

  • Los bloques de visualización , , y están conectados al bloque y muestran puntos de datos calibrados para cada eje del dispositivo.Acc XAcc YAcc Zcalibrate

  • Cada uno de los bloques, , , yI , almacena 32 muestras de un eje acelerómetro con 12 muestras de superposición entre fotogramas almacenados en búfer.BufferX BufferY BufferZ Buffer Después de recoger 20 muestras, cada bloque une las 20 muestras con 12 muestras del fotograma anterior y pasa el total de 32 muestras al bloque.BufferextractFeatures Cada bloque recibe una muestra de entrada cada 0,1 segundos y genera una trama almacenada en búfer que incluye 32 muestras cada 2 segundos.Buffer

  • El bloque es un bloque MATLAB Function que extrae 60 entidades de un fotograma almacenado en búfer de 32 muestras de acelerómetro.extractFeatures Este bloque de funciones utiliza DSP System Toolbox™ y Signal Processing Toolbox™.

  • El bloque es un bloque Function de MATLAB que carga el modelo entrenado desde el archivo mediante el uso y la clase de la actividad del usuario mediante las entidades extraídas.predictActivityEnsembleModel.matloadLearnerForCoder La salida es un entero entre 1 y 5, correspondiente a Sitting, Standing, Walking, Running y Dancing, respectivamente.

  • El bloque muestra los valores de actividad de usuario clasificados en el dispositivo.Predicted Activity

  • El subsistema utiliza un bloque de conmutador multipuerto para elegir los datos de imagen de actividad de usuario correspondientes para mostrar en el dispositivo.Video Output El bloque descompone la imagen seleccionada en vectores RGB independientes y pasa la imagen al bloque.Convert to RGBActivity Display

Para implementar el modelo de Simulink en el dispositivo, siga los pasos descritos en o .Ejecutar modelo en dispositivos AndroidEjecutar modelo en dispositivos iOS Ejecute el modelo en el dispositivo, coloque el dispositivo de la misma manera que se describió anteriormente para recopilar los datos de entrenamiento y pruebe las cinco actividades. El modelo muestra la actividad clasificada en consecuencia.

Para garantizar la precisión del modelo, debe colocar el dispositivo de la misma manera que se describe para recopilar los datos de entrenamiento. Si desea colocar el dispositivo en una ubicación u orientación diferente, recopile los datos a su manera y utilice los datos para entrenar el modelo de clasificación.

La precisión del modelo puede ser diferente de la precisión del conjunto de datos de prueba ( ), dependiendo del dispositivo.testaccuracy Para mejorar el modelo, puede considerar el uso de sensores adicionales y la actualización de la matriz de calibración. Además, puede agregar otro bloque de salida para la retroalimentación de audio al subsistema de salida mediante Audio Toolbox™. Usa un bloque de escritura ™ ThingSpeak para publicar actividades clasificadas y datos de aceleración desde tu dispositivo al Internet de las cosas. Para obtener más información, consultehttps://thingspeak.com/.