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

Retinaface 是一种单阶段人脸检测器,它通过联合额外监督和自监督多任务学习的优势,在各种尺度的人脸上进行像素级人脸定位。
这里简要介绍环境部署流程,详细方案参考前面关于图像识别 和 车牌识别 的帖子。
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 边缘计算套件实现人脸特征识别的项目设计和部署方案,包括算法介绍、推理测试、板端部署、程序运行和效果展示等,并分析了结果和误差产生原因,给出了相应的解决方案,为智能识别相关项目提供了参考。
更多回帖