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

Этот пример показывает, как подготовить модель Simulink ®, которая классифицирует активность человека на основе сигналов датчика для генерации кода и развертывания на оборудовании с низким энергопотреблением. Пример предоставляет модель классификации Simulink, которая готова к развертыванию на устройстве micro: bit BBC. Во-первых, загрузите и установите Simulink Coder™ Support Package для BBC micro: бит из Add-On Explorer. Затем обучите классификационную модель и разверните модель Simulink на целевом устройстве.

Загрузка набора выборочных данных

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

load humanactivity

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

  • actid - Вектор отклика, содержащий идентификаторы активности в целых числах: 1, 2, 3, 4 и 5, представляющие Сидя, Стоя, Ходьбу, Бег и Танцы, соответственно

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

  • feat - Матрица признаков из 60 функций для 24 075 наблюдений

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

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

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

feat = feat(:,1:15);
featlabels = featlabels(1:15);

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

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

rng('default') % For reproducibility
Partition = cvpartition(actid,'Holdout',0.10);

Извлеките индексы обучения и тестирования.

trainInds = training(Partition);
testInds = test(Partition);

Укажите наборы обучающих и тестовых данных.

XTrain = feat(trainInds,:);
YTrain = actid(trainInds);
XTest = feat(testInds,:);
YTest = actid(testInds);

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

Обучите подобранное дерево принятия решений двоичной классификации с помощью предикторов XTrain и метки классов YTrain. Рекомендуемая практика состоит в том, чтобы задать имена классов. Кроме того, задайте не более 20 узлов ветви для дерева решений.

classificationTree = fitctree(XTrain,YTrain,...
    'ClassNames',[1;2;3;4;5],...
    'MaxNumSplits',20)
classificationTree = 
  ClassificationTree
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [1 2 3 4 5]
           ScoreTransform: 'none'
          NumObservations: 21668


  Properties, Methods

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

partitionedModel = crossval(classificationTree,'KFold',5);
validationAccuracy = 1-kfoldLoss(partitionedModel)
validationAccuracy = 0.9700

Также можно обучить и провести перекрестную проверку одной и той же модели классификации с помощью приложения Classification Learner. Для аналогичного примера смотрите Модель Human Распознавания активности Simulink для Развертывания смартфона.

Оценка эффективности по тестовым данным

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

testAccuracy = 1-loss(classificationTree,XTest,YTest)
testAccuracy = 0.9617

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

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

Предсказать в модели Simulink

Теперь, когда вы подготовили классификационную модель, можно открыть модель Simulink. Можно импортировать обученный объект классификации, содержащий дерево решений classificationTree в блок ClassificationTree Predict. Можно добавить этот блок из библиотеки Statistics and Machine Learning Toolbox™. Дополнительные сведения о том, как создать модель, включающую блок ClassificationTree Predict, см. в разделе Предсказание меток классов с использованием блока ClassificationTree Predict. В этом случае вы будете использовать модель Simulink slexHARFixedPointExample обеспечивается этим примером.

Создайте большой набор данных акселерометра ts использовать в качестве входов для модели Simulink.

inData = load('rawAccData');
Xacc = inData.acc_data;
t = 0:size(Xacc,1)-1;
ts = timeseries(Xacc,t,'InterpretSingleRowDataAs3D',true);
numSteps = numel(t)-1;

Откройте модель Simulink slexHARFixedPointExample путем ввода следующего в командной строке. Обратите внимание, что модель Simulink включает коллбэки, которые загружают необходимые переменные для подсистемы предварительной обработки в базовое рабочее пространство.

slexHARFixedPointExample

The slexHARFixedPointExample модель содержит следующие блоки:

  • Блок X (входной порт) связывает сигнал ts из Рабочей области в систему.

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

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

  • Блок ClassificationTree Predict является библиотечным блоком из библиотеки Statistics and Machine Learning Toolbox, который классифицирует действия человека, используя извлеченные функции. Выход является целым числом от 1 до 5, соответствующим Siting, Standing, Walking, Running и Dancing, соответственно.

Преобразуйте в фиксированную точку

Преобразуйте slexHARFixedPointExample модель к модели с фиксированной точкой slexHARFixedPointConvertedExample. Затем разверните slexHARFixedPointConvertedExample BBC micro: bit board. Целевое устройство не имеет модуля с плавающей точкой (FPU) и выполняет вычисления с фиксированной точкой более эффективно, чем вычисления с плавающей точкой.

В slexHARFixedPointExample щелкните правой кнопкой мыши по порту Label и выберите Log Selected Signals. Затем откройте приложение Fixed-Point Tool, выбрав его из галереи Apps, доступной на вкладке Apps. В окне Fixed-Point Tool, в разделе New workflow выберите Iterative Fixed-Point Conversion.

На вкладке Iterative Fixed-Point Conversion, в разделе Signal Tolerances, задайте приемлемый уровень допуска (различие между исходным значением и значением нового проекта) для label сигнал. Рекомендуемая практика для классификационных моделей состоит в том, чтобы задать 0 абсолютные погрешности. С помощью этой настройки метки, возвращенные классификационной моделью с фиксированной точкой, должны быть такими же, как метки, возвращенные моделью с плавающей точкой. (Для регрессионных моделей приемлемым допуском может быть ненулевое заданное пользователем число.)

Затем проверьте шаги в примере Преобразовать модель с плавающей точкой в Фиксированную точку (Fixed-Point Designer), чтобы узнать, как создать модель Simulink, которая преобразуется в фиксированную точку.

Откройте модель Simulink с фиксированной точкой slexHARFixedPointConvertedExample путем ввода следующего в командной строке. Блок Subsystem содержит блоки Buffer и Calibration, Precessing и ClassificationTree Predict, как показано ранее для slexHARFixedPointExample модель.

slexHARFixedPointConvertedExample

Также можно выбрать Optimized Fixed-Point Conversion рабочий процесс в приложении Fixed-Point Tool или вручную определить тип данных в диалоговом окне блока. Для получения дополнительной информации см. раздел «Настройка блоков с выходами с фиксированной точкой» (Fixed-Point Designer).

Развертывание на оборудовании

Откройте модель Simulink для развертывания на устройстве micro: bit BBC путем ввода следующего в командной строке. The slexHARFixedPointDeployExample модель преобразуется в фиксированную точку и имеет блоки ввода-вывода для портов акселерометра и отображения на целевом устройстве.

slexHARFixedPointDeployExample

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

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

  • Блоки Buffer и Calibration, Precessing и ClassificationTree Predict те же, что и ранее показанные для slexHARFixedPointExample модель.

  • Блок Предсказанная Активность отображает классифицированные значения человеческой активности на матрице 5x5 LED устройства micro: bit BBC. Буквы «S», «T», «W», «R» и «D» представляют собой Siting, Standing, Walking, Running и Dancing, соответственно.

Чтобы перенести модель Simulink на ваше устройство, следуйте шагам в BBC micro: бит (Simulink Coder Support Package for BBC micro: бит). Запустите модель на своем устройстве, поместите устройство так же, как описано ранее для сбора обучающих данных, и попробуйте пять действий. Модель соответственно отображает классифицированное действие.

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

Точность модели может отличаться от точности тестовых данных набора (testAccuracy), в зависимости от устройства. Чтобы улучшить точность модели, рассмотрите использование дополнительных датчиков, таких как гироскоп.

Ссылки

[1] Эль Хелу, Амин. Приложение распознавания HAR датчика MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app

[2] STMicroelectronics, AN4508 Application note. «Параметры и калибровка малогабаритного 3-осевого акселерометра». 2014. https://www.st.com/resource/en/application_note/dm00119044-parameters-and-calibration-of-a-lowg-3axis-accelerometer-stmicroelectronics.pdf

[3] Эль Хелу, Амин. Sensor Data Analytics. Файлы MathWorks Exchange https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics--french-webinar-code-

См. также

| |

Похожие темы