基于神经网络的坐姿下头部肩部姿态估计*
2021-12-30陈锦涛石守东郑佳罄胡加钿房志远
陈锦涛, 石守东, 郑佳罄, 胡加钿, 房志远
(宁波大学 信息科学与工程学院,浙江 宁波 315211)
0 引 言
当前我国青少年近视患病率呈高发态势,职业性肌肉骨骼疾患患者日益增多。有证据表明,青少年近视主要由其不良坐姿所引发的近距离用眼导致,而职业性肌肉骨骼疾患也同样与长期保持不良坐姿密切相关。而坐姿的研究离不开头部以及肩部姿态的估计,因此该研究在人机交互、医疗健康、交通安全等领域具有较高的应用价值。
对于坐姿中头部以及肩部姿态的研究方法,单独进行头部姿态的研究较多,对肩部以及两者结合对于坐姿的研究较少。其研究方法主要分为两大类:基于穿戴式传感器方法以及基于图像采集法。Kinect利用多个传感器快速定位人体的20个关键点并追踪,还能实时计算空间深度信息。文献[1]使用Kinect获取人体关节点,并基于隐马尔可夫模型(hidden Markov model,HMM)对人姿态进行识别。文献[2]用Kinect由低分辨率3D数据通过误差的预期分布模型与局部加权回归方法组合来移除异常值并构建高分辨率面部模型。文献[3]提出一种三角形表面补丁描述符(triangle surface patch descriptor,TSP)估计头部方向和位置。文献[4]通过双支路多级卷积神经网络处理二维图像,基于部分亲和字段(partial affinity fields,PAF)分段分布进行各部分的链接,第一分支估计人体的二维置信图,第二分支计算各部位的关联度,得到多个面部点,识别效果好。
文献[5]基于模糊肤色分类器和颜色特征的人脸追踪,通过高并行图形处理器(graphics proceessing unit,GPU)计算、分类器权重预计算等方法提高设备在高分辨率视频图像中稳定追踪面部的能力,并在3D图像中由对面部位置估计实现对头部运动的追踪。文献[6]用机器视觉技术实现了实时分析人类坐姿图像,并依从一定的规律抓取视频流中的两个帧,以定位用户的眼睛、嘴巴、肩膀,将定位结果综合并于基准坐姿图像对比以确定属于何种坐姿类型。
利用摄像头采集二维图像的方法成本低、易推广。利用神经网络算法对图像中头部以及肩部进行检测在近些年涌现出一些成果,例如利用监督下降方法(supervised descent method,SDM)、卷积神经网络(convolutional nenral network,CNN)、深度神经网络(deep neural network,DNN)等算法对头部进行估计以及OpenPose对人体关键点进行检测的理论都已成熟。
利用神经网络算法对采集后的图像进行处理,再对姿态进行判断,既可以解决穿戴式传感器穿戴繁琐的缺点,又可以解决Kinect价格高昂的缺点,为判断姿态的实时性以及低成本提供了可能。
1 SDM人脸对齐原理
人脸对齐即人脸关键点定位,目标是自动定位面部关键点,目前被应用在许多主流的人脸分析任务中:表情识别[7]、人脸验证与识别[8]、人脸动作捕捉[9]以及人脸属性分析[10]等。近年来,大量人脸对齐方法涌现。在众多方法中,级联回归[11~15]方法实现了很好的人脸对齐结果。级联回归的方法是通过回归关键点位置处提取的特征从而逐步逼近真实关键点位置。
SDM[15]是众多级联回归方法中最有效的方法之一。属于解决非线性最小二乘(non-linear least squares,NLS)问题的一种方法,利用一级接一级的学习矢量回归函数来对齐人脸,通过不断估计形态增量来持续的精细化人脸形状。其基本内容就是特征映射到偏移量。
1.1 方向梯度直方图特征提取
SDM算法对均值人脸的标记点特征进行计算从而提取出方向梯度直方图(histogram of oriented gridients,HOG)特征,串联所有的人脸特征点从而得出样本特征向量。从而求得线性方程lx=R的解。
HOG为将被检测图像的部分区块梯度方向直方图来组成图像的特征。因梯度主要表现在图像中物体的边缘位置,所以对采集图像的质量要求不高,对各种镜头畸变、透视变化等干扰具有较强的鲁棒性。并且HOG特征具有不易受光线环境干扰的优点,使得在复杂光线环境下还能正确识别检测人体面部姿态。
HOG特征的提取过程如下:
1)将待提取特征的输入图像进行标准归一化,使图片中光照的影响程度降到较低的水平;2)对于整幅图像中的每个像素,都需要求出这个像素的梯度方向和幅值,数学描述如式(1);3)将图片中每个像素以长宽各8个像素划分区域,对于每一个64像素的区域进行梯度的统计加权投影;4)对每个划分区域进行归一化处理,去除干扰信息;5)对于图像中的各个块都进行HOG的统计,转换为下一步分类需要使用的特征向量。式(1)如下
(1)
式中Gradx,Grady分别为该像素横向和纵向的梯度。
1.2 主成分分析降低数据维度
由于面部特征点的HOG维度较高,计算时间过长,因此本文使用了主成分分析(principal component analysis,PCA)法降低数据的维度,加快运行速度提高训练效率。该方法的具体步骤如下:
首先定义一个贡献值C,也称为主成分比重,其定义为
(2)
式中all为初始待降维特征向量个数;C值通常取85 %以上,经测试本文取97 %。
对于投影后的n(n (3) 式中m为数据集个数,x为数据集X中数据。 对于头部动作种类,文献[16]和文献[17]分为6种,分别为:前倾Pf,后仰Pb,左转Yl,右转Yr,左偏Rl,右偏Rr,并给出了相应判断标准。 目前常用的头部位姿表示法主要有两种:欧拉角及面部朝向。因为面部朝向方法无法准确描述头部的姿态,因此本文利用POSIT算法计算出头部欧拉角,设定阈值进行头部位姿估计。该算法理想情况下可实现的检测角度范围如表1所示。 表1 POSIT算法检测范围 POSIT算法利用SDM算法中的少数代表性特征点对头部的欧拉角进行计算。本文中确定的少数代表性特征点分别为右眼右眼角、右眼左眼角、左眼左眼角、左眼右眼角、鼻尖、左嘴角、右嘴角。此7个特征点在人脸各个角度都能较完整反映头部位置关系。 假设未知的头部姿态旋转矩阵R与平移矢量T定义如下 (4) 假设世界坐标系中点(Xw,Yw,Zw)通过推导得出 (5) 式中s为比例参数,x,y为图像中坐标位置。代入7个特征点三维空间坐标后求出R1以及R2,通过R1×R2求得R3。通过迭代最终求解出R与T,最终得到三个方向欧拉角 Yaw=arctan2(R32,R33) (6) (7) Roll=arctan2(R21,R11) (8) 利用文献[16]和文献[17]中6个头部姿态方向的标准对头部欧拉角进行阈值设定,最终得到头部姿态集合 HA={null,Pf,Pb,Yl,Yr,Rl,Rr} (9) OpenPose使用的Coco数据集产生的模型文件最多能检测到人体19个关键点并进行连线。如图1所示。 图1 OpenPose检测关键点 由于本文仅用于判断坐姿下的肩部姿态,因此对检测模型进行优化,仅需1号、2号、5号关键点用于肩部姿态的判断。利用OpenPose算法对优化后的模型进行关键点检测。再利用2号和5号关键点连线与水平的夹角来判断是否出现双肩高度不一致。由于考虑到高低肩等因素,将夹角阈值范围设定为5°。在图像坐标系下,Δx为5号关键点和2号关键点水平方向坐标差;Δy为5号关键点和2号关键点竖直方向坐标差。对于两类肩部姿态,判断标准分类如下:左肩高右肩低:arctan(Δy/Δx)<5°;右肩高左肩低:arctan(Δy/Δx)>5°。 系统基于Windows10系统、Visual Studio(VS)2017,OpenCV3设计,内存为4GB,实验分为两部分:头部姿态的估计以及肩部姿态的估计。最终合并姿态进行姿态判断。 将摄像机采集到的单帧坐姿图像输入,利用SDM算法对人脸进行标定,标定结果如图2。 图2 SDM人脸标定结果 如图2所示,SDM算法成功标定脸部关键点,并且关键点清晰。由于本文使用PCA法进行降维操作,此处选取300张人脸图片对传统SDM算法与本文算法进行比较,比较结果如表2所示。 表2 传统SDM算法与改进算法比较结果 本文方法在漏检率上虽有小幅提升,但平均耗时明显降低。对于实时坐姿检测而言,改进后的方法漏检率仍然符合要求,但检测平均耗时降低后相比传统SDM算法更符合实时性。 获取脸部关键点后,利用POSIT算法对头部欧拉角进行计算,分别得出Yaw,Roll和Pitch三个方向欧拉角。分别对6种头部姿态的300张图像进行头部姿态估计,得出结果如表3所示。 表3 头部姿态估计效果 本文方法在耗时以及正确率上都有较好的表现,但由于部分图片中人物眼镜以及头发的遮挡导致算法无法检测到人脸关键点从而造成误检,但正确率以及误检率都可以接受、且检测效果良好。 将预处理后的图像利用OpenPose算法进行肩部关键点检测,检测关键点后对其进行连线。检测结果如图3。 图3 OpenPose检测结果 如图3所示,算法成功检测出1号、2号、5号关键点,且关键点清晰,可用于后续肩部姿态估计。 得到肩部关键点后,利用坐标信息计算其连线相对水平夹角进行计算,最终对肩部姿态进行估计。分别对2种肩部姿态的300张图像进行肩部姿态估计,得出结果如表4所示。 表4 肩部姿态估计效果 % 由于图片中部分人物服饰与背景相近,导致一定程度上无法正确定位肩部关键点从而造成误检。OpenPose算法定位出的关键点较准确,因此正确率较高。 基于6种头部姿态以及2种肩部姿态,结合可细分出12种更详细姿态,例如头部前倾同时肩部左高右低的姿态。再加上标准姿态,共计有21种姿态。对20个志愿者各采集21种不同姿态的图像,样本考虑了年龄分布和性别差异,40岁以上占比30 %,20~30岁占比50 %,女性占比50 %。使用上文方法对采集的图像进行姿态估计,估计结果分类为4大姿态,分别为标准姿态、头部错误姿态、肩部错误姿态以及头部肩部同时错误姿态,估计结果如图4。 图4 姿态估计准确率 实验结果良好,识别正确率均在90 %以上。可以看出,对肩部的姿态的识别效果较好,当肩部服装与背景颜色相近时会造成小概率漏检现象,但总体对肩部姿态的识别准确率较高,在95 %以上;头部姿态识别时,图片中人物面部头发遮挡较多以及眼镜的存在造成漏检现象,使得准确率降低,另外,头部运动的偏转角度过大也会降低检测的正确率,但准确率依旧高达90 %以上。 本文设计的方法具有精度高同时检测速率快等优点,满足生活中对坐姿实时判断的需求。利用改进SDM算法检测人脸关键点用于头部姿态的判断既降低传统方法中使用穿戴传感器检测的成本以及不便性,又同时保证了检测精度和速率;同时利用OpenPose算法检测肩部保证了坐姿状态下肩部姿态估计的准确性。实验证明,该方法准确有效。但本文的方法没有很好解决头部眼镜等遮挡的问题以及肩部旋转的问题,接下来的工作可考虑利用双目摄像头结合深度信息进一步提高检测准确性。2 头部姿态估计
3 肩部姿态估计
4 实验设计与分析
4.1 头部关键点检测
4.2 头部姿态估计及验证
4.3 肩部关键点检测
4.4 肩部姿态估计及验证
4.5 姿态估计验证
5 结束语