-
近年来,随着计算机技术的不断发展,智能视频监控系统己在商场、学校、火车站等公共场所大量应用,以保障社会有序稳定运行。人数统计是智能视频监控领域的一个具有现实意义的研究方向,也是计算机视觉领域的研究热点和难点之一。准确统计监控场景中的人数在公安防控、商业信息采集以及配置社会资源和设施上具有重要意义。
行人统计使用的方法主要有基于目标检测的人数统计方法和基于特征回归的人数统计方法,这两类方法均用到了有监督的机器学习思想,此外还有基于无监督学习的跟踪轨迹聚类[1]方法等。在有监督学习方法中,基于HOG[2]算法检测行人是被广泛使用的方法之一,该方法通过计算和统计图像局部区域的梯度方向直方图来构成行人特征,此外还有提取行人头部、面部特征和模板匹配的检测方法,如LBP算法[3],DPM算法[4],再使用机器学习中SVM分类器以及Adaboost级联分类器[3]训练出行人分类器进而识别和检测行人。此类方法在行人遮挡严重以及光照不足时,精度较差;基于特征回归的方法则通过提取区域的纹理等特征,然后采用核函数实现纹理特征到人数的回归映射。此类方法可以有效的降低行人互相遮挡对检测的影响,但是人群分布特征很难使用数学特征完全描述,影响统计准确性。
近几年,随着深度学习理论的日趋成熟以及硬件设备性能的提升,使得卷积神经网络成为计算机视觉与模式识别领域的一个有力工具。文献[5]将卷积神经网络结构优化后应用于目标分类,在ImageNet图像数据库上的测试中取得了令人满意的结果。文献[6]提出了R-CNN(regionproposal-CNN)算法并创建了在GPU上运行的Caffe框架,成为近年深度学习中实现目标检测的经典算法之一。文献[7]采用卷积神经网络将人群的分布特征提取后投入训练,用网络生成的模型估计视频中行人数量,成为深度学习应用于行人检测的一个实例。这些算法虽然提取到了有效的行人特征并建立了精确的预测模型,但仍然不能很好地解决遮挡和光照变化以及人群分布不均等因素对检测的影响。
为了解决上述问题,在提取监控视频中行人特征之前需要考虑到实际场景中的情况,如人群分布聚集不规律、行人间存在相互遮挡、光照度偏暗以及雨雾天气等复杂的室外环境因素的影响。本文针对以上问题对现有算法做出选择和改进,提出结合卷积神经网络和密度分布特征的人数统计算法,将不同的特征提取算法应用在其对应的场景中,从而有效解决了上述干扰因素,增加了算法统计精度。
HTML
-
在稀疏场景中,人与人之间有间隔距离或者轻微遮挡,此时适用于对单个行人目标进行的检测和识别算法,该场景下的行人识别算法分为3个步骤:1)使用Retinex算法对场景去噪后转换至HSV颜色空间,并采用选择搜索算法[10]找到包含行人的区域和位置;2)使用栅极损失函数分块训练卷积神经网络提取行人局部区域特征;3)使用局部分类器判断提取出的特征是否为行人目标。
-
在行人检测识别中,输入卷积神经网络的训练数据精确与否决定了提取出的行人特征质量的好坏,本文借鉴目标识别中的R-CNN算法,在训练卷积神经网络之前采用选择搜索算法对行人区域进行预判和选择,使得训练目标更具针对性。考虑到行人场景容易受到光照变化的影响,本文将选择搜索算法进行了改进。从表 1[11]可以看出,HSV颜色空间对光强,阴影和高光变化的稳定性最强,因为HSV颜色空间是将白色光区域沿着RGB模型对角向黑色光区域投射得到,在这个空间中色调H和饱和度S分量与明度V是分离开来的,因而对光照变化影响很小。图 2是行人区域定位结果图。
颜色空间类型 RGB I Lab HSV rgb C H 光强 - - +/- 2/3 + + + 阴影/遮挡 - - +/- 2/3 + + + 高光 - - - 1/3 - +/- + (注:“+/-”表示部分颜色分量不变,1/3表示某一通道颜色分量不变) -
有监督卷积神经网络可以进行多层卷积运算,通过反复迭代训练以及反向传播等方式调整权值和参数。网络结构通常包含卷基层、池化采样层和全连接层。其中对卷积层和池化采样层模块的设计是特征提取的关键步骤,此外为了保证有效完成对卷积神经网络的回归训练,损失函数的选择也至关重要。使用它提取目标区域中的行人特征,在大量行人数据集上训练后可以建立精确的预测模型。
-
传统的损失函数是直接根据整个图片的信息特征计算损失函数(global loss),使得训练出的神经网络适于全局目标的识别。而栅极损失函数整合局部与整体特征,将最后一个卷积层的特征图划分为$n \times n$的小栅极,每个小栅极看成一个单独的区域(blocks),单独按同样的方式计算每一个小区域的损失函数,将整个区域的损失函数加和作为最终损失函数,以强化每个小栅极区域的独立判别能力。如果行人的身体或者脸的一部分被遮挡住,其余子块可以将该区域没有遮挡住的部分输入检测器,这样降低了遮挡对检测的影响。
设定$x$表示$f \times r \times c$维的最后一层卷积层$r$列$c$行的特征向量图,$f$表示滤波器的数量,本文将$x$分割为$f \times n \times n$格非重叠的小栅极区域${f_i}$,$i = 1, 2, \cdots, N$,其中$N = \left[{\frac{r}{n}} \right] \cdot \left[{\frac{c}{n}} \right]$,并选用铰链损失函数(hinge loss):
式中,$\theta = [{\mathit{\boldsymbol{\omega }}_1}, {\mathit{\boldsymbol{\omega }}_2}, \cdots, {\mathit{\boldsymbol{\omega }}_N}, {b_1}, {b_2}, \cdots, {b_N}]$;$m$为常数$1/N$,表示每个栅极区域对分类贡献相等;$y \in \{ - 1, 1\} $是分类标签;${\mathit{\boldsymbol{\omega }}_i}$和${b_i}$是第$i$块的权值向量和偏置参数。为了避免每个局部子分类器输出相似冗余的分类结果,把每个分类器赋予相应权重将每个局部区域的损失函数联结起来,通过局部分类器共享权值的算法。设权值$\mathit{\boldsymbol{\omega }} = [{\mathit{\boldsymbol{\omega }}_1}, {\mathit{\boldsymbol{\omega }}_2}, \cdots, {\mathit{\boldsymbol{\omega }}_N}]$,偏置$b = \sum {_i{b_i}} $,损失函数变为:
式中,$N$代表栅极的个数;${\mathit{\boldsymbol{\omega }}_i}$与${b_i}$是最后一个特征图对应的整体权值参数;$b = {b_1} + {b_2} + \cdots + {b_N}$为其对应偏置项;公式的第一项代表了特征图上的整个损失;第二项代表了每一个栅极的损失;$\lambda $是一个平衡系数,权衡全局与局部损失的大小。训练卷积神经网络时使用梯度下降算法对该损失函数进行优化。
使用该损失函数训练时可以让神经网络获得更加丰富和差异化的局部中层特征,建立高效的行人模型。该算法细化了卷积神经网络的检测部位,增加了行人的局部位置检测和识别,有效提升了对部分遮挡行人的检测率。同时,相比常规全局损失函数,栅极损失函数虽然增加了$N - 1$层的权重和偏置参数,但因为权重$\mathit{\boldsymbol{\omega }}$在全局和局部分类器中共享,且全局权重向量是由局部权重向量串联起来组建的,全局偏置也是通过加和局部偏置来获得,因而没有额外的增加整体计算时间。
-
本文在行人数据集上对神经网络进行反复迭代训练并调整权值参数后确定了针对提取行人特征的网络结构。该网络结构包含了2个5×5卷基层,分别有64和128个卷积核,1个4×4池化层,在每层卷积后利用纠正线性单元(rectified linear unit, ReLU) [12]函数激活,增加模型训练时的收敛速度。选用高斯零均值标准差为0.01的随机数初始化权重,在卷基层后加入约束上限为0.1的弃权算法(dropout) [13],将不满足权值L2范数上限约束的隐含层节点舍弃,以减弱神经元节点间的联合适应性,增强网络的泛化能力;引入栅极损失函数作为神经网络的损失函数来增加检测对遮挡的鲁棒性,从PETS2009和UCSD原始数据集中随机抠取大小为64×64的行人局部子图像块,用以训练卷积神经网络。本文采用的卷积神经网络框架如图 4所示。
-
算法的最后一个步骤是将深度神经网络提取的特征投入到分类器中进行判别,以确定该输入区域是否为行人样本。本文将传统的SVM分类器改为基于局部的姿势分类器(part-based pose-specific classifiers) [14],以配合栅极损失函数检测出的行人脸或躯干等局部区域,以提高网络的分类精度,取得了良好的效果。
在网络训练结束后,即可使用该神经网络算法生成的模型对低密度行人团块进行检测,以得到该团块中人数。
2.1. 对行人区域的预判
2.2. 卷积神经网络结构设计
2.2.1. 栅极损失函数
2.2.2. 卷积神经网络的结构
2.2.3. 分类器的选择
-
为了验证所提的结合卷积神经网络和轨迹预测的行人统计算法在复杂环境下的有效性,本文在UCSD和PETS2009监控视频中获取的图像序列上进行了实验,这两个行人数据集中的人群密度各不相同且分布具有随时间变化的性质,此外摄像头采集视频的角度各不相同,是理想的用以测试算法精度的数据集。此外,本文还利用自己采集的雾天行人视频数据集来验证算法对光照和恶劣环境的适应性。实验结果验证了所提算法的有效性和鲁棒性。
实验的硬件平台为i7$ \times $10核,3.4 GHZ工作站,内存为64 GB,显卡为GTX-Titan X,内含GPU,系统为Ubuntu14.04,卷积神经网络在Caffe开源框架下实现。文献[20]中方法的对比实验在MATLAB 2015b环境下实现,文献[21]方法的对比实验在Visual Studio 2010环境下实现,并调用OpenCV库函数。
UCSD数据集的图片分辨率为258×158,如图 7所示;PETS2009数据集的图片分辨率为768×576,如图 8所示。为了保证卷积神经网络训练和学习的有效性,对两个场景数据分别抽取1 000幅图像采样归一化为256×128统一大小,手工标注其中的500张并采用本文算法构建人群密度分布图特征,用以训练回归模型。之后从这500幅已标注的图像中随机抽取1 000张64×64规格的子图像,用以训练栅极损失函数提取行人局部特征,用剩下500幅图像进行测试。
-
算法在UCSD、PETS2009数据集上的测试效果如图 7和图 8所示,在自己采集雾天数据集上测试效果如图 9所示,实验结果证明所提算法在不同场景下均具有准确的人数统计精度。
通过图 7a和图 8可以看出,本文算法识别出了最左侧、最右侧被遮挡住的行人,当行人相互重叠时常规算法无法检测出整体行人,但采用本文所提出的栅极损失函数以及分块训练卷积神经网络的方法后,即可针对遮挡行人局部进行检测识别统计。在雾天数据集上的实验结果表明,所提Retinex去噪算法和转换颜色空间算法消除了场景中雨雾和光照度不足等因素对人数统计的干扰。对密集人群团块,提取团块灰度共生矩阵的水平、竖直和对角线方向的对比度作为人群纹理特征指标,融合3.1节中构建出如图 6的人群密度分布特征,使用多核回归函数进行估计。最终,加上不同密度团块中人数即为场景中统计出的总人数。算法在UCSD和PETS2009数据集上的统计结果如图 10、图 11所示。
行人统计的评价指标用准确性衡量,其中准确性使用平均绝对误差(mean absolute error, MAE)和平均均方误差(mean squared error, MSE)和计算。表 2和表 3是现有的其他算法和本文算法在这两个数据集上测试的比较结果。
通过对比实验结果图可以得出,相比较近年人数统计领域内其他学者提出的算法,本文算法在PETS2009和UCSD数据集上的测试结果在准确率上有显著的提升,相比较文献[7]的研究结果,精度提高了12%,验证了所提算法的有效性。可以看出当人群密度由低到高变化时,使用本算法得到的人数统计结果均与场景中真实人数相差较小,折线图位置较接近,证明了本文构建的密度分布图有良好的描述人群分布信息的能力,增加了特征回归模型的精度。在不同数据集上进行测试时算法性能并没有随之下降或改变,也证明了算法对不同密度的行人场景均有适应性,能应对较为复杂的环境和人群分布情况。相比文献[21]的算法,在大规模人群场景中行人形状轮廓不明显,难以剔除周围行人造成的干扰,不适用于人头检测的算法;反之在低密度人群场景中,稀疏行人并不具备纹理密度等概率分布特征,此时识别检测算法准确迅速,其精度优于文献[23]中概率估计算法。