exponenta event banner

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

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

Загрузить набор данных образцов

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

load humanactivity

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

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

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

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

  • featlabels - Метки 60 элементов

Приложение Sensor HAR (распознавание человеческой деятельности) [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. Аналогичный пример см. в разделе Модель распознавания активности человека Simulink для развертывания смартфона.

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

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

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

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

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

Прогнозирование в модели Simulink

После подготовки классификационной модели можно открыть модель Simulink. Можно импортировать обученный объект классификации, содержащий дерево решений. classificationTree в блок предсказания DreamedTree. Этот блок можно добавить из библиотеки Toolbox™ статистики и машинного обучения. Дополнительные сведения о том, как создать модель, включающую блок Прогнозирование по дереву, см. в разделе Прогнозирование меток классов с помощью блока Прогнозирование по дереву. В этом случае будет использоваться модель 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

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

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

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

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

  • Блок «Прогнозирование древовидной структуры» - это блок библиотеки из библиотеки инструментов статистического и машинного обучения, который классифицирует действия человека с использованием извлеченных элементов. Выходной сигнал представляет собой целое число от 1 до 5, соответствующее Sitting, Standing, Walking, Running и Dancing соответственно.

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

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

В slexHARFixedPointExample щелкните правой кнопкой мыши порт Label и выберите команду Log Selected Signals. Затем откройте приложение Fixed-Point Tool, выбрав его в коллекции приложений, доступной на вкладке Приложения. В инструменте «Фиксированная точка» в разделе «Новый рабочий процесс» выберите Iterative Fixed-Point Conversion.

На вкладке «Итерационное преобразование с фиксированной точкой» в разделе «Допуски сигнала» укажите допустимый уровень допуска (разница между исходным значением и значением новой конструкции) для label сигнал. Рекомендуется для классификационных моделей указывать абсолютный допуск 0. При этом параметре метки, возвращаемые моделью классификации с фиксированной точкой, должны совпадать с метками, возвращаемыми моделью с плавающей точкой. (Для регрессионных моделей допустимым допуском может быть ненулевое заданное пользователем число.)

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

Открытие модели Simulink с фиксированной точкой slexHARFixedPointConvertedExample путем ввода следующего в командной строке. Блок «Подсистема» содержит блоки «Буфер» и «Калибровка», «Предварительная обработка» и «Прогнозирование дерева», как показано выше для slexHARFixedPointExample модель.

slexHARFixedPointConvertedExample

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

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

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

slexHARFixedPointDeployExample

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

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

  • Блоки Buffer (буфер) и Calibration (калибровка), Prediction (предобработка) и TressingTree Predict (прогнозирование дерева) совпадают с блоками, показанными ранее для slexHARFixedPointExample модель.

  • Блок прогнозируемой активности отображает классифицированные значения активности человека на матрице 5x5 LED устройства BBC micro: bit. Буквы «S», «T», «W», «R» и «D» представляют Сидящую, Стоящую, Ходячую, Бегущую и Танцующую соответственно.

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

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

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

Ссылки

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

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

[3] Эль Хелу, Амин. Анализ данных датчиков. https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics--french-webinar-code- обмена файлами MathWorks

См. также

| |

Связанные темы