【幸狐Omni3576边缘计算套件试用体验】人脸识别
本文介绍了幸狐 Omni3576 边缘计算套件结合 Retinaface 算法实现人脸特征识别的项目设计和部署方案。
算法介绍
RetinaFace 是帝国理工学院在 2019 年 5 月发表的论文中描述的人脸检测算法,作者开源了相关代码。

Retinaface 是一种单阶段人脸检测器,它通过联合额外监督和自监督多任务学习的优势,在各种尺度的人脸上进行像素级人脸定位。
特点
- 在 WIDER FACE 数据集上手动标注了五个面部特征点,在该外监督信号的帮助下,显著改善人脸检测效果;
- 增加自监督网格解码器分支,用于与现有的监督分支并行,预测像素级 3D 人脸信息;
- 在 WIDER FACE 硬测试集上,RetinaFace 的表现优于最先进模型的平均精度 1.1% ;
- 在 IJB-C 测试集上,RetinaFace 使最先进的 ArcFace 能够改善其面部验证结果;
- 通过采用轻量级骨干网络,RetinaFace 可以在单个 CPU 核心上实时运行 VGA 分辨率的图像。
环境部署
这里简要介绍环境部署流程,详细方案参考前面关于图像识别 和 车牌识别 的帖子。
- 安装 Ubuntu 22.04 操作系统
- 安装 RKNN-Toolkit2 工具
- 安装 Conda 工具
- 部署 RKNN-Toolkit2 Conda 环境
推理测试
rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,最新的示例支持 mobilenet 模型部署和 yolo 模型部署。
根据该模型的 GitHub 介绍文档,支持车牌识别的库对应 RetinaFace,且硬件支持 RK3576

1.克隆 rknn_model_zoo 库文件
git clone https://github.com/airockchip/rknn_model_zoo.git
2.获取 RetinaFace ONNX 模型文件
cd rknn_model_zoo/examples/RetinaFace/model
chmod a+x download_model.sh
./download_model.sh

3.执行 rknn_model_zoo/examples/RetinaFace/python
目录下的模型转换程序 convert.py
,
conda activate RKNN-Toolkit2
cd rknn_model_zoo/examples/RetinaFace/python
python3 convert.py ../model/RetinaFace_mobile320.onnx rk3576
输出模型

编译和构建
将 ONNX 模型转换成 RKNN 模型后,对 rknn_model_zoo/examples/RetinaFace
目录下的例程进行交叉编译。
编译前需设置环境变量
export GCC_COMPILER=/home/ljl/Omni3576-sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
注意工具链路径,建议先 编译官方 SDK .
执行 rknn_model_zoo 目录下的 build-linux.sh 脚本
chmod +x ./build-linux.sh
./build-linux.sh -t rk3576 -a aarch64 -d RetinaFace

交叉编译完成后在 rknn_model_zoo/install
目录下生成 rknn_RetinaFace_demo
文件夹,包含编译出来的程序和库文件

运行程序
将 rknn_RetinaFace_demo
文件夹传输至开发板,ADB 执行
adb push D:\rknn_RetinaFace_demo /home/luckfox
或使用 FileZilla 软件将文件夹拖拽至板端。
修改目标程序权限,执行程序
chmod a+x rknn_RetinaFace_demo
./rknn_retinaface_demo ./model/RetinaFace.rknn ./model/test.jpg
程序执行目标图片的识别任务,打印相关过程、人脸位置以及识别率等参数信息

输出人脸识别结果,位于 rknn_RetinaFace_demo
文件目录下

在 rknn_RetinaFace_demo/model
文件夹下添加人脸图片,执行板端推理程序,即可实现人脸的特征标定。
识别效果
介绍了 RetinaFace 模型实现单张和多张人脸识别的效果展示。
单张人脸识别
这里选取了一些影视作品的人物图片作为识别样本,识别效果如下

单张人脸图片识别效果较好,基本能够实现 100% 识别,且五官标定位置准确。
多张人脸同时识别
在单张人脸识别的基础上,尝试多张人脸同时识别的情况。
将目标图片上传至板端并运行程序,终端输出推理识别结果,包括多张人脸的位置和对应的准确率

图片输出结果位于 rknn_RetinaFace_demo
文件目录下

接下来就是心心念念的整活儿阶段了,找一些有趣的图片来测试






反馈
- 体验发现识别效果与图片质量密切相关,人脸清晰度对识别率的影响较大,整体识别取得了令人满意的效果。
- 此外,图片中人脸的角度对识别结果也有影响,脸部倾斜或侧脸会削弱识别率。
- 因此若要提高识别率,可以增加人脸图片的清晰度、像素分辨率,尽量选择人脸正面识别等。
总结
本文介绍了幸狐 Omni3576 边缘计算套件实现人脸特征识别的项目设计和部署方案,包括算法介绍、推理测试、板端部署、程序运行和效果展示等,并分析了结果和误差产生原因,给出了相应的解决方案,为智能识别相关项目提供了参考。