吴松伟
摘 要: 基于人脸识别技术的智能视频监控系统是安防领域的研究热点。针对现有安防产品使用场景受限,部署和使用不够灵活,性能受限等问题,设计并实现了一套基于人脸识别技术的智能视频监控系统。文章介绍了智能视频监控系统总体框架和算法流程的设计;分析了系统核心算法——人脸检测和人脸识别,做出了有针对性的优化设计;阐述了系统的实现方案。实验结果表明,该系统在人脸检测、人脸识别等的各类指标上均具有很强的竞争力,能满足具有前后门的会堂、剧院、仓库等大型场所的安防需求。
關键词: 视频监控; 人脸检测; 人脸识别; 人脸属性
中图分类号:TP391.4 文献标志码:A 文章编号:1006-8228(2019)11-62-05
Abstract: The intelligent video surveillance system based on face recognition is a hot research issue in the security field. Aiming at the problems of existing security products, which have limited use scenarios, inflexible deployment and use, and limited performance, an intelligent video surveillance system using face recognition technology is designed and implemented. This paper introduces the design of overall framework and algorithm flow of intelligent video surveillance system, analyses the core algorithm of the system, the face detection and face recognition, makes targeted optimization design, and expounds the implementation scheme of the system. The experimental results show that the proposed system has strong competitiveness in various aspects, such as face detection and face recognition, and meets the security requirements of large venues such as warehouses, theaters, and halls with front and rear doors.
Key words: video monitoring; face detection; face recognition; face attribute
0 引言
智能视频监控系统无需监控人员持续地盯着屏幕,减轻了工作人员的负担,并具有主动性和实时性的优势。智能视频监控系统的主要职责是利用计算机视觉技术从视频图像中检测、跟踪、识别人脸,并对该主体的行为进行理解与描述[1]。
目前,国内外智能人脸视频监控技术在公共安防领域已经得到了广泛的应用。在国际上,比较有代表性的有美国Identix公司研制的ARGUS人脸监控系统,以及为英国警方开发的Premier Electronics人脸识别系统等。在国内,实力较强的相关企业有上海的银晨,香港的钛极,以及海康、汉邦等安防公司。
现有的基于人脸的智能视频监控系统已经有了比较成熟的产品,但是还存在以下的问题。一方面,现有的产品使用场景在设计时已经做了提前预设,部署和使用不够灵活,无法有效地贴近安全需求和灵活地应用于具体的实际场景。另一方面,人脸的细节结构十分复杂多变,人脸监控的应用环境也有光照、姿态、背景等的不同,这对人脸检测、识别算法提出了严苛的要求。
为了解决以上问题,针对具有前后门的仓库、剧院、会堂等大型场所的安防需求,本文设计并实现了一整套基于人脸识别技术的智能视频监控系统,对从系统架构的设计到具体算法的实现都做了比较详尽的阐述,同时针对具体实现过程中遇到的问题进行了分析,并提出了相应的解决方案。
1 人脸识别监控系统总体设计
1.1 系统总体架构设计
本系统由二路人脸卡口IPC网络摄像机、智能算法服务器、Web前端服务器、大数据服务器等硬件以及运行在这些服务器平台上的算法及软件组成。总体的系统架构如图1所示。
该系统总体采用模块化设计,不同的服务器上部署有不同功能的软件模块。算法服务器提供可供调用的智能算法库,算法调度模块调用算法并保证算法运行的实时稳定,拉推流模块负责拉取前端IPC的视频流,以及将处理完成的视频流推送至总体调度模块。总体调度模块负责数据的传输与调度工作,Web页面模块负责产品前端展示部分,此两者均可运行在Web服务器上。同时,在大数据服务器上加入分布式计算与分布式存储的内容,分布式计算模块负责人脸检索过程中的快速比对计算,分布式存储模块负责注册数据库与历史信息数据库的维护。
智能人脸监控系统设计的原则是尽量保证各模块的低耦合,并为各模块预留较多的扩展接口,以使整个系统具备良好的可扩展性,在提出针对性需求设计开发时,能够快速的利用现有的框架进行算法改良以及功能的扩充,保障可持续发展。
在以上的系统框架下,数据在各模块之间流动,实现了整个智能人脸监控系统的功能。总体的数据流向如下:2路人脸卡口IPC采集前端视频流,智能算法服务器拉取视频流并进行人脸算法处理,算法处理后原始视频流加处理结果流至Web及调度服务器中的总体调度模块进行调度;最后,总体调度模块对Web展示和大数据计算及存储进行调度,完成算法处理结果的存储、计算、展示。
1.2 算法总体流程设计
人脸识别与其他生物特征识别技术相似,应用过程的基本流程分为离线注册和在线识别。人脸识别系统通过离线注册存储大量不同人脸及其身份信息,在系统运行时将待识别人脸与库中人脸做比对,找到匹配人脸,识别人员身份。
本项目系统算法流程图如图2所示,人脸注册的具体实现步骤为:先利用成像设备采集注册用的人脸图像;再利用人脸检测技术从图像中定位并分割出人脸图像;最后利用特征提取技术抽取能够表征人脸图像的特征向量,形成特征模板并存储至数据库中。人脸识别的基本流程(特征抽取过程)与人脸注册相似,包括人脸检测、人脸跟踪、人脸质量评测、人脸优选、人脸特征提取,不同的是,在识别过程中,提取到的人脸特征向量不再存储,而是与注册时提取的人脸特征向量进行比对,最终返回比对结果。人脸识别过程经历了从人体物理空间到人脸局部图像空间,再到人脸特征数据空间,最后到类别空间的转换。在这个转换过程中,人脸检测、人脸优选、特征提取分别起到了关键作用,这也是人脸识别中三项最为关键的技术,这三部分的实现优劣直接关系到人脸识别精度。
算法总体的业务逻辑如下:当程序启动后,先根据相机ID创建进程,然后初始化四个主要功能模块:视频拉推流功能模块,以脸搜脸功能模块,人脸注册功能模块,人脸检测及识别模块。算法框架中除视频拉推流模块外,其余三个模块互斥。因此,模块初始化完成后,根据条件启用相应的功能,程序运行逻辑如下:判断是否启动以脸搜脸功能。若是,则暂停人脸注册和人脸检测功能模块,启动以脸搜脸功能模块,待任务完成后返回。人脸注册和人脸检测及识别功能以此类推。
2 人脸识别算法原理与设计
智能人脸视频监控系统的算法库包括若干算法,以支撑整个系统功能的实现,这些算法分别是人脸检测、人脸跟踪、人脸质量评测、人脸优选、人脸特征提取、人脸识别等,本节针对其中最重要的两个算法——人脸检测与人脸识别,分别进行分析与阐述,并针对本文系统进行了针对性的设计。
2.1 人脸检测算法
所谓人脸检测,就是给定一张图像,找到其中是否存在一个或多个人脸,并返回人脸置信度和人脸框位置。它是从待识别图像上获取有用信息的第一步,是实现实时、高精度人脸识别系统的前提和基础。在智能人脸视频监控应用场景下,人脸检测的难点在于应用场景中人脸的多尺度、多角度、部分遮擋、光照不均等的不可约束状态和环境,这为人脸检测的实时性、鲁棒性、准确性带来不小的挑战。本系统采用一种由快速消化卷积层和多尺度卷积层构成的即轻量又强大的网络结构,结合类SSD的特征分层预测技术和多尺度多角度训练方法,采用锚点密度均衡策略,实现端到端、多尺度、多角度、部分遮挡等非约束条件下的实时人脸检测。
图3为项目中采用的人脸检测算法架构,它主要由快速消化卷积层和多尺度卷积层构成。在网络前期,使用快速消化卷积层快速缩小特征图大小。如图4所示,conv1,pooling1,conv2和pooling2的步长分别为4,2,2和2,使特征图大小迅速缩小为原来尺寸的1/32;卷积核太大速度就慢,太小覆盖信息又不足,权衡之后将conv1,pooling1,conv2和pooling2卷积核大小分别设为7*7,3*3,5*5,3*3;同时,激活函数使用CRelu来保证输出维度不变的情况下,减少卷积核数量,如图4(a)。在网络后期,使用多尺度卷积层更好地检测不同尺度人脸,主要设计原则是,类似于SSD在网络不同特征层进行检测,采用Inception模块进一步丰富感受野,如图4(b)。SSD和Faster R-CNN等方法对小目标检测效果欠佳[3-4],主要是因为小目标对应的锚点少,训练不足,为了解决这个问题,采用锚点密度均衡策略,对密度不足的锚点框以其中心进行偏移加倍,增加小人脸的锚点数量,提高小人脸的召回率。
快速消化卷积层可以让算法实现实时,多尺度卷积层则在不同层上丰富感受野,以便处理不同尺度的人脸;此外,锚点密度均衡策略可以让不同类型的锚点具有相同的密度,可以显著提升小脸的召回率。由此,本项目采用的人脸检测算法可以在CPU上处理速度达到25FPS,在NVIDIATitanX上的处理速度达到125FPS,而且处理时间不会因人脸的数量发生改变。
2.2 人脸识别算法
人脸识别往往是1:N比对(N>=1),即判断待识别人脸为注册库中的哪个人,为此需要事先存储不同人脸特征及其身份信息,系统运行时将待识别人脸与库中人脸进行特征比对,找出匹配人脸[5]。其理论基础是不同人脸由不同的特征组成,同一个人在不同照片里的脸,在特征空间中非常接近,不同的人脸在特征空间中相距较远,因此进行人脸识别的关键是提取出泛化能力强的特征。但是,在人员监控应用场景下,受到光照较差、遮挡、形变、侧脸等诸多非约束条件的影响,神经网络很难提取出与“标准脸”相似的特征,异常脸在特征空间中落到错误的位置,导致识别错误。影响人脸识别性能的因素包括网络模型的设计、训练数据的规模和损失函数的设计,本项目采用清洗后的大规模人脸数据集VggFace2[6],结合基于角度的损失函数,训练Resnet50[7],实现准确率高、鲁棒性好的实时人脸识别。
在监督学习中,损失函数是用来监督模型的预测值与真实值的不一致程度,损失函数越小,模型的鲁棒性越好,模型与训练数据分布的拟合程度越好。在人脸识别中,损失函数设计的最终目的是要使人脸分布实现类内距离足够小,类间距离足够大。本项目中通过将特征和权值进行归一化,在Cosine内部加入常量,实现一种基于角度的损失函数,并通过该损失函数训练网络。
3 系统实现与问题分析
在系统具体实现时,分模块进行针对性的开发。在人脸检测和识别时,首先创建视频拉流线程,通过RTSP协议从IPC拉取H.264编码的视频流并对得到的视频流进行解码,将视频图像缓存到队列中,然后创建4个线程,分别用于获取图像,提取人脸特征并传输,人脸检测,传输叠加结果图像。其中,传输线程通过RabbitMQ消息队列将Base64编码的结果和图片发送给大数据和Web模块;在人脸注册时,从后端接收Base64编码的图片,对图片进行Base64解码,并调用人脸特征提取算法提取人脸特征向量,以作为后续人脸识别比对的依据,将人脸特征向量发送至后端存入注册数据库;在以脸搜脸时,待搜索图片经过人脸检测和人脸特征提取操作后,得到表征人脸的特征向量,通过与存储于大数据服务器中人脸的特征比对,得到比对的结果,最终将以脸搜脸的结果在前端展示。
系统具体实现时,遇到了一些技术问题,本文针对这些问题进行了分析,找出合理的解决方案。
⑴ 人脸检测框与人脸图像不同步问题
目前人脸检测算法模块耗时较长,会出现视频卡顿的现象。实际测试中发现这是由于将人脸检测与检测结果视频叠加两个功能放在同一个线程中顺序执行造成的,为此,在算法框架设计中将它们放在两个不同的线程中并发执行,解决了该问题。
此外,人脸检测结果的更新速率无法与视频帧更新速率相匹配,造成了人脸检测结果滞后的问题。具体表现为,当人体运动时,Web界面展示的结果会出现“框追人”的现象,如图5所示。预期的人脸框位置应该为实线框的位置,而实际的人脸框位置为虚线框位置。针对上述问题,在检测结果视频叠加线程中加入视频帧缓存,分别取不同的视频帧用于人脸检测和检测结果视频叠加,以错开处理时间,达到缓解人脸与检测框不匹配的效果。
⑵ 算法指标难提升问题
本系统中,算法指标提升上主要面临两个难点:①人员监控场景下,人脸遮挡、光照不均、人脸尺度大小不一,导致人脸召回率低;②人脸姿态、人脸遮挡、光照条件不佳、形变、侧脸,造成人脸识别率低。
针对第一个问题,对训练样本进行剪切、缩放、旋转等样本增广操作,通过在不同特征层进行预测,以锚点均衡策略来提高小目标的召回率;针对第二个问题,在Resnet50结合基于角度的损失函数的网络结构上训练大规模人脸识别数据集VggFace2。通过上述方法有效提高了召回率和识别精度。
4 实验与分析
人脸检测模型在NVIDIATitan X的前向时间仅为8ms,加上图像预处理和检测结果解析,人脸检测需耗时30ms左右,满足实时性要求。标注实际场景图像约300张,测试得AP为90.57%,满足预设指标。图6为实测检测结果。由图6可见,人脸检测效果良好,并且即便在人脸大面积遮挡的情况下,仍然能够有效地检测到人脸。
人脸识别模型输入图像大小为112*112,识别模型NVIDIATitan X上的前向时间为18ms,满足实时性要求。实际采集人脸图像并标注35人的70张图像,在有2400多张干扰图像的情况下,人脸识别准确率大于95%,满足预设指标。
其他一些测试结果包括:人脸属性准确率>90%,满足项目指标,满足实时性;实际测试框架稳定运行72小时以上。以上的结果都表明本系统具有一定的先进性。
5 结束语
本文设计并实现了一整套基于人脸识别技术的智能视频监控系统。首先,设计了智能人脸视频监控系统的总体框架和算法流程,主要由运行在三个服务器上的六个功能模块实现;然后,分析了系统核心算法——人脸检测和人脸识别,设计了由快速消化卷积层和多尺度卷积层构成的人脸检测神经网络,并基于Softmax為人脸识别改进得到了新的损失函数,通过Resnet50来训练大规模人脸数据集VggFace2,实时准确地识别人脸;最后,阐述了系统的实现方案,并对实现过程中遇到的召回率和准确率低的问题进行了分析,给出了合理的解决方案。
参考文献(References):
[1] 严杰.支持人脸检测的智能视频监控系统的设计与实现[D]. 重庆大学.
[2] 李苗在,谷海红.人脸识别研究综述[J].电脑知识与技术:学术交流,2011,07(8X):5992-5994
[3] 汪济民.基于卷积神经网络的人脸检测和性别识别研究[D]. 2015.
[4] Liu W,Anguelov D,Erhan D,et al.SSD: Single Shot MultiBox Detector[C].European Conference on Computer Vision. 2016.
[5] Ren S,He K,Girshick R,et al.Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks.[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2017, 39(6):1137-1149.
[6] Cao Q,Li S,Xie W,et al.VGGFace2:A Dataset for Recognising Faces across Pose and Age[C].2018.
[7] Akiba T,Suzuki S,Fukuda K.Extremely Large Minibatch SGD:Training ResNet-50 on ImageNet in 15 Minutes[J]. 2017.