1. 引言
用户行为识别 [1] 与理解是以人为中心的普适计算领域的重要研究内容之一,也是现今社会智慧化、个性化、移动端服务化的关键点。如何了解并实现用户行为识别显得极其重要。传统的行为识别通常是类似于用户的跑步,行走,站立与上下楼这样简单活动。而随着科技进步的飞速发展,如何识别用户行为与社交方面也有了重大的突破,复杂的用户行为场景也提供了复杂的行为识别,而如何再次获取这些复杂的行为就显得尤为重要。
借助于手机的加速度传感器 [2] 检测喝酒的人的行走的步态情况,来推测其喝酒的程度。使用环境传感器、物体传感器 [3],例如RFID标签与生活中常用物品结合,对智能家庭中日常活动识别进行研究。活动识别不仅包括识别用户的活动,通过智能设备对用户的生活方式进行识别也是一种研究方向。如文献 [4] 利用获取手机的蓝牙信号来推测用户的日常交流信息。文献 [5] 描述了一个自动评分系统,主要是针对用户在手机和平板上看电影时产生的使用习惯可以被用来捕捉到一个广泛的范围。
活动识别应用于医疗领域也是一种发展趋势,因为疾病问题会使得身体的运动或功能发生变化,因此可以通过使用相应的传感器进行检测。文献 [6] 中通过穿戴式传感器附加到人的鞋子上来反映人行走的速度与步态,对患有帕金森综合征的人的身体情况进行了研究。通过获取阵发性心房颤动疾病人的心电图数据,对发病前的状态进行预测 [7]。文献 [8] 使用RFID标签技术,在急救中,观察患者的身体反应或病情征兆,来辅助急救人员进行相应的治疗措施。文献 [9] 主要评估了一个基于智能手机的活动识别分类器在监测健康人和中风患者时的表现。文献 [10] 主要评估了一个基于智能手机的活动识别分类器在监测健康人和中风患者时的表现。方法就是让参与者佩戴智能手机,并进行日常行为活动,然后将采集到的数据分成五个特征用来区分参与者的行为,并且通过计算敏感性、特异性来评估HAR分类器的表现。文献 [11] 这篇文章主要介绍了通过家庭监测设备提供到智能手机上的信息监测重点病患,主要是用了一个决策树框架的集合来训练和预测多类人体活动系统。
本文主要的工作为:设计Android端的UI界面,提供给用户可操作的APP。用户通过APP进行注册登录,登陆后填写用户的个人信息,并且记录相关的活动行为数据。通过与服务器数据库的连接,将用户的个人信息,类似于身高体重加上活动行为数据一起保存在数据库中。通过活动识别算法网络的分析计算,得出用户的活动标签,即用户的具体行为,用户同样可以查看用户活动消耗卡路里情况,向服务器发送请求,对活动信息进行相应的卡路里转化返回到客户端,并以图表的形式展示出来,方便客户的查看。
2. 活动识别系统
2.1. 活动识别的系统架构
活动识别系统整体可分为Android应用、云服务器、两个部分。Android应用主要负责与用户的信息交互,通过云服务器提供的接口运行服务器相应的功能。云服务器主要负责对Android端传递过来的用户操作的需求进行分析处理,解析对应的URLs,运行相应的处理方法,同时将处理的结果返回给Android端。
基于以上介绍,本系统将对用户的活动信息进行上传,服务器对Android端上传的信息进行活动识别,并可以根据用户需求,将对应活动转化为卡路里消耗传回给Android端,并进行可视化,系统总体设计架构如图1所示。
2.2. 活动识别的通信框架
用用户可通过Android应用注册用户信息,包括用户名密码传递到服务器,服务器对用户名信息进行查重处理,不相同则保存到数据库,相同则驳回请求;用户可登陆向服务器发送请求,服务器校验该登陆用户名密码是否与数据端相同,相同则登陆成功,不相同则驳回请求。登陆后,用户完善自己信息传递到服务器中,服务器操作保存到数据端。并开始记录用户的活动信息(包括活动信息,x,y,z三轴加速度,起止时间),并将活动信息传递给服务器,服务器进行相应的操作,对活动信息进行活动识别并保存到数据库中。用户还可以查询活动信息,向服务器发送请求,服务器会将活动信息从数据端取出来,并将其转化为卡路里消耗返回到Android端,进行可视化操作。具体操作如图2所示。

Figure 2. Message communication framework
图2. 消息通信结构图
3. 活动识别算法设计
卷积神经网络模型(简称CNN)是一种深度神经网络,它被开发用于图像数据,例如,如手写识别。事实证明,经过大规模培训他们在挑战计算机视觉问题时非常有效,例如识别和定位图像中的对象以及自动描述图像内容。它们是由两种主要类型的元素组成的模型:卷积层和池化层。
图3提供了基于卷积神经网络的活动识别算法。该算法将由第一卷积层,最大池化和第二卷积层组成。之后是算法的全连接层,该层连接到Softmax层。
第一层卷积层conv1,输入的是1 × 100,3通道数的数据,也就是一组100条的三向加速度传感器数据,卷积核大小设为1 × 10,3通道,共60个。步长为1。偏差量的默认值设为0.0。本文采用了SAME方式来进行pudding操作,一是为了保持输出的大小始终为1 × 100,二是为了防止边缘值的丢失。共输出60张特征图,即输出1 × 100,3通道。最后对输出的特征图进行ReLU的激活。
第二层池化层pool1,将第一层输出的60张特征图输入进去,进行最大池化操作。通过一个1 × 20的池化窗口进行池化,在相邻的1 × 20个像素值中选取最大值作为池化的输出值,步长为2。同样是采用SAME方法做pudding,得到了新的特征图。特征图的个数不变,为60个。
第三层卷积层conv2,将最大池化后的60张特征图输入,采用的卷积核大小为1 × 6。输入的通道数为60,卷积核的个数为10,步长依旧设为1。偏差值的默认值设为0.0。10个1 × 6的卷积核构成一个卷积核组,这个卷积核组与输入的60张特征图进行卷积操作,输出10张新的特征图。然后对输出的特征图进行ReLU的激活。
第四层全连接层fc1,将卷积层conv2的输出列表化,用于全连接层输入。定义的全连接层中有1000个神经元。为了防止数据规模小造成的过度拟合,本文使用了dropout函数。CNN训练过程中使用dropout是在每次训练过程中随机将部分神经元的权重置为0,即让一些神经元失效,这样可以缩减参数量,避免过拟合。dropout率的选择:经过交叉验证,隐含节点dropout率等于0.5的时候效果最好,原因是0.5的时候dropout随机生成的网络结构最多。
第五层是全连接层fc2,定义了SoftMax函数。它用于分类过程,将多个神经元的输出,映射到(0,1)区间内,因为有6种活动标签,故输出6个值,而这些值的和为1。
4. 算法的实验过程与准确率分析
4.1. 实验过程
分采集到的数据来源约由30个人组成,每个人会做6个动作。这6个动作分别是Walking,Jogging,Upstairs,Downstairs,Sitting,Standing。然后数据的选取就是在做动作的整个时间段里,按照一定采样频率对被测试人进行采样,从而得出了整体数据。
本文抽取的数据选取20个人作为训练集,选取2个人为测试集,然后每个人的每个动作抽取连续的500条数据,那么一个人就应该是500 × 6条数据,那么训练集的大小就是500 × 6 × 20条数据。每组数据100个加速度传感器信息是一个不错的选择,为了符合输入格式,将其变为三维数组,大小为1 × 100 × 3。此时1 × 100就是图片格式的长 × 宽,3是通道数,本文的数据集中有600条这样的输入。其中500条作为训练集,100条作为测试集。
4.2. 准确率分析
将500条训练样本输入算法从而训练出模型,这里输出了模型训练过程中的精确度,以及测试的准确度,最终达到了83%。如图4。
从下面的图5可以看到损失函数loss的值正在随训练呈现减小的趋势,最后在大约第350个训练样本时趋于稳定,并且数值无线趋近于0。loss函数是检验一个卷积神经网络是否可用的标准之一。loss函数图像如果不是呈下降趋势则说明网络中的参数需要做进一步调整,而如果是呈下降趋势但是最终趋于稳定后的数值较大,则可能是网络的卷积层数不够。而如果loss图像过早的趋于0,则可能是数据集的体量不足,导致了模型的过度拟合。

Figure 4. Line chart of model accuracy changing with training
图4. 模型准确度随训练变化的折线图

Figure 5. Line chart of loss function
图5. 损失函数loss折线图
卷积神经网络已经搭建完成,由两个卷积层一个池化层两个全连接层构成。由于数据集的规模只有500个1 × 100 × 3的加速传感器数据,过多的卷积次数可能会导致过度拟合。搭建神经网络的难点不在于内容的编写,而在于对参数的调试。在经过对卷积核尺寸,卷积核深度不断的多次的调试最终使得模型的准确率达到了83%。接着把模型保存下来就可以应用了。
5. 基于活动识别的活动评估
用户可以通过本系统的Android应用登录账号进行记录用户一天的活动信息,包括三轴加速度值,时间。Android端会将这些信息传输到服务器中,服务器对这些信息进行活动识别,并将结果保存到数据端,供用户进行进一步的查询。根据用户的需求,服务器对已识别的活动信息进行卡路里消耗转化,根据用户具体的活动、时间以及体重计算出相应活动在相应时间内具体消耗的卡路里消耗,以体重小时为基准的日常活动强度系数如表1所示。具体公式如下所示。
并根据时间,除了具体活动的消耗量,每天的活动消耗还加上人体基础代谢需要消耗的卡路里热量,使用户可以更准确的查询到每天,每月,每年的卡路里消耗量,并以折线图,柱状图的形式展示给用户,如图6所示,该图就是查询当天中用户具体活动占整体活动的消耗情况,可以在饼状图中清晰地看到每个活动具体的占比,使用户对自己的能量消耗有一个清晰地了解。
6. 总结与展望
为了提高人类的生活水平,与出于对人类健康的考虑,我们需要通过多源感知技术的活动识别分析来对人类的行为进行研究。本文提出了一种基于卷积神经网络的活动识别方法。通过用户的行为采集数据,记录下行为数据后,用搭建的算法进行分析。最后以图表和数据的形式返回给用户,给用户最直观的显示。让用户可以清楚地看到自己的活动是否规律,是否有需要改进的地方。
当然,这次的研究还有很多不足的地方,比如存在着户自己来记录行为,算法进行的活动识别研究并不能保证极高的准确率等问题。接下来我们将逐步完善这些功能,例如可以自动地获取用户现在正在进行的行为、提高算法与模型的准确性与联系,让算法可以精确地判断用户的活动行为,甚至可以通过分析用户所处环境,与活动行为一起进行研究,提出更科学、更贴近现实生活的模型与结果。
致谢
我们向为我们的实验提供数据的北京建筑大学的志愿者们表示感谢。
基金项目
本文受国家重点研发计划项目(2017YFB1302400),江苏省科技计划产业前瞻与共性关键技术竞争项目(BE2018084),2019年北京高等学校高水平人才交叉培养“实培计划”项目(29041620001),北京2018年工信部工业互联网创新发展项目,2019年工信部工业互联网创新发展工程–工业互联网标识解析二级节点平台项目资助。