Распознавание деятельности человека модель Simulink для развертывания смартфона

Этот пример показывает, как подготовить модель Simulink®, которая классифицирует деятельность человека на основе сигналов датчика смартфона для развертывания смартфона и генерации кода. Пример предоставляет две модели Simulink, которые готовы к развертыванию на устройстве на базе Android и устройстве на iOS. После того, как вы устанавливаете необходимый пакет поддержки для целевого устройства, обучаете модель классификации и развертываете модель Simulink на устройстве.

Предпосылки

Пакеты поддержки Simulink требуются для моделей Simulink в этом примере.

Загрузите набор выборочных данных

Загрузите набор данных humanactivity.

load humanactivity

Набор данных humanactivity содержит 24 075 наблюдений за пятью различной физической деятельностью человека: Нахождение, Положение, Обход, Выполнение и Танец. Каждое наблюдение имеет 60 функций, извлеченных от ускоряющих данных, измеренных датчиками акселерометра смартфона. Набор данных содержит следующие переменные:

  • actid — Вектор отклика, содержащий идентификаторы действия в целых числах: 1, 2, 3, 4, и 5 Нахождений представления, Положение, Обход, Выполнение и Танец, соответственно

  • actnames — Имена действия, соответствующие целочисленным идентификаторам действия

  • feat — Покажите матрицу 60 функций 24 075 наблюдений

  • featlabels — Метки 60 функций

Датчик HAR (распознавание деятельности человека) Приложение [1] (Statistics and Machine Learning Toolbox) использовался, чтобы создать набор данных humanactivity. При измерении необработанных ускоряющих данных с этим приложением человек поместил смартфон в карман так, чтобы смартфон был перевернут, и экран стоял к человеку. Программное обеспечение затем калибровало измеренные необработанные данные соответственно и извлекло 60 функций от калиброванных данных. Для получения дополнительной информации о калибровке и выделении признаков, см. [2] (Statistics and Machine Learning Toolbox) и [3] (Statistics and Machine Learning Toolbox), соответственно. Модели Simulink описали, позже также используют необработанные ускоряющие данные и включают блоки для калибровки и выделения признаков.

Подготовка данных

Этот пример использует 90% наблюдений, чтобы обучить модель, которая классифицирует пять типов деятельности человека и 10% наблюдений, чтобы подтвердить обученную модель. Используйте cvpartition, чтобы задать 10%-ю затяжку для набора тестов.

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

Преобразуйте матрицу функции XTrain и вектор отклика YTrain в таблицу, чтобы загрузить обучающий набор данных в приложении Classification Learner.

tTrain = array2table([XTrain YTrain]);

Задайте имя переменной для каждого столбца таблицы.

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

Обучите повышенный древовидный ансамбль Используя приложение Classification Learner

Обучите модель классификации при помощи приложения Classification Learner. Чтобы открыть приложение Classification Learner, введите classificationLearner в командной строке. Также кликните по вкладке Apps и кликните по стрелке справа от раздела Apps, чтобы открыть галерею. Затем под Машинным обучением нажмите Classification Learner.

На вкладке Classification Learner, в Разделе файла, нажимают New Session и выбирают From Workspace.

В диалоговом окне New Session кликните по стрелке для Переменной Рабочей области, и затем выберите таблицу tTrain. Classification Learner обнаруживает предикторы и ответ из таблицы.

Опция по умолчанию является 5-кратной перекрестной проверкой, которая защищает от сверхподбора кривой. Нажмите Start Session. Classification Learner загружает набор данных и строит график рассеивания первых двух функций.

На вкладке Classification Learner кликните по стрелке справа от раздела Model Type, чтобы открыть галерею. Затем под Классификаторами Ансамбля нажмите Boosted Trees.

Панель Текущей модели Браузера Данных отображает настройки по умолчанию повышенной древовидной модели ансамбля.

На вкладке Classification Learner, в разделе Training, нажимают Train. Когда обучение завершено, панель Истории Браузера Данных отображает 5-кратную, перекрестную подтвержденную точность классификации.

На вкладке Classification Learner, в Разделе экспорта, нажимают Export Model, и затем выбирают Export Compact Model. Нажмите ОК в диалоговом окне. Структура trainedModel появляется в рабочем пространстве MATLAB. Поле ClassificationEnsemble trainedModel содержит компактную модель. Извлеките обученную модель от структуры.

classificationEnsemble = trainedModel.ClassificationEnsemble;

Обучите повышенный древовидный ансамбль в командной строке

Также можно обучить ту же модель классификации в командной строке.

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

Выполните 5-кратную перекрестную проверку для classificationEnsemble и вычислите точность валидации.

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

Оцените производительность на тестовых данных

Оцените производительность на наборе тестовых данных.

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

Обученная модель правильно классифицирует 97,63% деятельности человека по набору тестовых данных. Этот результат подтверждает, что обученная модель не сверхсоответствует к обучающему набору данных.

Обратите внимание на то, что значения точности могут отличаться немного в зависимости от вашей операционной системы.

Сохраните обученную модель

Для генерации кода включая объект модели классификации используйте saveCompactModel и loadCompactModel.

Сохраните обученную модель при помощи saveCompactModel.

saveCompactModel(classificationEnsemble,'EnsembleModel.mat');

Функциональный блок predictActivity в моделях Simulink загружает обученную модель при помощи loadCompactModel и использует обученную модель, чтобы классифицировать новые данные.

Разверните модель Simulink на устройстве

Теперь, когда вы подготовили модель классификации, можно открыть модель Simulink, в зависимости от которого типа смартфона вы имеете и развертываете модель на своем устройстве. Обратите внимание на то, что модель Simulink требует файла EnsembleModel.mat и калибровочного матричного файла slexHARAndroidCalibrationMatrix.mat или slexHARiOSCalibrationMatrix.mat. Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, то MATLAB® открывает папку в качестве примера, которая включает эти калибровочные матричные файлы.

Введите slexHARAndroidExample, чтобы открыть модель Simulink для развертывания Android.

Введите slexHARiOSExample, чтобы открыть модель Simulink для развертывания iOS.

Две модели Simulink классифицируют деятельность человека на основе ускоряющих данных, измеренных датчиком смартфона. Модели включают следующие блоки:

  • Блок Accelerometer получает необработанные ускоряющие данные из датчиков акселерометра на устройстве.

  • Калибровать блоком является блок MATLAB function, который калибрует необработанные ускоряющие данные. Этот блок использует калибровочную матрицу в файле slexHARAndroidCalibrationMatrix.mat или файле slexHARiOSCalibrationMatrix.mat. Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, то MATLAB® открывает папку в качестве примера, которая включает эти файлы.

  • Отображение блокирует Acc X, Acc Y, и Acc Z соединяются с калибровать блоком, и отображение калибровало точки данных для каждой оси на устройстве.

  • Каждый из Буферных блоков, X Буферов, Y Буфер и Буфер Z, буферизует 32 выборки оси акселерометра с 12 выборками перекрытия между буферизированными кадрами. После сбора 20 выборок каждый блок Buffer соединяет эти 20 выборок с 12 выборками от предыдущего кадра и передает общие 32 выборки блоку extractFeatures. Каждый блок Buffer получает вход, выбирают каждые 0,1 секунды, и выводит буферизированный кадр включая 32 выборки каждые 2 секунды.

  • Блоком extractFeatures является блок MATLAB function, который извлекает 60 функций от буферизированного кадра 32 выборок акселерометра. Этот функциональный блок использует DSP System Toolbox™ и Signal Processing Toolbox™.

  • Блоком predictActivity является блок MATLAB function, который загружает обученную модель из файла EnsembleModel.mat при помощи loadCompactModel и классифицирует пользовательское действие, использующее извлеченные функции. Вывод является целым числом между 1 и 5, соответствуя Нахождению, Положению, Обходу, Выполнению и Танцу, соответственно.

  • Блок Predicted Activity отображает классифицированные пользовательские значения действия на устройстве.

  • Подсистема Видеовыхода использует многопортовый блок switch, чтобы выбрать соответствующие пользовательские данные изображения действия, чтобы отобразиться на устройстве. Блок Convert to RGB разлагает выбранное изображение на отдельные векторы RGB и передает изображение блоку Activity Display.

Чтобы развернуть модель Simulink на вашем устройстве, выполните шаги в Запущенной Модели на устройствах на базе Android или Модели Выполнения на устройствах на iOS. После того, как процесс настройки завершен, нажмите Deploy to Hardware, чтобы создать приложение с тем же именем как модель. Запустите приложение, поместите устройство таким же образом, как описано ранее для сбора данных тренировки и попробуйте эти пять действий. Отображения приложения классифицированное действие соответственно.

Чтобы гарантировать точность приложения, необходимо поместить устройство таким же образом, как описано для сбора данных тренировки. Если вы хотите поместить свое устройство в другое место или ориентацию, затем собрать данные вашим собственным способом и использовать ваши данные, чтобы обучить модель классификации.

Точность приложения может отличаться от точности набора тестовых данных (testaccuracy), в зависимости от устройства. Чтобы улучшить приложение, можно рассмотреть использование дополнительных датчиков и обновления калибровочной матрицы. Кроме того, можно добавить другой выходной блок для звукового отклика к выходной подсистеме с помощью Audio Toolbox™. Используйте блок записи ThingSpeak™, чтобы опубликовать классифицированные действия и ускоряющие данные от вашего устройства до Интернета Вещей. Для получения дополнительной информации см. https://thingspeak.com/.