1. 引言
每个人都需要充足和优质的睡眠,较差的睡眠对人类的身体健康和精神状况有非常大的影响。睡眠姿势是衡量睡眠质量的关键指标之一。例如,对于婴幼儿和青少年,良好的睡眠质量对于健康成长意义重大,如果不能及时纠正一些有害的睡眠姿势,会造成骨骼发育畸形,对于疗养院或者卧床不起的病人,不良的睡眠姿势也会导致相关疾病,如心血管病和肺部慢性阻塞性疾病 [1] 。监控这些特殊的人群的睡眠姿势是非常有必要的,也有利于对多种医疗诊断或治疗计划提供临床建议 [2] 。如图1列出了一些睡眠姿态的示意图。其中,第9、10和11所示的三种常见睡姿容易导致颈部僵硬,甚至造成落枕;第13和18所示的睡姿会导致呼吸困难,尤其是对睡眠呼吸暂停综合症患者。因此,开发一套高效准确地识别人体睡姿的智能系统不仅能及时纠正不良睡眠姿势,而且减轻了在医疗养院的医护工作人员的压力。
当前,睡眠姿势的采集主要有三种方式,基于相机,基于可穿戴的传感器设备,以及基于压力床垫的。通过这些设备采集到相关的睡眠姿态数据,并构建相应的分类器模型进行识别。Heydarzadeh等人 [3] 利用睡眠者的压力图数据,使用神经网络识别睡姿,准确率达到98%。Tang等人 [4] 使用压力传感器垫收集测试者睡姿压力图,并采用卷积神经网络识别四种主要姿势——正面朝上、正面朝下、右外侧和左外侧,尽管取得了90%左右的分类准确率,但使用了大量传感器,相比之下Viriyavit等人 [5] 仅使用两个压力传感器进行数据收集,也取近似的准确率。此外基于视觉的睡眠姿势识别方法也被研究人员广泛利用,视觉信息通常是RGB图像,并且具备红外探测的深度相机采集睡眠姿势。例如,Ren等人 [6] 采用RGB图像并提出了一种基于Kinect传感器和模糊逻辑与机器学习相结合的方法,能够准确、高效地识别20种不同的人体躺卧姿势。Yu等人 [7] 通过采集人体和头部数据来测量呼吸运动和识别睡眠姿势。Kuo等人 [8] 使用基于红外辐射的夜视摄像机来捕捉患者睡眠的姿势图像来识别睡眠方向。具备加速计和陀螺仪的可穿戴设备也被用来检测睡眠模式。此外,Lee等人 [9] 采用一种连接到身体或衣服上的传感器来测量心电图从而估计身体姿势,但可能会对用户造成少许不适或负担。
对于睡姿识别,由于应用领域不同,以往的研究主要集中在粗粒度的躺姿分类上,并且分类模型都是在闭集数据上进行训练的。在闭集数据中,一个良好的分类器模型固然可以有效识别出一些常见的睡姿,但是对于一些奇特的有害的睡姿无法准确识别甚至误判。这是因为训练集中没有这些数据,而闭集识别模型又无法拒绝一个未知类别,而将其错误的划分到一个已知的类别中。所以一个很自然的解决方法就是开放集识别 [10] 。现实中的由于人体的柔韧性,特别是儿童,睡眠姿势多种多样,一个实用的睡眠姿势分类器模型不仅能识别出已知的睡眠姿势类别,还应该判别出新颖的睡眠姿势类别。目前,虽然已经有大量关于开放集识别的应用,但是尚未有基于开集识别的睡姿检测方法。所以本文提出一种开放集活动识别的通用框架,主要完成两个方面的任务:标准监督分类和新颖性检测。首先通过新颖性检测模块计算输入睡姿的新颖性得分,并根据可变阈值判断该睡姿是否属于已知类别。如果该睡姿被判断为未知类别,则会被标记为“未知”;否则,该睡姿将被传递给分类模块并被识别为已知类之一。为了验证模型的性能,本文还构造了一个模拟真实环境下可能的睡眠姿势数据集,同时还采用一种公开的压力图睡姿数据集 [11] ,按照不同的比例划分已知类和未知类来构造开放集。实验结果显示,本文方法不仅能够有效识别已知的睡眠姿态还能够高效识别新颖的睡眠姿态。
2. 开放集识别介绍
开放集识别问题不同于闭集识别,具体见图2所示,比较开集和闭集的差异,其中(a)展示了原始数据集的一小部分类别分布,(b)显示传统闭集识别往往将未知类别识别为已知类,如图所示类别4和6被错误判别。(c)描述开集识别是如何工作的,显然已知类具有明确的边界,未知类也没有被误判。考虑带有标签的数据集来训练一个分类器
,这里I是输入图像,C是已知类集合。如果我们做闭集识别,那么用来评估模型的测试集的标签是和已知类的相同,即
(1)
在闭集情况下模型返回一个属于已知类的概率
。如果在开集情况下测试图片可能包含来自未见过的类别U,则分类器
(2)
在开放集情况下,除了要返回一个概率值
,该模型还要返回一个分数
表明是否测试样本属于任何已知类别 [12] 。
(a) 数据集的分布 (b) 闭集识别 (c) 开放集识别
Figure 2. The difference between closed set recognition and open set recognition
图2. 闭集识别与开放集识别的差异
当前开放集识别在很多方面取得了很好的研究成果,例如在人脸识别,人体行为识别,但目前几乎没有在人体睡姿识别的应用。开放集识别表明区分已知类和未知类的能力在任何识别系统中都是必不可少的。过去开放集识别的研究大多基于经典的机器学习方法,例如,One-Class SVM [13] 是一种使用非概率异常检测方法,该模型寻找一个超平面将样本中的正例划分出来,并用此超平面做决策,在边界内的样本就认为是正样本。高斯混合模型 [14] 从概率的角度解决问题,采用已知类别数量的高斯分布混合,并使用期望最大化算法估计模型参数来拟合已知的活动,然后使用概率密度函数来量化未知类。基于深度学习的方法,Hassen等人 [15] 提出了一种基于神经网络的表示方法和一种基于度量的损失函数解决OSR问题,该损失函数在训练中或者计算异常值得分时都使用同一个距离函数进行度量。此外使用生成对抗网络思想可以对数据进行扩充,Yang等人 [16] 基于GANs,用生成器生成与目标样本高度相似的样本并自动作为负的样本集,并且重新设定了分类器输出多个类别和一个“未知”类。最基本的开放集识别算法模型是在训练阶段对于已知类采用交叉熵算法,在测试阶段,最大SoftMax概率被用来判断输入是否是已知类还是未知。对于已知类的识别可以添加一个额外的多路分类组件,以便能够判断输入是那种类别。
3. 开放集识别模型
3.1. 概述
本文提出的开放集环境下睡眠姿势识别模型可以解决两个任务:一是对训练过的睡姿类别进行常规监督分类,二是区分未知类别的能力。模型首先使用一个深度卷积神经网络作为中间层,对输入图像进行特征提取,然后将提取到的特征向量,经过分类器预测并传递到新颖性检测模块中得到新颖性得分,最后通过阈值比较(为了选择合适的阈值,可以使用验证集上ROC曲线的等错误率(EER)作为判断阈值)对新颖性分数进行判断,根据结果,将图像转移到监督分类模块或标记为未知类别 [17] 。模型架构如图3所示。
Figure 3. Open-set sleeping posture recognition model structure
图3. 开放集睡姿识别模型结构
3.2. 标准监督分类模块
为了在开放集环境下构建学习和分类,本文搭建了一个深度卷积神经网络模型来处理输入的图像。该模型的前馈网络包含了卷积层,Batch Norm (BN)层以及LeakyRelu激活函数,主要用来提取输入图像的特征。其中卷积核大小全部采用3 × 3大小,不仅可以减少模型参数,还可以加深网络模型层数提取更多深的特征,在卷积层之间没有采用最大池化层,而是直接通过卷积增加步距来达到同样的效果,这样做的好处也是提取更多的特征,通过最后的平均池化下采样得到输入图像的特征向量。这里假设
是包含压力图的数据集,对于一个带有标签的图像,形式化上为
这里x是输入图片,y是对应的姿势类别。网络模型目的是学习一个函数
,这里
是一系列训练参数,
是将压力图x映射在一个特征空间内,在这个空间内模型可以很好的区分睡姿。将测试图像输入到模型中,对图片经过多层卷积提取出包含有效信息的特征向量,然后通过全连接层,再输入到SoftMax层得到图像属于某个类别的概率值,公式如(3)所示:
(3)
这里
表示第i个全连接网络中的神经节点输出的logit值。
采用多分类交叉熵函数作为模型的损失函数,见公式(4):
(4)
这里
表示第j个类别的标签,
表示输入x是
的概率值。
3.3. 新颖性检测
从概念上讲,新颖性检测模型由两个部分组成:1) “组长”和2) “组会”。组长是指分类器在预测某个样本x的类别时具有最高置信度分数,通常基于最高SoftMax预测分数来选择组长。组长通过投票支持样本x属于它自己的类别,并假设x的类别是已知类别之一,即
。组会成员是基于其与组长的不确定性方差关系而选择的。每当组长决定样本x的类别时,其组会将会召开会议,并对组长的决定进行投票。然后,组会成员将共同决定组长是否做出了正确的决定,或者是错误的。下面详细解释如何测量分类器的不确定性;选择组长及其组会成员;最后,给出新样本的新颖性投票过程。
1) 测量分类器的不确定性
在深度学习的背景下,通常认为每个类别的单点估计,由SoftMax层的输出表示,是置信度的度量。然而,这种做法不准确,因为即使在产生高预测得分时,模型也可能非常不确定类别是否属于已知类别。解决模型置信度的一种方法是以后验分布为目标,而不是每个类的单点估计。在贝叶斯神经网络(Bayesian Neural Networks) BNN中,这是通过在模型权重上放置先验来实现的,因此学习参数和预测值成为概率分布。给定网络参数w和训练集
,BNN的预测概率是通过对参数空间进行积分得到的。因此,预测
是所有可能的参数组合的均值,加权其后验概率而得到的,如下式:
(5)
由于BNNs具有困难的推断方案和高计算成本。因此,本文利用文献 [18] 提出的一个模型,即在测试时迭代应用Dropout,然后计算模型的输出统计数据,这是BNN后验分布的变分近似,其网络参数建模为高斯过程。这种方法被称为MC-Dropout方法。
因此网络模型不再给出单点估计,而是预测每个已知睡姿类别的高斯分布。具体来说,假设输入样本z,通过上述卷积神经网络的最后平均池化下采样层,提取到特征向量X。W和b分别是最后一个全连接层的权重矩阵和偏置。通常,网络权值W在测试时是确定的,Dropout只在训练时起作用,这次是在测试时应用Dropout,现在通过M次随机迭代计算平均值作为输入样本的预测分数:
(6)
其中D是对角矩阵,对角线元素包含二进制值,以
的概率将对角线上的元素设置为1,为p的概率设置为0。进一步计算模型的预测不确定性作为分布方差:
(7)
2) 组长及其组会成员
组长的选择不同于过去使用基于输出层的SoftMax分数的点估计方法来选择组长,而是在这里利用更稳定的基于Dropout的预测均值估计。因此,在M次采样迭代中,组长被选为期望预测分数最高的分类器,如下公式所示,其中,根据公式2估计
。
(8)
组会的成员
,是基于它们关于组长投票类别的样本(即
)的不确定性方差来选择的。换句话说,那些在组长对自己的类别的样本进行分类时表现出非常低的不确定性的分类器被选为其组会成员。在这里,将初始集合随机分为一个用于模型优化和参数估计的训练集
和一个用于迭代选择所有分类器的组会成员的保留集合
。具体而言,使用9/1的比例进行训练和保留数据集的划分。首先,使用
估计深度模型w的参数。然后,在
中对所有样本评估模型。对于模型中的每个类别分类器,构建一个真正的正样本集
。对于中的每个样本
,使用MC-Dropout方法估计其他分类器
(这里
指不包含
)的不确定性
。然后,估计这些分类器不确定性的方差为:
(9)
其中N是
的个数,
是分类器
在
上的不确定性期望。最后,方差低于固定可信度阈值
的分类器被选为
的议会成员,一般取
。
3) 新颖性投票
给定训练好的模型和上一步的所有组会成员集合,可以按如下方式为一个新样本x生成新颖性分数。算法伪代码如下所示。
除了以上体到的模型外,本文考虑了模型的另外两个变体来计算新颖性分数。第一种(Model Variants 1):在这种情况下,没有组员,所有的分类器都有权为任何组长投票。因此,上面算法中的步骤7被替换为如下计算公式:
(10)
第二种(Model Variants 2):与之前的计算方式不同,在这种情况下仅利用组长的不确定性来预测样本的新颖性,即
。
当模型计算出新颖性分数
,就可以使用敏感度阈值
来判断x是否来自新类别的样本,这个阈值可以使用从验证集估计的接收者操作特征曲线(ROC)的等错误率(EER)。那么,如果
其类别被作为已知类别,并最终由分类器输出分类结果,否则将识别为未知。
4. 实验
4.1. 数据集介绍及评价指标
本文使用两种数据集。第一种数据集是公共数据集 [11] ,是使用压力传感器垫收集的压力图,如图4所示。总共13名受试者参与此处实验。对每一个人采集17种睡眠姿势,其中包括8种标准姿势和9种额外的不寻常姿势。这些姿势都是使用Vista Medical FSAx2048压力传感器垫收集压力数据,该床垫有2048个1平方英寸的传感器,放置在32 × 64的网格上。每个受试者在床垫上躺大约2分钟。受试者的年龄范围在19~34岁,身高170~186 cm,体重63~100 kg。此次数据收集总共记录了大约23,400份样本。
Figure 4. Sleeping Posture pressure diagram
图4. 睡姿压力图
为了更好地验证模型性能,本文通过模拟现实中常见的睡姿,构建了一个新的睡姿数据集。总计12名受试者参与数据采集,对每个人采集15种睡眠姿势,具体如图5所示。这些姿势全部都用Kinect相机采集,最终生成RGB图像。在数据收集过程当中每名受试者都保持一个相对放松的状态。我们提供了一张容纳一个人的道具床,每名受试者在床上躺大约2分钟左右。受试者的平均年龄在24岁,身高在175~183 cm之间,体重62~73 kg。最终累计采集了大约15,000份睡姿样本。
图5中编号从1~15,睡姿的类别依次是:1) Left;2) Left Body-roll;3) Left Fetus;4) Prone;5) Right;6) Right Body-roll;7) Right Fetus;8) Supine;9) Supine Hand Crossed;10) Supine Left Knees Up;11) Supine Left Up;12) Supine Right Up;13) Supine Right Knees Up;14) Supine Start;15) Supine Up。这些姿势的含义在表1给出详细说明。
Table 1. Sleeping posture categories significance
表1. 睡姿类别解释
为了更好地模拟真实世界的睡眠姿势,本文通过划分不同的数据集来组成开放集,即确定那些是已知类,那些是未知类,如表2所示。其中C代表已知类别,U代表未知类别。
本文的开集识别模型的性能评价指标采用准确率(ACC.),接收者操作特征曲线下的面积(AUROC)指标 [19] ,精确率–召回曲线下面积(AUPR) [20] 这三个评价指标上进行定量的评估,其中ACC.用于评价分类器识别已知类的精度,AUROC用于评价开放集下分类器的精度,AUPR用于评价当已知类和未知类数据不平衡时分类器的性能。
4.2. 实验结果
根据本文提出的模型,当输入睡姿压力图,经过特征提取网络的可以有效地提取输入的特征,其结果如图6所示,总共8种大小为12 × 12不同睡姿类别的特征图:
Figure 6. Feature map of sleeping posture
图6. 睡姿压力特征图
进一步,将测试集中特征提取到的向量映射到二维空间中的分布。如图7所示,图像的特征空间分布,在训练开始时,所有图像都被嵌入到相同的幅度中,随着训练过程的精度提高,已知类别特征的分布比未知类别更加明显。这表明了模型的准确性和有效性。
为验证本文提出的模型性能,在预先划定的开放集上进行了实验,如表3所示,模型取得了约99%的平均准确率,超过了之前在闭集分类研究的结果。此外,模型在AUROC和AUPR指标下表现出了优异的性能,表明它具有区分已知和未知类别的能力。值得注意的是,模型在不同的开放集环境下的性能有所变化,特别是,在RGB数据集下,性能更好。
(a) (b) (c)
Figure 7. Feature distribution map
图7. 特征分布图
Table 3. Performance metric of model in different open-set scenarios
表3. 不同开放集环境下模型的性能指标
根据实验结果,随机选取一种开放集情况,例如第四种划分,分别给出了模型在测试过程中压力图数据集和RGB睡姿数据集下的ROC曲线以及PR曲线,如下图8所示。
此外,为了验证本文提出的模型性能和传统新颖性检测模型之间的差异,在“压力图 + Three”划分的开放集上进行了实验验证对比。如表4显示,在开放集下的新颖性检测中,可以看到传统的神经网络方法相对于传统的机器学习模型具有优势。但是基于贝叶斯不确定性的方法超过了传统神经网络的SoftMax置信度,并且在RGB图数据下,AUROC指标上超过了5.6%,AUPR指标超过了9.6%。
Table 4. Performance metric of different methods
表4. 不同方法的性能指标
5. 结论
本文提出了一种在开放场景下的睡姿识别算法模型。该模型主要完成两个任务:标准监督分类和新颖性检测。通过在两个数据集上进行了交叉验证,实验结果显示模型可以区分哪些类别是已知的,哪些是未知的,并且2D特征上有明显的区别。与以前的封闭集工作相比,该方法可以对从未遇到的类别进行有效的判断,而不是将其误判为已知类别,在封闭集情况下的识别准确率也优于以前的工作。通过在分类过程中建模贝叶斯不确定性,模型可以识别出具有高不确定性的数据点,并将其分类为未知类别,从而提高模型在开放式识别中的准确性。对于未来的工作,可以关注更多的卧床行为,或者同时采集个体睡姿的压力图和RGB图像信息。
基金项目
国家重点研发计划(2019YFB1705702)。