本项目主要实现人体活动识别神经网络的搭建、训练以及在STM32L4微控制器上的部署运行
这个系统将选用名为University of Southern California Human Activity Dataset的数据集,简称USC-HAD。
官方介绍链接:http://sipi.usc.edu/had/
官方数据集下载地址:http://sipi.usc.edu/had/USC-HAD.zip
这个数据集主要包含加速度计与陀螺仪的6轴数据,采样率100Hz,通过固定在受试者的腰间的6轴传感器采集得来,一共包含12个活动分类:
活动编号 | 活动标签 | 活动描述 |
---|---|---|
1 | walking forward | 受试者沿着直线向前走 |
2 | walking left | 受试者逆时针走一整圈 |
3 | walking right | 受试者顺时针走一整圈 |
4 | walking upstairs | 受试者上楼梯 |
5 | walking downstairs | 受试者下楼梯 |
6 | running forward | 受试者沿着直线向前跑 |
7 | jumping | 受试者保持在同一位置,不断地上下跳跃 |
8 | sitting | 受试者坐在椅子上工作或休息。坐立不安也被认为属于这一类。 |
9 | standing | 受试者站着和某人交谈 |
10 | sleeping | 受试者睡觉或躺在床上 |
11 | elevator up | 受试者乘坐上升的电梯 |
12 | elevator down | 受试者乘坐下降的电梯 |
最初始的数据集包含Subject1到Subject14这十四个文件夹,分别代表14位不同受试者采集的数据。
每个Subject*文件夹里面存储着.mat格式的数据集,其中“a”表示“activity”,后面接着的数字表示12种活动对应的编号,接着的“t”表示“trial”,后面接着的数字表示第几次尝试。
每个.mat文件包括的属性类型都是一样的,里面包含了一些与训练网络无关的属性。因此,我们需要对数据集进行预处理,首先读取每个文件夹里面所有的.mat文件中的传感器原始数据和分类标签的名字,并进行合并,最后生成一个完整的数据集文件,为了方便python程序读取,最后使用csvwrite函数把数据集格式转换为.csv。最后生成的csv文件只包含7个属性,分别是加速度计和陀螺仪的6轴数据以及一个分类标签。
通过以上步骤处理完Subject1~Subject14后,我们可以得到14个.csv文件,分别代表14种不同年龄、身高、体重的数据,这里可以分别使用这些数据集训练得到不同的模型,这样针对不同年龄、身高和体重的群体使用对应的模型,实际的运行效果可能会更佳,但为了方便说明与实现,我们最后直接把生成好的14个csv文件合并成一个大的文件,作为训练使用的数据集,这里命名为USC-HAD_All.csv。
相关代码参见 HAR_Model-train-verify文件夹
为了评估更加准确,我们采取了从串口直接发送测试集到MCU,MCU执行完模型后返回结果给PC,再在PC上统计的方法。详细代码请参考HAR_STM32L475VG-VERIFY工程文件,里面包含了PC端用于发送和接收数据的【send_receive.py】文件,以及下载到MCU上的工程文件,用于接收PC端发来的测试集,执行ai运算并返回结果给PC。
具体代码参见HAR_STM32L475VG-OLED文件夹,需要使用I2C的OLED显示屏显示结果。