2. 北京科技大学 土木与资源工程学院, 北京 100083;
3. 陕西省西安市消防救援支队, 西安 710000;
4. 北京科技大学 金属冶炼重大事故防控技术支撑基地, 北京 100083;
5. 清华大学 工程物理系, 公共安全研究院, 北京 100084;
6. 中国人民警察大学 智慧警务学院, 廊坊 065000
2. School of Civil and Resource Engineering, University of Science and Technology Beijing, Beijing 100083, China;
3. Xi'an Fire Rescue Detachment, Xi'an 710000, China;
4. Technical Support Center for Prevention and Control of Disastrous Accidents in Metal Smelting, University of Science and Technology Beijing, Beijing 100083, China;
5. Institute of Public Safety Research, Department of Engineering Physics, Tsinghua University, Beijing 100084, China;
6. School of Intelligence Policing, China People's Police University, Langfang 065000, China
灾害一旦发生,基于有限数据对疏散场景中的人员数量进行准确估计,并实时掌握疏散通道的拥挤程度,能为疏散路线实时优化和应急资源调度提供决策支持,对公共安全和应急疏散意义重大[1-4]。城市和建筑的现代化、数字化和智能化发展实现了智能监控摄像头几乎全覆盖,为安防、预警、疏散等提供了硬件和数据支撑。卷积神经网络(CNN)的出现,为基于视频/图像分析对疏散场景中的人群计数问题提供了新的解决途径。
由于场景变化大、人群分布不均、背景杂乱、光照不均、遮挡、尺度和透视变化等各种问题,使得人群计数问题具有很大的挑战性。现有的人群计数方法主要分为4类。1) 基于检测的方法:利用滑动窗口来检测场景中的每一个行人,得到行人的近似位置,然后统计人群数量[5-6]。这类方法在低密度人群场景中取得了较好的效果,但由于遮挡、尺度、图片分辨率等问题,在高密度人群中(如疏散场景中)具有很大局限性。2) 基于回归的方法:将人群的特征与人数建立直接的映射关系,建立回归模型,对全局人数进行回归分析。常用的特征包括几何和边缘特征[7-9]及灰度共生矩阵等纹理特征[10-11]。该方法能有效解决部分低分辨率图片的不足,但是较大程度上受到特征种类和提取精度的约束。3) 基于密度计算的方法:通过加入图像的空间信息,将图像转换为相应的密度图(density map),将人数计算问题转换为分析的真实密度图与计算出的密度图之间的近似关系[12]。4) 基于深度学习的方法:深度学习方法中,CNN极其常用,由多重非线性变换构成的多个处理层对大量数据进行学习,能够有效地学习和提取更多、更深层的特征信息,能很好地用于人群数量估计方面[13-15]。近年来,CNN在疏散场景中的应用逐渐深化,表现出精度高的巨大优势[16],如与分类数据集预训练模型和YOLO算法相比,CNN在车站建筑疏散设计仿真中准确度最高[17]。借助CNN估计精度高的优势,本文将CNN与密度图的方法相结合,提出了一种基于级联CNN的人员数量估计模型,在利用CNN强大的特征学习能力挖掘疏散人群图像中关键信息的同时,能有效地避免图像信息的丢失和过拟合。通过构建分类情况和人员密度层级相连的CNN网络模型,实现了对疏散场景中人员数量的准确估计。
1 基于级联CNN的人员数量估计模型架构CNN是一种多层神经网络,被广泛应用于图像识别、目标检测等领域。本文基于CNN建立人员数量估计模型,通过对监控视频画面中的图像进行卷积运算,直到生成密度图RGB值矩阵,并将矩阵转换为密度图图像,图像中白色像素点的位置代表输入图像中人员的头部位置,从而估计场景中的人员数量。
基于级联CNN建立了人员数量估计模型(框架见图 1),分为5个分区:低层次卷积区、人员数量分类卷积区、人员密度图卷积层区、全连接(FC)区、输出密度图区。输入图像通过低层次卷积区进行特征的简要提取后,分别输入人员数量分类卷积区和人员密度图卷积区进行特征的进一步抽取。将人员数量分类卷积区的特征片段线性组合后进行分类(类似于分类器),同时将人员数量分类卷积区的特征片段和人员密度图卷积区的特征片段结合后通过输出密度图区对特征片段进行还原,生成密度图图像。
模型的训练过程是通过不断迭代,使输出图像中白色像素点的位置与输入图像中人员的位置不断接近,从而可以输出与输入图像相对应的密度图图像。通过设置人员数量分类情况和人员密度图层级相连的CNN模型,可以使模型具有2个相互关联的标签去反馈损失值,能有效避免卷积过程中部分图像信息的丢失和过拟合。
2 模型参数设置 2.1 不同分区参数设置 2.1.1 低层次卷积区图 1中低层次卷积区包含了2个卷积层,每个卷积层包含1个参数整流线性单元(parametric rectified linear unit,PRelu),第1和第2个卷积层分别有16和32个特征图。
2.1.2 人员数量分类卷积区和FC区人员数量分类卷积区包含4个卷积层,每个卷积层包含1个PRelu线性单元,第2个卷积层后面加入了1个池化层。为了使任意尺度的图像都可用来训练,并产生1个固定维度的输出,在最后1个卷积层后插入了1个空间金字塔池化(spatial pyramid pooling)层h1_prior_2,以更好地评估模型的整体拟合效果,输出卷积层的特征信息并叠加到人员密度图卷积区。FC区包含3个FC层,每个FC层包含1个PRelu线性单元,并分别包含512、256和18个神经元,通过人员数量分类标准(按照人员数量划分为18类)输出图像的类别。
2.1.3 人员密度图卷积区和输出密度图区基于从人员数量分类卷积区获取的特征图,人员密度图卷积区继续通过6个卷积层抽取特征图,生成密度图来估计输入图像中的人员数量。6个卷积层参数分别为:第1个有20个特征图,后面加1个池化层;第2个有40个特征图;第3个有80个特征图,后面有1个池化层;第4个有40个特征图;第5个有20个特征图;第6个有10个特征图。
输出密度图区包含2个卷积层和2个分块滑动卷积层,分别有24、32、16和8个特征图。滑动卷积层将这些特征图转换为与初始输入图像大小相同的特征图,修复早先池化层带来的损失。
表 1为各分区参数设置的PyTorch格式表示。
分区 | 表征 | 参数设置 |
低层次卷积区 | base_layer | Con2d(1, 16, 9, same_padding=true, NL=“prelu”, bn=bn) Con2d(16, 32, 7, same_padding=true, NL=“prelu”, bn=bn) |
人员数量分类卷积区 | h1_prior_1 | Con2d(32, 16, 9, same_padding=true, NL=“prelu”, bn=bn) Con2d (16, 32, 7, same_padding=true, NL=“prelu”, bn=bn), MaxPool2d(2) Con2d(32, 16, 9, same_padding=true, NL=“prelu”, bn=bn) Con2d(16, 8, 7, same_padding=true, NL=“prelu”, bn=bn) |
h1_prior_2 | AdaptiveMaxPool2d((32, 32)), Con2d(8, 4, 1, same_padding=true, NL=“prelu”, bn=bn) | |
FC区 | h1_prior_fc1 | FC(4*1024, 512, NL=“prelu”) |
h1_prior_fc2 | FC(512, 256, NL=“prelu”) | |
h1_prior_fc3 | FC(256, self.num_classes, NL=“prelu”) | |
人员密度图卷积区 | de_stage_1 | Con2d(32, 20, 7, same_padding=true, NL=“prelu”, bn=bn), MaxPool2d(2) Con2d(20, 40, 5, same_padding=true, NL=“prelu”, bn=bn), Dropout (p=0.2) Con2d(40, 80, 5, same_padding=true, NL=“prelu”, bn=bn), MaxPool2d(2), Dropout (p=0.2) Con2d(80, 40, 5, same_padding=true, NL=“prelu”, bn=bn), Dropout (p=0.2) Con2d(40, 20, 5, same_padding=true, NL=“prelu”, bn=bn), Dropout (p=0.2) Con2d(20, 10, 5, same_padding=true, NL=“prelu”, bn=bn) |
输出密度图区 | de_stage_2 | Con2d(18, 24, 3, same_padding=true, NL=“prelu”, bn=bn) Con2d(24, 32, 3, same_padding=true, NL=“prelu”, bn=bn) ConvTranspose2d(32, 16, 4, stride=2, padding=1, output_padding=0, bias=True), PReLU() ConvTranspose2d(16, 8, 4, stride=2, padding=1, output_padding=0, bias=True), PReLU() Con2d(8, 1, 1, same_padding=true, NL=“relu”, bn=bn) |
2.2 损失函数
基于级联CNN的人员数量估计模型中损失函数分为2个阶段:第1个阶段损失函数采用二元交叉熵(binary cross entropy,BCE)损失函数[18](见式(1)),依据模型输出的人员数量类别和图像实际类别的差值来计算损失值;第2阶段的损失函数采用均方误差函数(mean square error,MSE)[19](见式(2)),依据模型生成密度图图像上各像素点的RGB值和真实密度图图像上各像素点的RGB值来计算损失值。
1) 第1阶段损失函数为
$ L_1=-\frac{1}{N} \sum\limits_{n=1}^N\left[y_n \cdot \ln x_n+\left(1-y_n\right) \cdot \ln \left(1-x_n\right)\right] . $ | (1) |
其中:xn是与实际人员数量类别yn相对应的期望类别输出,N是总的图像数。
2) 第2阶段损失函数为
$ L_2=\sum\limits_{m=1}^M\left(y_m-p_m\right)^2 . $ | (2) |
其中:pm是真实密度图上第m个像素点的RGB值,ym是模型生成密度图上该像素点的RGB值,M为输入图像x包含像素点的总个数。
为使得模型能够具有2个相互关联的标签去反馈损失值,综合考虑第1和第2阶段损失函数,计算整个级联网络的损失函数。
3) 整个级联网络训练使用的损失函数为
$ L=\lambda L_1+L_2 \text {. } $ | (3) |
其中:λ为权重系数。在实际建模中,为了实现损失值最小,通过对比不同λ下的损失值的变化,本文最终将λ设置为0.000 12。
3 模型应用 3.1 数据集制作与预处理在深度学习领域中,数据对模型结果具有很大的影响力,获取合适的数据集是决定学习效果的第1步,也是极其关键的一步。本文需要解决紧急情况下疏散通道中的人员数量估计问题,该场景具有如下特点:1) 疏散时人员密集,发生重叠遮挡现象严重;2) 监控摄像多为俯视视角,且涉及多种俯视角度;3) 室内光照不足;4) 室内监控中行人的大小在监控画面中适中,不会出现很小的情况;5) 室内监控角度不一,会涉及人群的正面、背面和侧面。为了使得数据集更接近于真实场景,本文采用了半自建数据集(部分公开数据集与部分自建数据集相结合)的方式。同时,为了增加模型的泛化能力,对数据集中图像从不同部位进行了裁剪处理。
本文数据集的制作和预处理流程(部分流程见图 2)如下:
1) 从公开数据集中选择部分符合条件的图像。ShanghaiTech数据集(https://github.com/desenzhou/ShanghaiTechDataset)是上海科技大学提供的公开数据集[14],其中包含1 198张人群图像,共330 165张头像。该数据集包含PartA和PartB共2部分,其中PartA包含482张图像,选自网络;PartB包含716张图像,在上海人员拥挤的街道拍摄。本文从PartB中选择符合上述场景特点的500张图像。
2) 自建部分数据。步骤1得到的图像只有部分满足人员密集、室内监控采集等特点,而且能满足俯视视角并涉及多种角度、多种方位的不多。为了更真实地反映室内疏散通道中的人员场景,项目团队成员去往不同疏散通道、人员密集场所等区域,通过不同角度、不同方位拍摄图像200张。
3) 将前2部分图像合并,构成包含700张图像的原始数据集。
4) 对每张原始图像裁剪、灰度化操作生成9个图像片段,最终数据集共有6 300张图像。为了更好地评估模型的效果,本文专门从中选择了人员密度相对较大的182张图像作为测试集,然后从剩余的数据集中随机选择5 506张图像作为训练集、612张图像作为验证集。
5) 制作真实的密度图。在生成的图像片段中采用开源标记工具LabelImg(https://pypi.org/project/labelImg/)对人员头部位置进行标记,随后可自动生成每张图像中人员头部中心位置坐标,设置人员头部中心像素点的RGB值为(255,255,255),其余地方设置为(0,0,0)。白色像素点(人员头部中心位置)总数代表人员总数。
3.2 基于级联CNN的人员数量估计模型算法流程基于级联CNN人员数量估计模型训练流程见图 3,模型通过抽取输入图像中的特征后进行特征重组,生成具有人员数量和位置信息的密度图。比较基于模型输出人员数量的类别和实际类别与模型生成的密度图上各像素点RGB值和真实密度图上各像素点RGB值的差别,通过损失函数计算损失值,并将损失值反馈给人员数量估计模型进行模型权值的不断更新。
人员数量估计模型的函数表达为
$\text { pre_density }=F(x ; w) \text {. } $ | (4) |
其中:pre_density为模型生成密度图的RGB值矩阵,F为模型的函数表达,x为输入图像的RGB值矩阵,w为模型中的权值。
基于2.2节定义的模型损失函数L,得到损失值为
$ \text { Loss }=\sum\limits_{m=1}^M L\left(y_m-F\left(x_m ; w\right)\right) . $ | (5) |
其中:xm为输入图像x的第m个像素点的RGB值,F(xm; w)是真实密度图上该像素点的RGB值。
模型的训练过程是通过训练图像中各像素点的总损失值反向更新模型权值,使输入图像中各像素点的总损失值逐渐变小,从而求解最优模型。基于级联CNN的人员数量估计模型的算法更新流程如下:
步骤1 初始化真实密度图的RGB值矩阵。
步骤2 从输入图像集合X中随机抽取图像x开始训练:
1) 计算损失值Loss。
2) 更新模型权重参数:
步骤3 计算两轮训练损失值间的差值ΔLoss,当ΔLoss小于阈值即停止训练。本文将阈值设为0.01。
步骤4 输出x对应的pre_density。
3.3 人员数量估计模型的训练及应用基于级联CNN的人员数量估计模型通过PyTorch深度学习平台(https://pytorch.org)实现。为了评价模型计算结果的性能,采用平均误差(mean absolute error,MAE)和均方误差(MSE)作为性能指标,一定程度上能够反映模型人员数量估计的准确性。
平均误差为
$ \operatorname{mae}=\frac{1}{N} \sum\limits_{n=1}^N\left|\hat{C_n}-C_n\right|. $ | (6) |
其中:Cn是第n幅图像的实际人数,
均方误差为
$ \mathrm{mse}=\frac{1}{N} \sum\limits_{n=1}^N\left(\widehat{C_n}-C_n\right)^2 $ | (7) |
训练时,误差函数随着迭代次数的变化见图 4,实际人员数量和模型估计的数量之间的误差逐渐减小,到700轮完整训练(epoch)达到稳定,在GTX1080显卡上耗时5 d。epoch-mae为612张验证集图像中实际人数和模型估计人数的平均差值,epoch-mse为验证集图像中实际人数和估计人数的均方差值。模型在验证集中的准确度为84.2%,此比例为验证集中真实人员数量和估计人员数量差值不超过5人的图像占总图像的百分比,此处的5人为612张图像中平均人数的10%。
加载测试集图像并获取其真实人员数量和分类等级,通过模型生成测试集图像的人员数量和分类等级,记录模型的估计准确度。模型的输出结果如图 5所示。真实的人员数量、估计的人员数量、估计的分类和真实的分类分别为132.325 76、142.459 99、1和1。模型在测试集(182张图像)中的mae为15.8,mse为123.2,准确度为83.6%,此比例为测试集中真实人员数量和估计人员数量差值不超过16人的图像占总图像数的百分比,此处的16人为182张图像中平均人数的10%,验证集和测试集图像中的人员数量有较大区别,因为测试集选择的是高密度人群的图像,人员数量基数大,所以允许误差值设置得较大。平均每张图像估计耗时0.327 s,在可接受时间延迟范围内。因此,本文提出的人员数量估计模型可以较为准确且及时地估计监控高密度人群图像中的人员数量。
4 结论
本文在基于CNN人员数量估计模型基本原理和疏散场景特征分析的基础上,建立了基于级联卷积神经网络的人员数量估计模型。通过设置分类情况和人员密度层级相连的级联CNN模型,有效避免卷积过程中部分图像信息的丢失和过拟合的产生。通过半自建的方式构建了符合疏散场景的数据集,并基于PyTorch深度学习平台进行了人员数量估计模型的编程实现与应用。模型在数据集上学习输入图像和密度图之间的关系后,可通过视频监控画面估计疏散通道上的人员数量。经测试,该模型可高效地对监控画面中的疏散人员数量进行实时准确的估计,为疏散路线的实时优化和应急资源的调度提供了决策支持。
[1] |
FAN Z Z, ZHANG H, ZHANG Z, et al. A survey of crowd counting and density estimation based on convolutional neural network[J]. Neurocomputing, 2022, 472: 224-251. DOI:10.1016/j.neucom.2021.02.103 |
[2] |
BHANGALE U, PATIL S, VISHWANATH V, et al. Near real-time crowd counting using deep learning approach[J]. Procedia Computer Science, 2020, 171: 770-779. DOI:10.1016/j.procs.2020.04.084 |
[3] |
吕伟, 李承旭, 马亚萍. 基于GIS位置分配的城市应急避难场所责任区划分[J]. 清华大学学报(自然科学版), 2022, 62(6): 1102-1109. LV W, LI C X, MA Y P. Division of responsibility areas for urban emergency shelters based on a GIS location-allocation analysis[J]. Journal of Tsinghua University (Science and Technology), 2022, 62(6): 1102-1109. (in Chinese) |
[4] |
CHEN J Y, XIU S, CHEN X, et al. Flounder-Net: An efficient CNN for crowd counting by aerial photography[J]. Neurocomputing, 2021, 420: 82-89. DOI:10.1016/j.neucom.2020.09.001 |
[5] |
ZHANG L, SHI M J, CHEN Q B. Crowd counting via scale-adaptive convolutional neural network[C]// Proceedings of 2018 IEEE Winter Conference on Applications of Computer Vision. Lake Tahoe, USA: IEEE, 2018: 1113-1121.
|
[6] |
LESANI A, NATEGHINIA E, MIRANDA-MORENO L F. Development and evaluation of a real-time pedestrian counting system for high-volume conditions based on 2D LiDAR[J]. Transportation Research Part C: Emerging Technologies, 2020, 114: 20-35. DOI:10.1016/j.trc.2020.01.018 |
[7] |
MA R, LI L, HUANG W, et al. On pixel count based crowd density estimation for visual surveillance[C]// Proceedings of IEEE Conference on Cybernetics and Intelligent Systems, 2004. Singapore: IEEE, 2004: 170-173.
|
[8] |
CHAN A B, LIANG Z S J, VASCONCELOS N. Privacy preserving crowd monitoring: Counting people without people models or tracking[C]// Proceedings of 2008 IEEE Conference on Computer Vision and Pattern Recognition. Anchorage, USA: IEEE, 2008: 1-7.
|
[9] |
WU X Y, LIANG G Y, LEE K K, et al. Crowd density estimation using texture analysis and learning[C]// Proceedings of 2006 IEEE International Conference on Robotics and Biomimetics. Kunming, China: IEEE, 2006: 214-219.
|
[10] |
CHAN A B, VASCONCELOS N. Counting people with low-level features and Bayesian regression[J]. IEEE Transactions on Image Processing, 2012, 21(4): 2160-2177. DOI:10.1109/TIP.2011.2172800 |
[11] |
MARANA A N, COSTA L F, LOTUFO R A, et al. On the efficacy of texture analysis for crowd monitoring[C]// Proceedings SIBGRAPI'98. International Symposium on Computer Graphics, Image Processing, and Vision. Rio de Janeiro, Brazil: IEEE, 1998: 354-361.
|
[12] |
FU M, XU P, LI X D, et al. Fast crowd density estimation with convolutional neural networks[J]. Engineering Applications of Artificial Intelligence, 2015, 43: 81-88. DOI:10.1016/j.engappai.2015.04.006 |
[13] |
JIANG G Q, WU R, HUO Z Q, et al. LigMSANet: Lightweight multi-scale adaptive convolutional neural network for dense crowd counting[J]. Expert Systems with Applications, 2022, 197: 116662. DOI:10.1016/j.eswa.2022.116662 |
[14] |
ZHANG Y Y, ZHOU D S, CHEN S Q, et al. Single-image crowd counting via multi-column convolutional neural network[C]// Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, USA: IEEE, 2016: 589-597.
|
[15] |
HUO Z Q, LU B, MI A Z, et al. Learning multi-level features to improve crowd counting[J]. IEEE Access, 2020, 8: 211391-211400. DOI:10.1109/ACCESS.2020.3039998 |
[16] |
GAO J Y, WANG Q, LI X L. PCC Net: Perspective crowd counting via spatial convolutional network[J]. IEEE Transactions on Circuits and Systems for Video Technology, 2020, 30(10): 3486-3498. DOI:10.1109/TCSVT.2019.2919139 |
[17] |
CHEN Y, HU S J, MAO H, et al. Application of the best evacuation model of deep learning in the design of public structures[J]. Image and Vision Computing, 2020, 102: 103975. DOI:10.1016/j.imavis.2020.103975 |
[18] |
RUBY A U, THEERTHAGIRI P, JACOB I J, et al. Binary cross entropy with deep learning technique for image classification[J]. International Journal of Advanced Trends in Computer Science and Engineering, 2020, 9(4): 5393-5397. DOI:10.30534/ijatcse/2020/175942020 |
[19] |
邓青, 马晔风, 刘艺, 等. 基于BP神经网络的微博转发量的预测[J]. 清华大学学报(自然科学版), 2015, 55(12): 1342-1347. DENG Q, MA Y F, LIU Y, et al. Prediction of retweet counts by a back propagation neural network[J]. Journal of Tsinghua University (Science and Technology), 2015, 55(12): 1342-1347. (in Chinese) |