神经网络监督式树莓派人脸检测
NNMonitoring Pi Face Detection
摘要:传统的人脸检测方案在如今的工程应用上的使用较为广泛。传统人脸检测受限与固定场景下训练的人脸分类器,其检测的性能对于场景的依赖性较强,泛化的能力较弱。使用深度神经网络的人脸检测的检测性能远远高于传统的方式,其泛化能力也较强,但成本上,基于深度神经网络的人脸检测的方案远大于嵌入式设备。
针对成本控制、提升人脸检测的性能的要求,通过前端使用传统嵌入式设备(树莓派)使用级联的人脸检测器,后端使用MTCNN进行检测,以获得当前场景下的人脸数据集进行训练。如果针对多个场景,可以多个前端检测器与一个后端人脸检测服务器进行通信,已达到检测性能的提升和成本的降低。
1.技术方案
1、系统结构
前端检测:搭载摄像头的树莓派,使用级联的人脸检测器进行人脸检测,并且传输图像到后端使用深度学习进行人脸检测,获取后端服务器训练的人脸检测模型。
后端服务器:使用MTCNN人脸检测,对于前端传输的图像进行人脸检测,产生人脸数据集(正、负样本),进行传统人脸分类器的训练,回传给前端进行人脸检测。
1.2 MTCNN
MTCNN是论文《Joint Face Detection and Alignment usingMulti-task Cascaded Convolutional Networks》提出的人脸检测和对齐的算法。论MTCNN由3个网络结构组成(P-Net,R-Net,O-Net)。
Proposal Network(P-Net):主要获得人脸区域的候选窗口和边界框的向量,通过边界框对人脸候选窗口进行校准,通过NMS合并高度重叠的候选窗口。
RefineNetwork(R-Net):该网络结构还是通过边界框回归和NMS来去掉那些false-positive区域。只是由于该网络结构相比于P-Net多了一个全连接层,所以会取得更好的抑制false-positive的作用。
Output Network (O-Net):相比于R-Net层又多了一层卷积层,输出的结果会更加精细。作用和R-Net层作用一样。但是该层对人脸区域进行了更多的监督,同时还会输出landmark的5个点。
该文章中提出的一点:训练过程中困难样本的生成策略,本文采用的策略是再每次的mini-batch,按照损失的大小排列样本,取前70%样本作为困难样本,在BP阶段只计算这些困难样本,这样大大的提升了人脸检测的性能。
本次后端检测使用的MTCNN-light C++版本,无需框架的搭建,需要用到OpenCV和OpenBLAS,搭建MTCNN的三个网络结构,需要加载三个网络的模型。参考Github。
1.3 VJ-Detector
基于Haar_like特征,使用积分图表示图像加快特征计算,使用Adaboost进行特征的选择以及训练级联分类器的人脸检测算法由Paul Viola、Michael J.Jones 在论文《Robust Real-Time Face Detection》提出。
图1.3 级联分类器检测过程
该人脸检测算法用在树莓派上进行人脸检测。人脸检测器的训练需要采集正负样本,在一个固定场景下,进行人脸数据集样本的采集进而进行人脸检测,其检测当前场景的效果会较好,但对于另外场景进行检测,其分类器对于环境变更情况下的鲁棒性较差,需要重新训练人脸分类器,得到适应当前环境下人脸检测器。
2.系统设计
2.1 数据集的获取
本系统通过前端检测端,采集当前场景下的图片,传输给后端服务器使用深度学习的人脸检测进行人脸数据的标注,进行正负样本的自动生成,正样本为当前图像的人脸图像,负样本为当前图像中的非人脸的区域的图像,分别保存待进行训练生成级联人脸分类器,回传给前端人脸检测。
图2.1单张图片正负样本的获取
2.2 通讯方式(目前网络环境为局域网)
socket前端检测和后端服务器文件及图片信息的传输方式。Socket的定义是网络上的两个程序通过一个双向的通信实现数据的交换,这个连接的一段称为一个Socket,通常称之为“套接字”。在不同主机上的程序通常通过“套接字”向网络发出请求或者应答某个网络请求。
Socket是面向客户/服务器模型而设计的,与该系统的运行模式相契合。后端服务器拥有全局公认的Socket,前端检测器对后端服务器发送连接和请求需要后端服务器的IP地址以及端口号,才能实现前端和后端的相互通信。
2.3前端检测器在服务器上的训练(尚未实现)
前端的树莓派使用的人脸分类器是使用前端检测器采集到的图像,在后端服务器上使用神经网络进行人脸检测,采集出人脸正样本图像,以及除人脸区域外的负样本图像(人脸图像大小调整为20x20,负样本调整为40x40),在后端服务器使用神经网络进行人脸检测的结果人脸中,人脸的大小尺度不一致,但对于级联分类器的训练时,需要设定好训练的正样本的人脸的大小,需要进行人脸图像尺寸的统一。对于正负样本的数据进行整理和清洗后,使用OpenCV中的训练cascade分类器的工程进行训练,以上的操作是在后端服务器上进行的,之后将训练完成的cascade分类器文件回传给前端检测器即树莓派。