Распознавание деятельности человека модель 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.9830

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

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

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

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

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

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

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

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

saveLearnerForCoder(classificationEnsemble,'EnsembleModel.mat');

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

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

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

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

Введите slexHARiOSExample открыть модель Simulink для развертывания iOS. Можно открыть модель на платформе Mac OS.

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

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

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

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

  • Каждый из Буферных блоков, X Буферов, Y Буфер, Буфер andI 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 файл при помощи loadLearnerForCoder и классифицирует пользовательское действие, использующее извлеченные функции. Выход является целым числом между 1 и 5, соответствуя Нахождению, Положению, Обходу, Выполнению и Танцу, соответственно.

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

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

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

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

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

Для просмотра документации необходимо авторизоваться на сайте