此文档介绍如何使用 CIX P1 NPU SDK 将 scrfd和arcface 转换为 CIX SOC NPU 上可以运行的模型。
整体来讲有四个步骤:
:::tip
步骤1~3 在 x86 主机 Linux 环境下执行
:::
请参考 安装 NPU SDK 进行 NPU SDK 和 NOE Compiler 的安装.
在 CIX AI Model Hub 中包含了 DeepLabv3 的所需文件, 请用户按照 CIX AI Model Hub 下载
cd ai_model_hub/models/ComputeVision/Face_Recognition/onnx_scrfd_arcface
请确认目录结构是否同下图所示。
|-- arcface.cix
|-- arcface_npu.py
|-- arcface_onnx.py
|-- cfg
| |-- onnx_arcfacebuild.cfg
| `-- onnx_scrfdbuild.cfg
|-- datasets
| |-- arcface_calibration_data.npy
| |-- arcface_input.bin
| |-- faces
| | |-- Chandler.png
| | |-- Joey.png
| | |-- Monica.png
| | |-- Phoebe.png
| | |-- Rachel.png
| | `-- Ross.png
| |-- in_video.mp4
| |-- scrfd_calibration_data.npy
| |-- scrfd_input.bin
| |-- test1.JPEG
| `-- test2.JPEG
|-- helpers.py
|-- inference_npu.py
|-- inference_onnx.py
|-- model
| |-- arcface.cix
| |-- det_10g.onnx
| |-- det_2_5g.onnx
| |-- det_500m.onnx
| `-- w600k_mbf.onnx
|-- out_npu.JPEG
|-- requirements.txt
|-- scrfd.cix
|-- scrfd_npu.py
`-- scrfd_onnx.py
:::tip
用户可无需从头编译模型,radxa 提供预编译好的 scrfd.cix 模型(可用下面步骤下载),如果使用预编译好的模型,可以跳过“编译模型” 这一步
wget https://modelscope.cn/models/cix/ai_model_hub_24_Q4/resolve/master/models/ComputeVision/Face_Recognition/onnx_scrfd_arcface/scrfd.cix
wget https://modelscope.cn/models/cix/ai_model_hub_24_Q4/resolve/master/models/ComputeVision/Face_Recognition/onnx_scrfd_arcface/arcface.cix
:::
将使用 NOE Compiler 编译好的 .cix 格式的模型复制到 Orion O6 开发板上进行模型验证
python3 inference_npu.py --det-weight ./scrfd.cix --rec-weight ./arcface.cix --faces-dir ./datasets/faces --source ./datasets/test2.JPEG
(.venv) radxa@orion-o6:~/ai_model_hub/models/ComputeVision/Face_Recognition/onnx_scrfd_arcface$ time python3 inference_npu.py --det-weight ./scrfd.cix --rec-weight ./arcface.cix --faces-dir ./datasets/faces --source ./datasets/test2.JPEG
npu: noe_init_context success
npu: noe_load_graph success
Input tensor count is 1.
Output tensor count is 9.
npu: noe_create_job success
npu: noe_init_context success
npu: noe_load_graph success
Input tensor count is 1.
Output tensor count is 1.
npu: noe_create_job success
./datasets/faces/Joey.png
./datasets/faces/Ross.png
./datasets/faces/Rachel.png
./datasets/faces/Monica.png
./datasets/faces/Chandler.png
./datasets/faces/Phoebe.png
npu: noe_clean_job success
npu: noe_unload_graph success
npu: noe_deinit_context success
npu: noe_clean_job success
npu: noe_unload_graph success
npu: noe_deinit_context success
real 0m0.896s
user 0m2.023s
sys 0m0.272s
结果保存在 output
文件夹中
使用 CPU 对 onnx 模型进行推理验证正确性,可在 X86 主机上或 Orion O6 上运行
python3 inference_onnx.py --images ./test_data/ --model_path centerface_sim.onnx
(.venv) radxa@orion-o6:~/ai_model_hub/models/ComputeVision/Face_Recognition/onnx_scrfd_arcface$ time python3 inference_onnx.py --det-weight ./model/det_10g.onnx --rec-weight ./model/w600k_r50.onnx --faces-dir ./datasets/faces --source ./datasets/test1.JPEG
real 0m6.883s
user 1m6.631s
sys 0m0.395s
结果保存在 output
文件夹中
可以看到 NPU 和 CPU 上推理的结果一致,但运行速度大幅缩短
论文链接:
Sample and Computation Redistribution for Efficient Face Detection
ArcFace: Additive Angular Margin Loss for DeepFace Recognition