张莹,邵欣,韩思奇,王心辉
(天津中德应用技术大学,天津,300350)
最近,多地学校因新冠感染、甲流等发布停课通知。公众高度关注对抗疫情工作的进展状况,运用人工智能等新技术应用到人脸口罩佩戴识别、无接触式体温检测,智能化升级改造当前防疫手段,有助于疫情的群防群控和保障人民群众的健康。
系统设计从场景化落地角度出发,结合疫情防控场景的应用需求确定系统的功能模块,整个系统从人脸口罩识别开始,如佩戴口罩并且体温测量正常则进入人脸识别功能,验证身份信息完成整个流程。该系统包含口罩检测、红外测温、阈值报警、人脸录入、人脸识别等功能,根据功能需求确定系统设计的架构。
本文中人脸口罩佩戴识别功能分为人脸检测和口罩佩戴识别,根据功能需求可使用AI 通用技术目标检测算法实现此功能,目标检测可以获取图像中物体的位置,并可以识别对应物体的类别[1],如图1 所示。
图1 人脸口罩佩戴识别功能分析
因嵌入式 AI 推理平台算力有限,人脸口罩佩戴识别又需要实时检测,故需要使用轻量级的目标检测算法,针对嵌入式 AI 推理平台有专用的AI 推理框架TensorFlow Lite 对TensorFlow 生成的模型兼容性比较好,操作简单模型部署效率高。
英伟达的 Jetson Nano 是一块用于深度学习或者计算机视觉的开发板,板子整合了128 核Maxwell GPU,四核ARM A57 64-bit CPU 和4G LPDDR4 内存,也支持MIPI CSI-2 接口摄像头和PCIe Gen2 高速I/O(用来接无线网卡)。Jetson Nano 运行在Linux (Ubuntu)上,可以处理472 GFLOPS 的FP16 (半浮点数),而功耗只有5~10W,适用于端侧 AI 模型的部署,符合口罩检测项目案例的开发。
人脸识别的主要实现流程为:人脸关键点检测(使用人脸关键点检测模型提取68 个人脸关键点)、人脸对齐(根据人脸关键点数据实现人脸对齐功能)、人脸特征提取(将人脸对齐后的图像送入CNN 模型中提取128 维的特征数据)、人脸特征比对(根据获取到的人脸特征数据对比人脸识别底库中的人脸特征数据获取身份信息),通过程序从头编写实现这四个步骤过于复杂比较困难,故选用开源的软件包dlib 库中的API 函数来实现人脸识别功能。
系统选用Flask 程序框架实现,使用该软件包可以在网页显示GUI 界面,通过这种方式可使用局域网在任何有浏览器的设备中都可以查看到人脸录入的画面,实现人脸录入功能。
系统设计以 MCU 构建控制系统,包含无接触式体温检测、温度阈值调节、报警功能以及数据反馈等。无接触式体温检测:使用红外测温方式实现,由于体温测量精度比较高,故采用TN901 非接触式红外测温传感器来实现红外测温功能,该传感器使用I2C 通信,操作比较简单。温度阈值调节:通过按键控制温度阈值的上下调节。报警功能:根据测量的温度数据与提前设定的温度阈值判断是否开启报警器,报警器可以使用LED 灯和蜂鸣器组合的方式实现。数据反馈:无接触式体温监测系统的阈值信息和红外测温的温度值要通过串口数据发送到嵌入式 AI 推理平台中[2]。
系统硬件包括无接触体温检测系统和口罩佩戴识别与身份识别系统,如图2 所示。无接触体温检测系统由嵌入式微控制器、TN901、显示屏、蜂鸣器、按键等组成,实现红外测温传感器数据读取、按键检测、报警器、串口通信等基础功能;口罩佩戴识别与身份识别系统采用了能够部署轻量级深度学习模型的嵌入式AI 推理平台、摄像头和显示器等,如图3 所示。
图2 硬件系统设计框图
无接触测温系统STM32F103 作为核心主控协调整个系统;通过红外测温传感器TN901 测量获取温度值;0.96 OLED 显示作为人机交互界面显示温度及阈值;蜂鸣器作为阈值报警反馈;按键获取用户输入调节温度阈值[3]。
嵌入式 AI 推理平台系统运行着Ubuntu18.04 的Linux系统,操作较为简单类似于PC 端安装Linux 系统的操作,可以将嵌入式 AI 推理平台当作一个小型电脑来使用。
系统软件设计方案如图4 所示,实现深度学习模型部署到终端设备全过程。
步骤1(数据集采集):采集佩戴口罩与未佩戴口罩的人脸图片;
步骤2(数据集标注):使用数据集标注软件VoTT 对已采集的数据集进行标注,将所有图片上的人脸区域位置进行标注,并标记对应的类别是佩戴口罩还是未佩戴口罩;
步骤3(深度学习模型构建与训练):基于实际应用需求选取目标检测模型,因要完成嵌入式端模型部署,故采用轻量级RFB-Net 目标检测模型,如图5 所示。模型确定完成之后,使用TensorFlow 深度学习框架构建模型的网络结构,并加载标注完成的数据集完成模型训练,模型训练完成编写模型推理代码验证模型的识别率。口罩佩戴功能完成后增加身份识别功能,使用开源的人脸识别软件包完成人脸录入与人脸识别功能;
图5 RFB-Net 模型结构
步骤4(模型转换):PC 端训练的深度学习模型要部署到端侧设备中需使用模型推理框架,模型推理框架需匹配对应的模型格式,在本项目中使用TensorFlow Lite 模型推理框架完成模型量化(在降低模型参数量的同时损失较小的识别率)和转换的步骤;
步骤5(模型部署):在端侧设备中安装相关软件包(Numpy、OpenCV、TensorFlow Lite 等)搭建开发环境,并使用TensorFlow Lite 编写模型推理的代码,完成口罩识别模型的部署;
步骤6(端侧设备综合系统构建):在端侧推理平台中集成口罩识别、人脸录入、人脸识别和识别结果与体温数据可视化功能,完成整个综合系统的构建。
步骤7(无接触测温系统构建):通过嵌入式微控制器采集红外测温传感器的数据,并完成阈值设定、阈值超标报警、体温与阈值数据上传(串口)等功能;
以上步骤又可以概述为三个部分:基于深度学习的轻量级目标检测模型训练、深度学习模型部署到终端的过程实现和无接触式体温检测功能的实现。
RFBNet 基于SSD 的backbone,受启发于人类视觉感知系统,结合了Inception、虫洞卷积的思想,尽量模拟人类的视觉感知,将RFB 集成至SSD,形成RFBNet。通过设计的RFB 模块,即使在轻量级主干网上也能提取到高判别性特征,最终RFBNet 速度快、性能好适合在嵌入式 AI推理平台中部署。
使用TensorFlow SavedModel 保存的AI 模型可以使用TFLite Converter 转换为tflite 模型,使用TFLite interpreter 加载tflite 模型并实现模型推理。
TensorFlow Lite 使用流程如图6 所示。TensorFlow Lite转换后的AI 模型,识别精度损失很小,而且模型的大小却缩减很多,所以可以使用AI 模型在嵌入式AI 推理平台中进行部署。
TensorFlow Lite 转换器根据输入的TensorFlow 模型生成FlatBuffer 文件(.tflite)。该转换器支持SavedModel目录、tf.keras 模型和具体函数。
TensorFlow Lite 模型加载步骤可分为三步:第一步,加载模型,分配张量;第二步,设置模型的输入数据;第三步,推理预测,获取模型的输出数据。
口罩检测使用AI 通用技术目标检测算法实现,通过功能分析方案选取确定使用轻量级的目标检测算法RFB-Net作为神经网络模型完成口罩检测的模型训练[4]。RFB-Net 需要使用深度学习框架搭建网络结构,故口罩检测的实现步骤与自定义数据集深度学习模型训练的实现步骤相似,共分为4 个步骤:第一步,人脸口罩数据集标注及预处理;第二步,RFB-Net 神经网络模型搭建;第三步,配置超参数训练模型;第四步,加载训练完成的模型推理预测验证口罩检测功能,如图7 所示。
图7 口罩检测实现步骤
人脸口罩数据集标注及预处理:
(1)获取数据集
下载开源的人脸口罩数据集,数据集格式为VOC:Annotations 存放标签文件.xml 文件;ImageSets 存放数据集分割的文件比如train、val、test;JPEGimages 存放.jpg格式的图片文件,数据集中人脸戴口罩和不戴口罩的图片,如图8 所示。
图8 口罩佩戴数据
(2)补充数据集
采集人脸戴口罩与不戴口罩数据集,使用微软发布的用于图像目标检测的标注工具VoTT 进行目标检测标注软件标注和人脸口罩数据集,并将数据集导出为VOC 格式添加至开源的人脸口罩数据集中,如图9 所示。
图9 口罩佩戴数据标注
第一步采集人脸佩戴口罩的图片,进行归类,当作模型的验证集来对模型的准确率进行测试;
第二步运行口罩识别的模型推理代码识别验证集中的图片并记录识别结果,并根据每组图片类型统计识别率汇总测试数据,如表1 所示。
表1 人脸口罩佩戴识别稳定性测试数据
根据实际的鲁棒性测试,因部分侧脸图片人脸区域太小特征不太明显导致会出现识别不到或者识别错误的问题,其他情况下模型的识别率较高,模型的泛化能力已完全满足应用需求。
本文研究的基于深度学习的口罩检测系统在准确度和稳定性等方面都能满足实际场景的应用需求,实现了PC 端的AI模型到小型嵌入式设备端部署及应用的完整开发流程。在未来可针对现有系统扩展人流统计、人员信息匹配等扩展功能,让系统功能更加完善尽快地完成商业化落地。