APP下载

一种轻量级人脸追踪与识别系统设计方案

2022-07-23车佳祺许晓荣梁颢铭

电子设计工程 2022年14期
关键词:舵机人脸人脸识别

车佳祺,许晓荣,梁颢铭

(杭州电子科技大学通信工程学院,浙江杭州 310018)

在信息化时代下,人脸追踪和识别在人机交互[1]、身份识别[2]、智能家居[3]、安防等场景有着广阔的研究前景[4]。但是许多应用场景的条件较为苛刻,例如低功耗嵌入式设备能提供的计算资源有限且储存空间较小。针对此类应用场景设计轻量级的人脸追踪和识别系统具有重要的研究意义[5]。

该文将软件和硬件相结合提出一个轻量级人脸追踪和识别系统,可用于身份识别和人机交互,提升了用户体验。

基于RISC-V 架构[6]开发的Maixduino AI K210开发板自带一块用于神经网络加速的KPU[7],可在低功耗情况下表现出优异的计算性能。该文精简了YOLOX-Nano 的网络规模,根据实际应用情况修改了MobileFaceNet 的激活函数,开发了控制舵机的人脸追踪算法,最后将算法应用于软件系统,实现轻量级人脸追踪和识别,最终设计不同使用场景进行系统测试。

1 系统设计

1.1 系统硬件结构

该系统所需的硬件组成为Maixduino AI K210 开发板、摄像头、舵机组、LM2596 模块、18650 电池和LCD 屏幕。18650 电池和LM2560 模块组成供电系统,硬件工作流程图如图1 所示,系统示意图如图2所示。

图1 硬件工作流程图

图2 人脸追踪和识别系统示意图

Maixduino AI K210 开发板通过摄像头实时收集图像,处理、定位和识别图像中的人脸信息,并且提取图片中人脸的位置坐标,取所有人脸中最大的人脸,根据人脸偏离图像中心的距离来偏转舵机组,使人脸中心处于图像中心,实现人脸的追踪,随后Maixduino AI K210 开发板对人脸进行识别,并且将识别结果显示在LCD 屏幕上。

1.2 系统软件结构

该系统的软件部分包含了缩减后的YOLOXNano[8]人脸检测算法、改进后的MobileFaceNet 人脸识别算法和人脸追踪算法。系统的软件工作流程图如图3 所示。

图3 软件工作流程图

该软件系统的输入为实时图像。通过基于YOLOX的人脸检测算法,可以得到实时图像中的所有人脸信息,取所有人脸中最大的人脸作为需要追踪和识别的对象。基于MoblieFaceNet 的人脸识别算法得到单个人脸图像后进行人脸识别,输出识别的人脸结果。人脸追踪算法得到人脸位置信息后,经过计算得到舵机组需要转动的角度,实现人脸追踪。以上过程是实时的、不断循环的,最终可以实现人脸的追踪和识别。

2 人脸检测的实现

2.1 YOLOX-Nano

YOLO算法从2016年被提出到现在已经存在6个分支,目前最新的是YOLOX。YOLOX 用Decoupled Head代替了原来的YOLO Head,使用Mosaic和Mix-up两个数据增强手段,去除了anchor box,优化了模型的性能。YOLOX-Nano 是YOLOX 模型的简化版本,降低所需要运算量的同时精度也有所下降[8]。

2.2 缩减后的YOLOX-Nano算法

Maixduino AI K210 开发板MCU 内置的神经网络处理器(以下统称KPU)是通用的神经网络处理器,其内置了Conv、Batch Normalization、Activation、Pooling 单元,通过厂家提供的NCC 工具,可以实现人工神经网络的部署和运行。但是受限于开发周期和成本,该KPU 能够支持的算子、特征图(future map)大小以及参数数量受到了极大地限制,最大支持神经网络参数的大小为5.5~5.9 MB。因此,为了使得神经网络模型能够在K210 上顺利运行,文中对模型进行了缩减。改进后的目标检测算法结构图如图4所示。

图4 缩减后的YOLOX-Nano网络结构

YOLOX-Nano 的原始输入尺寸是416×416,由于YOLOX 在运行的过程中通过逐层下采样进行特征匹配,对416 不断除以2 后得到的数字是13,即最小的一层为13×13。神经网络占用的内存超出了硬件的限制,因而不能直接将现有模型移植进设备。考虑到实际应用中,人脸识别需要得到足够多的信息才能有比较高的准确度[9],即人脸离摄像头要尽可能近。经实验可知,缩减特征图不会对信息量较为丰富(即大于112×96)的人脸检测带来负面影响,只有在对远处极小的人脸进行检测时,存在漏检的情况。综合以上考虑,文中将输入图像的长宽缩减至原来的7/13,使模型的参数量下降,网络更加轻量化。

3 人脸识别的实现

3.1 MobileFaceNet

MobileNetV1 是Google 在2017 年提出的一种小而高效的算法,旨在保持一定的网络性能的条件下,压缩模型复杂度[10]。Google 随后在MobileNetV1 的基础上进行改进得到了MobileNetV2[11]。在MobileNetV1的深度卷积层之前,MobileNetV2 使用1 × 1 的卷积进行升维操作,提升了算法在高维度工作的性能。与此同时将最后一个Relu 激活函数替换成Linear线性激活函数,解决了Relu 激活函数在低维度的信息丢失问题。MobileFaceNet 是MobileNetV2 的改进版本[12]。该算法用一个7×7×512 的可分离卷积代替原本的全局平均池化,提升了模型的表现性能,并引入归一化层来加快模型的收敛速度。

3.2 改进后的MobileFaceNet算法

Maixduino AI K210 支持的算子中不包含ReLU6算子,因此将模型的激活函数替换为LeakyRelu 激活函数,随后进行重新训练。改进后的MobileFaceNet网络结构如图5 所示。

图5 改进后的MobileFaceNet网络结构

MobileFaceNet 模型的输出是一个128 维的向量,因而,硬件FPU 可以加速人脸和数据库的比对操作。文中设计了两种比对方式进行交叉验证:取模和求余弦相似性(similarity)。只有当两个张量之间的差异小于一定值时,程序才会判断验证通过。

4 人脸追踪的实现

Maixduino AI K210 开发板首先使用缩减后的YOLOX-Nano 算法,得到人脸定位信息和图像中心点偏差,随后计算得到需要舵机组旋转的角度,控制舵机转动,实现人脸追踪。YOLOX 算法检测到图像中所有人脸,该系统取图像中最大的人脸作为追踪目标。

4.1 建立二维坐标系

为了更好地计算人脸中心与图像中心的偏差量。在摄像头采集的图像中建立二维坐标系,利用YOLOX 算法得到人脸中心坐标(P(x),P(y)),P(x)表示人脸横坐标,P(y)表示人脸纵坐标。图像坐标右上角为坐标最大值(Wm,Hm),图像中心点为(O(x),O(y)),两者关系的表达式如下:

令dW表示人脸中心与图像中心点之间横坐标的偏差量,dH表示人脸中心与图像中心纵坐标的偏差量,其表达式如下:

人脸定位示意图如图6 所示。

图6 人脸定位示意图

4.2 舵机组旋转角度的计算

一般来说,舵机都有旋转的角度限制,在该系统中,水平舵机旋转角度在[-90°,90°]之间,垂直旋转舵机旋转角度在[-30°,60°]之间。设水平旋转舵机和垂直旋转舵机的当前角度分别为θ和l,需要偏转的角度分别为dθ和dl。舵机需要的旋转角度与当前的角度之前存在如下限制条件:

单摄像头无法测算出摄像头与人脸之间的距离。因此设人脸和摄像头之间的距离为L,L需要通过实际使用情况来估算。在实验室中,通过评估测试情况得出使用距离约等于50 cm。因为该系统是一个实时负反馈系统,L值对系统稳定性和实际使用影响不大。根据图6 人脸定位示意图中的数学关系,可以算出需要偏转的角度分别为dθ和dl,如式(5)所示。

Maixduino AI K210 开发板计算出舵机旋转角度之后,将舵机组旋转角度转化成对应占空比的PWM波,发送给舵机组,舵机转动到设定角度,如此循环操作,可以在舵机转动范围内将人脸中心点定位在图像的中心点,实现精确追踪。

在实际操作时,由于舵机转动存在一定机械抖动且YOLOX 识别到人脸的中心点会小范围偏移,导致系统在对准人脸之后会有小范围抖动情况。为了解决该问题,在程序中设置偏移启动量k,舵机的启动条件为:

5 实验结果和分析

5.1 实验数据集准备

该系统的目标之一是人脸检测,而测试模型使用的数据集是Coco 数据集,其中缺少人脸数据,使用Coco 数据集测试得出的结果仅能表示该改进后的模型结构所拥有的表达能力[13]。在实际应用中,需要自行收集人脸数据来进行迁移学习,得到人脸检测的模型。人脸识别部分则使用LFW 数据集进行训练和测试[14]。

5.2 模型训练与测试

文中实验平台的硬件参数如表1 所示,在此基础上搭建软件环境Ubuntu18.04、Python、Tensorflow、CUDA 等。

表1 实验平台硬件参数

原YOLOX-Nano 模型与主流的Faster R-CNNResnet50[15]和SSD512[16]算法的性能对比如表2 所示。在牺牲部分精度之后,参数量和运算量大幅下降。在原YOLOX-Nano 模型的基础上,运算量从1.08 GFLOPS 下降到0.31 GFLOPS,参数量基本不变,精度再次下降,在实际使用过程中精度对人脸追踪效果影响不是很大。

表2 不同检测算法性能对比

表3 给出了不同人脸识别算法的性能对比,与MobileNetV2相比,MobileFaceNet的参数数量从2.1 M下降到1.0 M,运算量从0.88 GFLOPS 下降到0.22 GFLOPS,准确度从98.58%上升为99.28%。MobileFaceNet 不能直接移植的主要原因是ReLU6 算子不支持,文中对模型的激活函数替换为LeakyReLU 后进行重新训练,在LFW 测试集上的准确度仅下降了0.2%,但仍大于99%,因此认为改进后的MobileFace Net依旧拥有较好的表达能力。

表3 不同人脸识别算法性能对比

5.3 系统测试结果和分析

将缩减后的YOLOX-Nano 算法和改进后的MobileFaceNet 算法移植到Maixduino AI K210 开发板中,文中设计了多种实际情况用来测试系统的性能,其结果如表4 和表5 所示,图7 为系统测试的4 种情形。

图7 系统测试的4种情形

表4 人脸追踪性能测试结果

从表4 结果中可以看出,通常情况该系统可以有效地进行人脸的检测和追踪,并且在多个人脸同时存在时也可以成功检测并追踪图中最大人脸。少部分的人脸遮挡对系统人脸追踪性能影响不大,但系统无法在大面积的人脸遮挡时准确检测出人脸并追踪。系统具有良好的人脸检测追踪性能。从表5结果中可以看出系统在通常情况下可以有效地识别人脸,并且在小幅度侧脸条件下具有良好的识别性能。当人脸侧转角度过大或者俯仰角度超过一定范围时,系统无法识别,系统具有良好的识别性能。

表5 人脸识别性能测试结果

6 结论

文中基于Maixduino AI K210 平台,成功将缩减后的YOLOX-Nano 网络和改进后的MobileFaceNet网络移植到平台上。通过将输入图像的长宽缩减至原来的7/13,使YOLOX-Nano 运算量从1.08 GFLOPS缩减到0.31 GFLOPS。将MobileFaceNet 网络的激活函数替换为LeakyRelu,使K210 平台可以运行MobileFaceNet 网络,准确度小幅下降,从99.28%下降到99.10%。系统通过缩减后的YOLOX-Nano 网络检测人脸并且定位人脸,然后将需要转动的角度发送给舵机实现人脸追踪,最后利用MobileFaceNet 网络识别检测出的人脸。实验测试表明,该系统具有良好的人脸追踪和识别性能。下一步工作是优化模型结构和损失函数,并且提升系统的性能和实用性。

猜你喜欢

舵机人脸人脸识别
人脸识别 等
有特点的人脸
玻璃窗上的人脸
人脸识别的“国标”来了
荣耀畅玩7C:人脸识别
“领家系”可爱脸VS“高冷系”美人脸
超音速舵机保护器
“人脸识别”人工智能测谎仪研发成功
菜鸟看模型
长得象人脸的十种动物