江汉大学 人工智能学院
摘要:本文首先概述了人类活动识别,描述了人类活动识别的数据集、格式和处理方法,然后描述了RNN模型的训练和模型的构造,最后给出了测试用的超参数和测试结果。
关键字: 人类活动模型,人类活动数据集
人类活动识别(Human Activity Recognition)是一项具有挑战性的时间序列分类任务。它涉及到基于传感器数据识别人的移动。为了适应机器学习模型,传统上涉及到从信号处理到根据原始数据正确设计特征的深度领域专业知识和方法。近年来,卷积神经网络和循环神经网络等深度学习方法已经显示出通过从原始传感器数据中自动学习特征的能力。
人类活动数据集包含了6554个人类序列[1],它们展示了诸如行走、躺着、坐着等活动。输入空间由每个时间步长的56个1维惯性传感器测量值组成,通过智能手机记录下来,最终数据集被分为六组活动后输出。数据集中的每条sample以逗号分割成列,举例如下:
#A01,010-000-024-033,633790226051280329,27.05.2009 14:03:25:127,4.062931060791016,1.8924342393875122,0.5074254274368286,walking
第一列为Sequence Name:取值为{A01,A02,A03,A04,A05,B01,B02,B03,B04,B05,C01,C02,
C03,C04,C05,D01,D02,D03,D04,D05,E01,E02,E03,E04,E05} ,代表 A, B, C, D, E 5 个人,A01代表第A个人的第一轮数据,其中包含多条sample。
第二列为Tag Identificator:
取值为{010-000-024-033,010-000-030-096,020-000-033-111,020-000-032-221},
使用不同的数字序列,代表人体的不同部位,分别为左脚踝、右脚踝、胸部、腰部。
第三列 Time Stamp:时间戳。
第四列 Date:符合 dd.MM.yyyy HH:mm:ss:SSS 形式的日期数据。
第五列-第七列分别为 x、y、z 坐标。
第八列 标签:取值为{walking, lying down, sitting down, standing up}分别代表走路、躺下、坐下、站起。
首先下载原始数据集文件,以逗号为分隔符解析出每条sample中的上述八列数据,计算每人每轮相对于每人每轮起始时间的时间,如果两条sample的时间完全相同(小概率事件),则对每人每轮相同身体部位的测量坐标值取平均值,对标签进行one-hot处理。最后以滑动窗口的方式保存前10000个处理过的数据集,滑动窗口间的起始偏移为配置的最长序列的一半,窗口内的每个sample计算相对于窗口起始时间的时间。
从已处理的数据集中读取数据并随机分割成训练数据和测试数据,通过训练数据和测试数据以及batch大小实例化训练数据加载器和测试数据加载器。
以RNN模型和超参数构建学习对象,以学习对象和训练数据加载器构建训练对象,通过训练对象启动训练。具体的训练过程如下:
学习对象通过训练数据加载器从已处理的数据集中读取batch大小的数据,对每个sample计算相对于序列起始时间的时间并计算时间上相邻sample间的时间间隔,通过RNN模型前向处理获取识别值,batch中保留有效的标签和识别值,计算交叉熵损失和准确率。
模型分为RNN和RNN cell,RNN分割时间步中的batch,而RNN cell(LSTM cell)处理batch
LSTM cell包含两个权重矩阵,分别是输入矩阵和循环输出矩阵,权重初始值分别用xavier和orthogonal初始化。
RNN cell前向处理如下[2]:
对当前输入和上一个时间步的输出状态分别乘以输入矩阵和循环输出矩阵并求和,tanh运算后生成输入激活值,sigmod运算后分别生成输入门、遗忘门和输出门,将当前cell的状态和输入激活值分别乘以遗忘门和输入门并求和得到新的cell状态,考虑到新的cell的状态可能超出了[-1,1]的范围,对新的cell的状态进行tanh运算以便保持在[-1,1]范围内,以便与输出门相乘得到输出状态和新的cell。
RNN 前向处理如下:
依次取出每个时间步的batch大小的samples,使用RNN cell进行前向处理得到输出状态,输出状态经过全连接网络输出。
Clip norm:RNN梯度裁剪以避免梯度爆炸和梯度消失。
Optimize:权重更新预调节器如Adam,也就是带动量的随机梯度下降。
Batch:用于计算梯度的样本数。一次批大小更新一次权重。
Hidden :RNN隐状态的个数。
Epochs:运行数据集训练的轮次数。
Base Lr:初始学习率,学习率初始为Base Lr。
Decay Lr:学习速率的下降因子。每轮训练后,学习率降为Decay Lr倍。
Backbone Active:骨干层的激活函数。
Backbone Unit:每个骨干层隐藏单元的数量。
Backbone Layers:骨干层层数。
Backbone Dropout:骨干层暂退法。
Weight Decay:L2权重正则化因子。
Tdata:时间步间隔扩展因子(默认值为常数因子1)。
Gain:权重初始化的Xavier均匀分布的增益(默认值1)。具体的超参数如下表:
Optimize | Batch | Hidden | Epochs | Base Lr | Decay Lr | Backbone Active |
Adam | 64 | 128 | 100 | 0.002 | 0.97 | GELU |
Backbone Unit | Backbone Layers | Backbone dropout | Weight Decay | Tdata | Gain | |
64 | 3 | 0.4 | 1e-04 | 10 | 0.84 |
表1人类活动识别的超参数列表
我们设置了数据集分割(训练、验证和测试)。本实验的结果见表2。实验结果表明,使用RNN模型进行人类活动识别可以达到79.5%的准确性,由于笔者缺乏GPU设备,暂时以CPU进行训练,每轮的训练时间比较慢,大概需要4.8分钟,如果以GPU进行训练,每轮的训练时间将小于1分钟。
Model | Accuracy(%) | Time per epoch(min) |
RNN | 79.5 | 4.8 |
表2人类活动识别的测试结果
参考文献
[1] Rubanova, Y., Chen, R. T. & Duvenaud, D. Latent Neural ODEs for irregularly-sampled time series. In Proc. of Advances in Neural Information Processing Systems 2019.
[2] 动⼿学深度学习 Aston Zhang, Zachary C. Lipton, Mu Li, and Alexander J. Smola 人民邮电出版社 2022