汪 威,罗 石,耿国庆,刘 军
(江苏大学 汽车与交通工程学院,江苏 镇江 212013)
无论是无人驾驶还是先进辅助驾驶,行人都是研究的重要因素.目前,行人识别研究很多注重行人整体、相关细节检测及行人运动轨迹的研究.袁朝春等[1]利用行人动作分析行走意图,再用行走意图修正卡尔曼滤波对行人轨迹进行预测.M.D.SULISTIYO等[2]提出了一种属性感知的语义分割模型用以估计行人朝向.CAO D.等[3]提出了一种基于时空图卷积神经网络的行人轨迹预测算法,该方法采用图卷积神经网络方法构建行人骨架,基于行人意图预测行人轨迹.冯欣等[4]构建了一种利用目标结构关系增强的行人重识别方法.上述研究很多采用深度学习方法,而且很多是在白天状态下进行.
图像增强是环境感知中的重要手段,其中具有代表性的方法有基于Retinex(视网膜大脑皮层理论)的方法[5-7]、小波阈值去噪[8-9]、伽玛校正及其改进方法[10]、基于深度学习的方法,也有夜晚环境下直接探测目标的算法,对低亮度环境下的图片使用上述相关方法有助于还原行人信息.基于Retinex的方法是从原图中抛开照射光的影响以获得图像反射性质,从而获得物体本来面貌.
相关研究很多采用了深度学习方法,而深度学习本身有其局限性,例如需要大量的训练数据等.对于图像增强而言,很多研究对图像中行人细节增强的注重度不够.因此,笔者在行人无遮挡、匀速运动及正常行走假设下,提出一种低亮度环境下近距离行人的意图和轨迹估计方法.首先,改进原有的多尺度Retinex(multi-scale retinex,MSR)算法,再使用CLAHE进行图像增强,使行人得以显现并保留有清晰的人脸特征;其次,以增强后的图像为基础,提出一种YOLOv3和Openpose结果匹配的算法,使得鼻、眼部位能匹配到对应的行人;然后,提出一种综合卡尔曼滤波结果和行人面部朝向估计的行人意图估计方法;最后,对提出的图像增强算法进行试验并和其他方法比较,再对提出的行人意图估计方法进行试验,验证该方法的优越性.
基于Retinex的图像增强方法的原理是一幅给定的图像S(x,y)可以分解为反射图像R(x,y)和入射图像L(x,y)[6].具体原理如图1所示.基于传统Retinex的图像增强方法[5-7]包括单尺度Retinex(single scale retinex,SSR)算法和MSR算法.MSR算法联合多个尺度的滤波结果,突出暗区域细节,实现色彩增强,局部动态范围压缩,同时保持图像保真度.但该算法有一个假设前提,即光照图像是平滑的,而夜间道路光照并非如此.对本研究而言,除了上述缺点外,光晕会对行人的识别造成负面影响.
图1 Retinex原理图
文献[7]对传统MSR算法进行了改进,当高斯环绕尺度取文献[5]的值时,使用该方法对图像的亮度层(YCbCr格式下的Y层)进行处理,增强效果如图2所示[7],该方法无法增强全部内容,还出现了行人面部信息丢失的噪声.
图2 传统高斯尺度的增强效果
本研究提出的改进图像增强方法基本流程如下:图像RGB转YCbCr,后续单独处理Y层;改进原有的优化MSR算法,使用CLAHE处理,使行人得以显现并保留清晰的人脸特征;YCbCr转RGB生成最终图像.该方法具体步骤如下:图像去噪后,将图像(像素∈[0,1])由RGB转为YCbCr,再对Y层使用本研究的改进MSR算法,该算法以文献[7]方法为基础进行改进.计算公式为
(1)
式中:r(x,y)为上述图像增强步骤的Y层最终结果;K为尺度数,K=3;ωk为分配给不同尺度的权重;sig指sigmoid函数;S(x,y)为原图像;Fk(x,y)为不同尺度的高斯环绕函数;ck为不同的高斯环绕尺度,c1取60,c2取120,c3取240;λk受ck影响,保证Fk(x,y)的规范性.
sig函数[7]用以替换原MSR算法中的对数函数,对数虽然更接近人类视觉对光线的感知能力[6],但也可能放大噪声.sig函数的值域为(0,1),其计算公式为
(2)
式中:ks用于调整sig函数的灵敏度,为了让增强后的图像亮度尽可能高,取ks=15;根据文献[7]对sig函数的取值要求,取b=ks,c=0.
增强后,对Y层进行线性拉伸再进行去噪和高光保留[7]使图像更真实.计算公式为
(3)
式中:W(x,y)为L(x,y)结果中原图的权重;W1(x,y)、W2(x,y)分别为去噪和高光保留权重;I(x,y)为上述图像增强步骤的最终结果.
使用提出的增加方法增强后,再使用CLAHE处理图像Y层,处理前后的YOLOv3检验效果如图3所示.
图3 CLAHE处理前后的YOLOv3检验效果图
从图3可以看出:对中间推自行车的行人而言,没有进行CLAHE处理前,YOLOv3会把他识别成2个人,右上角的卡车未能识别,识别准确度比CLAHE处理后的识别精度低,可见加入CLAHE处理可以提升图像增强的效果.图像增强后,除了可以更好地识别行人,也可以提取出增强后的行人细节信息.
对于每一幅增强后的图片,用实时性和准确度好的YOLOv3算法识别行人,再用Openpose提取行人不同关键点的坐标和人体拟合骨架.Openpose识别和提取效果如图4所示.
图4 Openpose识别结果
Openpose只提取行人关键点和拟合骨架,最终结果未对应到具体的人,所以单纯的行人识别和特征点提取无法满足需求,需要将对应点和行人识别框匹配.要估计行人初始意图,需要将鼻、右眼、左眼3类点进行聚类.据此,在2个算法都有识别结果的情况下,提出一个图像中没有行人识别框重合时的YOLOv3和Openpose的识别算法结果的匹配方法.算法如下:
result=YOLOOpenposeMatch(rec,pose,lian).
输入:YOLOv3参数矩阵rec的每一行存放不同目标参数,从左到右为4个识别框参数(起始点坐标和宽高)、置信度、目标类别编号(行人为1);Openpose人体关键点元胞数组pose的每一行存放人体对应部位所有关键点坐标,第1行全部存放所有鼻点坐标,第15行全部存放所有右眼坐标,第16行全部存放所有左眼坐标;lian的每一行存放骨架信息,一行存放4个数,前2个数为骨架一端点的横、纵坐标,后2个数为骨架另一端点的横、纵坐标.
输出:result根据不同行人目标的Openpose特征点分类,结果中包含鼻、眼2类点.
变量:n_rec为YOLOv3识别出的目标数;n_open为pose列数;n_lian为连线条数.
算法步骤如下:
1)建立元胞数字组result,其中包括n_rec×3个元素.
2)从rec中提取第n(n∈N*且n≤n_rec)个行人识别框的参数x、y、w、h;然后从pose中提取第h(h∈N*且h≤n_rec)个鼻点坐标赋值给变量touzuo,满足
x≤touzuo(1)≤x+w且y≤touzuo(2)≤y+h
(4)
时,touzuo→result{1,n}.遍历上述步骤后转入步骤3).
3)对于任意的i∈N*且i≤n_lian,连接线第1点的坐标和鼻点相同时,即满足下式:
lian(i,1:2)=result{1,n},
(5)
遍历pose中所有右眼点坐标,当该坐标与第i条连接线另一个端点坐标相同时,将其赋值给result{2,n};连接线第2点的坐标和鼻点相同时,即满足下式:
lian(i,3:4)=result{1,n},
(6)
重复上述步骤处理,完成后转入步骤4).
4)采用步骤3)方法处理左眼坐标.
本方法中考虑了骨架,即行人关键点之间的连线,所以可以避免关键点和行人不对应的情况.
至此,每一个行人都有了对应的YOLOv3识别框和脸部关键点的坐标信息,以这些信息为基础进行如下步骤:先采用卡尔曼滤波修正YOLOv3识别的误差,再采用第2节的结果估计行人面部朝向,采用修正后的YOLOv3坐标结果估计行人转向意图,而行人未转向时,再使用前后2帧图像的面部朝向结果估计转头意图.
虽然低亮度条件下的图像经过增强后清晰度较高,但YOLOv3识别结果还是有可能不准,像素误差转换到实际场景中可能会变大,所以需要卡尔曼滤波修正.建立卡尔曼滤波的预测和观测[1]如下:
(7)
卡尔曼滤波更新[1]如下:
(8)
实际道路环境下对人脸朝向识别要求不高,以驾驶员正前方为参照方向,将朝向分类为面朝车辆、背朝车辆、脸部向左、脸部向右.以单个人为研究对象的行人面部朝向估计如下:输入为行人各部位关键点坐标;输出为行人初始意图.
1)如果没有鼻点,则行人背朝车辆,初始意图为背朝车辆行走,结束;如果有鼻点则进行步骤2).
2)如果只检测出左眼,则行人相对于车辆面朝右方;如果只检测出右眼,则行人相对于车辆面朝左方.
3)否则估计为面朝车辆.
使用卡尔曼滤波后的结果坐标判断行人是否转向(转向不包括调头),即
(9)
如果行人转向,式(9)中的r1、c1的下标将被替换为转向时对应的图像帧数,然后继续判断行人是否转向.
在行人未转向时,将意图分为行走意图和转头意图2类,使用前后2帧图像的面部朝向结果估计.如果2个结果对应的方向相同,则行人朝该方向行走.如果中途行人朝向发生了改变,则有2种可能意图:① 行人转弯;② 行人转头看向车辆.对于自适应矩阵大灯系统而言,可以根据这2种意图做出2种执行动作.
硬件配置如下:CPU为i7-8550U,主频为1.80 GHz,内存为15.9 GB,显卡为NVIDIA GeForce MX150.选用具有代表性的图像增强方法与本研究提出的增强方法进行对比.方法1:对图像Y层使用CLAHE处理.方法2:图像Y层略微增强后(双精度格式下的值+0.000 4)用MSRCR加剪切[7]和线性拉伸(参数见文献[5]).方法3:图像Y层略微增强后(8位无符号整数格式下的值+1)采用文献[10]方法增强Y层.方法4:采用文献[6]方法.
仿真结果如下:方法1用时0.064 3 s,方法2用时0.507 0 s,方法3用时1.268 8 s,方法4用时100.744 5 s,本研究方法用时0.618 8 s.本研究方法运算时间慢于第1、2种方法,但快于第3、4种方法.
选用均值μ、标准差δ、熵值E、峰值信噪比PSNR作为处理后Y层的评价指标.一定程度内,标准差、熵值和PSNR[6]越大,表明图像增强质量越高.4个指标计算方法如下:
(10)
(11)
(12)
(13)
式中:M、N分别为图像行数和列数;Y(x,y)为处理好的图像Y层结果;Yo(x,y)为原图像的Y层数据;P(i)为灰度值i在图像中出现的概率.
考虑到运算时间,选用方法1、2、3和本研究方法进行比较.每幅图像的Y层直方图和增强效果分别如图5、6所示.4种方法Y层增强的指标结果如表1所示.从图5可以看出:相对于原图和其余增强方法,本研究增强方法明显拓宽了亮度域,提升了图像对比度.从表1可以看出:本研究方法除PSNR外,其余指标明显优于方法1、2、3.所以本研究增强方法有良好的有效性.
图5 不同图像增强方法的Y层直方图
图6 图像增强效果
表1 不同增强方法的指标结果
相比于方法1、2,本研究增强方法虽然实时性有欠缺,但有了更优的增强效果.从增强效果和实时性这2个角度来看,本研究增强方法都优于方法3、4.
搭建夜晚场景如下:单个行人匀速运动,走到一定间距后右转,转3次,中途无遮挡且不转头.采集的图像如图7a所示.为了取得真实值,在三维建模软件中的白天场景用目标检测相机采集目标,可见精度很高,如图7b所示.
图7 搭建的试验场景
对行人轨迹进行卡尔曼滤波,行人是匀速运动,部分参数取值如下:
在该场景下,YOLOv3识别率达到94.92%.手动修正YOLOv3初始识别结果缺失后,当第k+1帧图像出现识别缺失时,用Xk+1先验估计的前两维数据作为第k+1帧图像的测量值.再用均方根误差比较滤波结果和YOLOv3结果,其中识别缺失的x和y分别记为0.卡尔曼滤波结果的均方根误差为
(14)
式中:x、y分别为YOLOv3行人识别框中心点的卡尔曼滤波结果;xtrue、ytrue分别为x和y对应的真实值.
经过计算,卡尔曼滤波结果的均方根误差相对于初始YOLOv3识别结果下降了约71.53%,有利于后续的行人意图估计.
将识别缺失视作朝向改变.测算的估计结果表明:行人一共出现了14个转向点,中途出现了14个转头点,除此之外,行人一直在朝着面部朝向方向行走.虽然测算的估计结果和实际行走情况(4个转弯点、没有转头)相比存在误差,但是转弯点查全率达到100%,且转向点、转头点数目的增加有利于规避导致危险和降低行车舒适度的估计误差.
1)提出了一种图像增强算法,能够既增强图像又增强人脸特征,效果好于选取的其余方法,也可以达到一种运算时间和运算效果的平衡.
2)提出了一种YOLOv3和Openpose结果匹配算法,可以将识别出的不同人体部位匹配到对应的人,有助于估计行人面部朝向和行人意图.
3)利用卡尔曼滤波修正了YOLOv3识别结果产生的行人轨迹,均方根误差下降了约71.53%.采用卡尔曼滤波结果和行人面部朝向综合估计行人意图,结果表明没有产生导致危险和降低行车舒适度的预测误差.