冯高敏,刘雨佳,2
(1.深圳供电局有限公司 安全监管部,广东 深圳 518000;2.浙江大学 电气工程学院,浙江 杭州 310058)
虽然目前我国的电力生产的自动化水平较高,但是仍然需要人员电力生产的过程进行监管,以及对电力线路和输电过程进行监控,同时对电力故障进行及时的通报和处理[2]。因此,仍然需要人员进行24小时值班。但由于工作人员在值班过程中缺乏有效监管,存在着工作不专心、分神等情况。容易引发未能及时处理突发问题等情况,可能会导致严重后果[3]。同时,由于人体身体机能的原因,当人员在夜间值班时,容易感到疲劳和瞌睡。目前解决此类问题的方法较少,因此,为了防止值班人员未能专心处理工作事宜,本文提出了一种基于视频的电力值班人员的状态判断算法(WATCH)。该算法主要由以下3个部分组成:人员头部姿态估计、人员面部关键点检测以及人员状态的判断。
相对于现有算法,本文的创新点有以下几点:①在WATCH算法中提出了一种基于流行学习的方法,并结合有向梯度直方图、广义判别公共向量和连续局部回归,对人员头部姿态进行估计;②对人脸关键点检测主要是从TREE算法中提取高斯引导的关键点位置图,并通过关键点回归网络预测人脸关键点;③为了提高准确性,WATCH算法在人员状态判断中结合多个特征状态,对人员状态进行了估计。
人员在非工作状态和疲劳状态时,其头部姿态会发生变化,为了更好检测人员状态,在此,将人员的头部姿态作为状态检测标准的一部分,所以WATCH算法先对人员的头部姿态进行估计。
在WATCH算法中对头部姿态估计框架由3个主要部分组成:基于方向梯度直方图计算的初始特征提取、基于广义判别公共向量(GDCV)的多值嵌入投影和由样条拟合以及多元局部回归组成的连续回归。图1描述了该方法的具体步骤以及每个步骤中涉及的子步骤。
图1 头部姿态估计流程
首先,在计算最终特征嵌入空间之前,提取HOG特征以增强图像中的判别信息。其基本思想是,局部物体的外观和形状具有良好的局部强度梯度和边缘方向的分布特征,而对光照变化和背景的杂乱变化不太敏感。虽然可以直接使用原始图像作为直接输入来生成流形嵌入,但是使用HOG特征得到的空间增强了姿势方向之间的区分。
WATCH算法选择定向梯度(HOG)描述器的局部归一化直方图,是因为它们相对于其它现有特征集具有优异的检测边缘方向的性能。这些描述器的实现可以通过将图像分割成较小的连接区域(单元),并且对于每个单元,计算单元内像素的梯度方向直方图(即边缘方向)。在每个单元中,HOG特征提取无需平滑即可计算居中的水平和垂直渐变方向和大小。最后,根据直方图或附近的单元或块,对直方图进行标准化。然后,这些直方图的组合表示描述器,使得通过强度梯度或边缘方向的分布来描述图像中的局部对象外观和形状。整个HOG特征提取步骤概括如下:①计算待描述单元区域的梯度;②根据方向放入bin中;③将单元分成大的块;④标准化每个块。
一旦计算出HOG特征,WATCH就要找到一个线性映射或投影到特征流形上,在特征流形上,输入图像与其角姿态之间的对应比在原始空间中更容易估计。
虽然许多降维方法,如主成分分析(PCA)或线性判别分析(LDA)可用于计算该嵌入,但应考虑头部姿势估计问题的两个特殊特征。首先,相同或非常接近的角度对应的姿势在投影后应保持在一起,而角度非常不同的姿势应尽可能分开,以便以后实现有效的回归。其次,该方法应该能够处理人脸图像数据的大维度(甚至更大的HOG特征维度)与训练集中的可用样本数相比,这导致了众所周知的小样本问题(SSS),在计算过程中产生奇异矩阵[4]。
由于广义判别公共向量(GDCV)[5]结合了这两个性质,因此在WATCH的框架中提出了广义判别公共向量(GDCV)。一方面,它提供了判别子空间,在计算机视觉和机器学习中具有良好的泛化特性,而不必考虑SSS假设。另一方面,GDCV是一种有监督的技术,利用类别信息,通过最大化类别之间的距离来获得最有判别性的空间,同时最小化同一类别内的样本之间的距离。在WATCH的设置中,类是转向(yaw)和俯仰(pitch)的可能角度。虽然角度估计问题在现实中是一个连续的问题,会产生无穷多个类,但实际上,训练中的角度数量是离散的和有限的,因为它受到训练集中两个姿势之间的获取过程和步数的限制。
(1)
(2)
(3)
对于给定的α值,满足上述条件的投影基可以通过Ur获得,这样r被重新分配。算法1给出了GDCV方法。
Algorithm 1:GDCV Method
Input:X∈Rd×M,α
通过使用投影矩阵WGDCV,并结合式(4),可以将任何样本xi投影到判别子空间中,以便更容易地分类
(4)
考虑到训练集通常偏向于某些角度,由于数据集通常是以固定的间隔记录的,因此利用这一特性来减少在这些情况下投影中的噪声。具体地说,如果该距离di,j低于小阈值(参考式(5)),则将先前的投影样本i细化到最近的判别公共向量j的位置。否则,如式(4)所示,投影保持不变
(5)
每个公共向量的阈值计算为到所有其它公共向量的最小距离的三分之一。具体公式如下
(6)
1.3.1 B-样条
B-样条是具有方便性质的数学曲线[6]。曲线重建问题是寻找B-样条函数f,使得隐式曲线f(xi,Y(xi))=0和点云之间的几何距离尽可能小。同时,利用隐式曲线具有最小的简化薄板能量的条件,期望曲线具有良好的质量。根据Pk控制点和Bk(xi)的B-样条基函数定义了曲线Y(xi)
(7)
1.3.2 多元线性回归
估计的头部姿态角的最终预测由回归模型提供,该模型描述了因变量Z=[yaw,pitch]和一个或多个独立(解释性)变量Y之间的关系。在多元线性回归的特殊情况下,一般模型可以写成如下
Z=Yβ+ε
(8)
同时可以将式(8)改写为
(9)
zil=β0l+β1lyi1+β2lyi2+…+βklyik+εil是第i个响应(i=1,…,M)的第l个输出(l=1,…,d')。βk'l是第k个回归系数(k'=1,…,k),εil是第i个噪声项,用于模拟随机误差。由于转向角和俯仰角是估计的,但是该方法可以被裁剪成只估计其中一个,或者进一步扩展到估计侧倾角。k由前一步嵌入空间的维数给出,k=(c-1)。
给定一组训练数据Y及其相应的解Z,可以很容易地将回归参数估计为
β=(YTY)-1YTZ
(10)
图2展示了训练框架的主要步骤以及相关的参数。
图2 训练方法和参数
在测试过程中,按照图3所示的工作流程计算新样本的头部姿势。
图3 测试方法
总而言之,让训练集X由M个样本及其对应的角度Z组成,算法2展示了MATCH算法头部姿态估计框架的主要步骤。
Algorithm 2:Main Steps of the Framework Propose to Head Pose Estimation
Input:X∈Rd×M,Z∈RM×1 or 2
(1)ComputeXHOG=HOG(X).
(4)Computeβby using Eq.10.
Test:xtest
(1)ComputextestHOG=HOG(xtest).
(4)ProjectxtestGDVinto the curveY.
(5)The angular prediction is allocated asxtestGDCVβ.
在日常活动中,除头部的运动状态以外,面部表情也是反映工作人员的状态的重要的评判标准。为了使判断更为准确,WATCH算法通过人脸关键点来检测人员的面部表情,本节将具体说明在本方法中所用到的人脸关键点获取的原理。
本方法使用HOG+SVM人脸检测算法,将最佳边框检测方法作为TREE算法[7]的核心,如图4所示。
图4 使用不同关键点检测方法结果
如上所述,在使用MTCNN[8]的情况下,这是另一个有效的人脸检测模型,它通过联合级联多任务学习方法学习了不同尺度的3个网络,但是该方法会在遵循TREE算法的初始边框中出现错误的拟合问题。
300 W数据集用于训练和测试。训练数据集由3148幅图像组成,包含68个关键点真实位置,分别是LFPW、HELEN和AFW。测试数据集由689幅图像和68个关键点真实位置组成,分别是LFPW、HELEN和IBUG。
为了应用来自TREE算法的关键点回归方法,只使用HOG+SVM检测到的训练图像进行训练。因此,在3148幅的300 W图像中使用3012幅图像进行训练。
对于关键点回归网络,WATCH对ResNet[9]结构进行了改进,该结构易于处理,弥补了较深层次神经网络结构的缺点,即梯度信息通过残差连接随着网络深度的增加而消失。
WATCH中的关键点回归网络如图5所示。
图5 WATCH的高斯引导关键点回归网络
利用从TREE算法中获取的先前关键点的信息,生成与输入图像大小相同的关键点特征图,然后通过高斯核滤波生成高斯引导的关键点特征图。输入图像和高斯引导的关键点特征映射在通道维度中连接起来,用作回归网络的4通道输入图像。
如图6所示,使用高斯引导的关键点特征图,强调关于关键点位置的输入信息,该信息可以被给予以使网络能够执行更精确的关键点检测。特征映射可以通过使用不同的高斯核大小进行修改。在WATCH算法中采用了ResNet50的高斯核,其大小为5×5。
图6 不同高斯核大小的高斯关键点特征映射
为了使用TREE算法的先前关键点的关键点回归,损失函数定义为
L=‖x-(yTREE+yPRED)‖2
(11)
式中:x是给定的关键点真实信息,yTREE是TREE的初始关键点。网络输出yPRED是关于将先前的关键点移动到真实位置的向量信息。
一般来说,人脸关键点检测的准确度计算为点方向归一化欧氏距离的平均值。MATCH算法使用标准化平均误差计算公式为
(12)
式中:x代表关键点的真实位置,而y是回归网络的预测。dinter是左眼和右眼界标平均坐标之间的欧几里得距离的眼距。然后,将眼距用于除以平均误差。N是关键点的数量,NME是所有关键点的平均误差值。图7展示了利用WATCH算法对人员张嘴状态下的关键点标记结果。
图7 张嘴状态下人脸关键点的位置
通过前面章节的计算,可以获得被检测者的头部姿势估计,以及头部转向和俯仰角度的估计。通过对头部姿态的获取可以得到被检测者在检测过程中是否存在如打瞌睡、分心等情况。结合3.2节以及3.3节内容,可以对被检测者状态进行分析。
如前所述,在一定程度上,眼睛的状态表明人员是否昏昏欲睡。因为清醒和昏昏欲睡的人闭上眼睛的时间有显著差异。文献[10]提出了一种描述瞳孔形状的椭圆拟合方法。该方法首先用传统的图像处理方法分割瞳孔。然后,用代表眼睛形状的白色像素来拟合椭圆。最后,利用椭圆长轴与短轴的比值来评价眼睛的状态。
但是它的性能可能受到以下因素的限制:①像素值是敏感的。多变的环境容易使图像分割效果变差。②在实际应用中,由于瞳孔与眼镜之间的像素值非常接近,导致假椭圆拟合。WATCH算法使用了一个新的更稳定的参数来评价人员的眼睛状态。它避免了传统的图像处理,比椭圆拟合方法更稳定、更精确。
在前一节中,得到了基于的面部标志。每只眼睛周围有6个点来定位眼睛的位置。如图8所示,眼睛关键点的分布在开闭状态之间存在显著差异。在WATCH算法中,眼睛宽高比被用来记录眨眼频率。
图8 不同状态下眼点分布的差异
根据眼睛关键点的位置,可通过以下方法计算
(13)
式中:Pi,i=1,2,…,6是眼睛关键点的坐标。
如图9所示,当人员眼睛睁开时,ES值大于0.2。相反,ES小于0.2。
图9 开闭状态下的ES的值
当被检测者在说话唱歌或者疲劳时,嘴巴都会产生变化,因此探究嘴巴变化也是对人员状态监控的重要方法。如图7所示,当利用前文所述的方法获取了嘴部的关键点后。利用关键点的坐标计算嘴巴张角(MOA),通过张角的大小来判断,嘴巴是否处于张开状态,具体计算公式如下
(14)
如图10所示,式(14)中θ1和θ2为嘴巴两侧的张角,两个张角值通过分别计算A,B,C,D,E,F这6个点的坐标的得到。
图10 MOA计算
根据文献[11]的研究可知,在现实环境中,当被检测人员感到瞌睡、分心时,头部姿态都会发生变化,尤其是当人员处于与他人交谈闲聊过程中,往往头部会发生转向,通过统计可知,一般在与两侧人员聊天时,头部转动最大角度为75°,因此从左往右转动角度变化范围为0°~150°。在WATCH算法中通过计算视频流中人员头部转动范围来估计该人员是否存在与他人闲聊、分心等非工作情况。同时,当人员处于瞌睡状态时,头部会向下倾斜,角度最大为60°。所以,WATCH算法通过判断头部的向下倾斜角度来判断人员是否处于瞌睡状态。并且在现实环境中,当人员处于瞌睡状态时,往往头部会多次向下倾斜。因此,WATCH算法还统计视频流1 min内,头部向下倾斜的次数,当次数大于5次时,认为该人员处于疲劳状态。
根据文献[12]可知,当人员疲劳时,视频中1 min内闭眼帧数在30%以上,因此在WATCH算法中,设置百分比阈值为30%,同时,当人瞌睡时,单次闭眼时间较长,在此,当单次闭眼时间大于2 s时,判定被检测者为疲劳状态。
由前面内容可知,当被检测者在进食、聊天、唱歌、打哈欠时、嘴巴都会张开。但是不同的嘴巴张角,代表着不同活动,通过大量数据统计以及文献[13]和文献[14]可知,当人在打哈欠时,嘴巴张角为70°左右,当人在聊天或者唱歌时,嘴巴张角一般为30°~50°,当在吃东西时嘴巴张角为60°。因此,通过设置不同的角度阈值,来判断人员可能的活动。同时,为了更加精确,WATCH算法还统计了1 min视频流内,嘴巴张闭次数,当人员在聊天时,嘴巴张开次数大约25次,当人员在进食时,嘴巴张开次数大约为10-15次,当人员疲劳时,打哈欠导致嘴巴张开次数大约为2次。
整个人员状态判断过程的具体算法如下:
Algorithm 3:State estimation algorithm for WATCH
Input:frames of the video
Output: Evaluation of people’s state
Load the frames of video
Assess the states of the eye, mouth and head
Calculaterthe ratio of the frame of eye closure in 1 minute andta duration time of eye closure.
Calculateythe number of opening the mouth in 1 minute
and MOA.
Calculatetpthe number of head pitch in 1 minute andhp,hythe angle ofpitchandyaw.
Iftp>5then
wtp=1
Endif
Ifr>30%then
wr=1
Endif
Ift>2 s and MOA=0then
wt=1
Endif
If2≤y<10then
wy=1
Elseif10≤y<20then
Peopleiseating
Elseify>20then
Peopleistalking
Endif
If60° wMOA=1 Elseif50° Peopleiseating Elseif30° Peopleistalking Endif If-60° People isdrowsy Endif CalculateTthe total value of these weight. (T=wtp+wr+wt+wy+wMOA) IfT≥3then People is drowsy Else People is awake Endif 图11展示了WATCH算法的检测系统原型,其中显示了系统的不同组件及连接方式。该原型用一个罗技的网络摄像头作为视屏采集的工具,采用树莓派3 Model B+作为预处理器,对图像进行处理。树莓派有一个SD卡插入板上的插槽,它充当树莓派的硬盘存储器。整个系统由USB供电,视频输出可以连接到监视器等,也能将视频流通过WIFI传输给云端服务器。本文为了方便处理,将视频信号通过WIFI传输给个人电脑,进行后续操作。电脑型号为Macbook Pro笔记本电脑,3.5 Ghz酷睿i7处理器,16 G内存。程序运行环境为python3.6,Anaconda1.9.7,OpenCV3.4和Tensorflow 1.8. 图11 WATCH算法检测原型系统 在头部姿态估计部分,WATCH算法采用了CMU-PIE[15]、Taiwan[16]、PRIMA[17]、CASPEAL1 and 2[18],5个数据集来评估性能,在人脸关键点检测部分,WATCH算法采用了300 W关键点检测公开数据集来评估性能。对于状态评估,由于目前未有公开的相关数据集,因此采用了自制数据集的方法,通过采集20位志愿者(男性志愿者为15人,女性为5人,年龄分布为25岁-48岁,平均年龄35岁,男性平均身高为174.5 cm,女性平均身高为163.2 cm)的相关视频信息,制作成数据集。每段视频时长达1 h。并且需要在视频中模拟出瞌睡、清醒、聊天、进食等相关状态。 4.2.1 头部姿态评估 在本实验中,在同一数据集的不同分区上进行训练和测试。具体来说,使用所有5个标准数据集,并用50%的样本进行训练,用剩余的50%进行测试,交叉验证作为评估方式,以避免偏向于特定的训练/测试分割,其中每个实验用不同的随机训练/测试样本选择运行10次。在相同的训练/测试设置中,WATCH方法与HPE[19]进行了比较。DRMF[20]和OPENFACE[21]也被加入到比较中,以供参考。结果见表1。 表1 使用完整头部图像作为输入数据集的平均误差 从表中可以看出,首先,WATCH使用的方法有着最佳的结果,相对于第二好的方法HPE,WATCH使用的方法误差度大大降低。虽然HPE的转向误差有0°到37°,俯仰误差最大增加25°,但根据数据集的不同,WATCH使用的方法在转向误差方面仅从0°增加到9°,俯仰误差增加到20°。还可以注意到,俯仰角似乎更难估计,尽管这很可能是由于训练示例较少的结果,因为并非所有数据集都具有不同俯仰的图像。 4.2.2 关键点评估 图12展示了WATCH中的关键点检测方法与TREE[7]和TCDCN[22]的结果比较。 图12 3种方式的结果比较(NME:10-2) 在图12中,第一列为TREE,第二列为TCDCN,第三列为本文方法。从图中可以得出,带有HOG+SVM检测边框的TCDCN方法,由于检测与关键点之间的不能对齐,所以其性能较差。WATCH使用的回归网络表现出最好的性能,该方法为TREE方法的优化版本。这验证了初始先验信息对于回归任务的重要性。 图13显示了TREE和本文方法对于相同数据集的输出结果。从图中可以看到,WATCH算法使用的人脸关键点检测算法的网络输出的方向向量更接近于实际情况。 图13 人脸关键点检测结果对比 4.2.3 人员状态评估 利用制作好的数据集,对WATCH方法进行了评估,结果见表2。 表2 不同环境下WATCH对人员行为评估准确性 从表中可以看出,WATCH算法对于人员疲劳情况判断准确率较高,平均能达到95%。对于进食状态评估较差,精确度只有79%。通过分析可知,导致该结果的原因在于由于进食情况下人员张嘴大小较小,并且次数较少,所以导致了精确度不高。 目前由于现有的利用视频对人员状态进行检测的算法重点大多数在于检测人员是否疲劳,未涉及到是否存在人员分心状态,所以在此只对比WATCH算法和其它算法对人员疲劳检测的结果,见表3。 表3 WATCH算法与其它算法对人员疲劳检测结果 从表中可知,WATCH算法的平均精确度是4种算法里面最高的,尤其是相对于Picot等[24]算法,精度提高了近13%。因此WATCH算法在疲劳检测方面能够满足实际需求。 针对电力值班人员在非人为监督情况下的状态判断,本文提出了一种名为WATCH的基于视觉的人员监视方法,该方法利用人的头部姿态以及人脸关键点,对人员状态进行判断,可以知道人员是否存在瞌睡,进食或者聊天等行为,从而达到对电力人员行为的监督。为更好地实现WATCH算法,本文还提出了一种人员头部姿态估计的方法,以及一种人脸关键点定位方法。从实验结果来看,WATCH算法满足日常工作需求,具有较好性能。4 实验与结果
4.1 实验设置和数据集
4.2 算法性能
5 结束语