InsightFace-REST:便捷部署人脸识别服务的REST API
InsightFace-REST是一个开源项目,旨在为开发者提供一个便捷、易于部署和可扩展的REST API,用于实现InsightFace人脸检测和识别功能。该项目利用FastAPI作为服务框架,并使用NVIDIA TensorRT进行优化推理,以实现高性能的人脸识别服务。
项目概述
InsightFace-REST的核心目标是简化人脸识别技术的应用和部署过程。它基于官方InsightFace仓库中的Python包代码,但进行了重构和优化,使其更适合作为REST API服务使用。该项目提供了构建人脸识别REST API的源代码,以及将模型转换为ONNX和TensorRT格式的工具,所有这些都可以通过Docker进行封装和部署。
主要特性
InsightFace-REST具有以下关键特性:
-
支持使用Docker和nvidia-docker2在NVIDIA GPU系统上快速部署。
-
启动时自动下载所需模型(通过Google Drive)。
-
借助TensorRT优化、FP16推理以及ArcFace模型的批量推理,性能可比MXNet推理提升3倍。
-
支持旧版Retinaface检测器和基于MXNet的ArcFace模型,以及新版SCRFD检测器和基于PyTorch的识别模型(如glintr100、w600k_r50、w600k_mbf等)。
-
SCRFD后处理实现速度提升2倍。
-
支持识别和检测模型(目前仅限SCRFD系列)的批量推理。
-
可使用ONNX-Runtime在CPU上进行推理。
支持的模型
InsightFace-REST支持多种人脸检测和识别模型:
检测模型:
- Retinaface系列:r50_v1, mnet025_v1, mnet025_v2
- SCRFD系列:10g_bnkps, 2.5g_bnkps, 500m_bnkps等
- Centerface
- YOLOv5系列:yolov5s-face, yolov5m-face, yolov5l-face
识别模型:
- ArcFace系列:r100_v1, r50-msfdrop75等
- Glint360k系列:r100FC_1.0, r100FC_0.1
- WebFace600k系列:w600k_r50, w600k_mbf
- AdaFace:ir101_webface12m
此外,还支持性别年龄估计(genderage_v1)和口罩检测(mask_detector)等辅助模型。
部署和使用
InsightFace-REST的部署过程非常简单:
- 克隆项目仓库
- 执行
deploy_trt.sh
脚本(根据需要修改设置) - 访问http://localhost:18081查看API文档并试用
项目还提供了多GPU并行处理、FP16精度推理等高级配置选项,可根据具体硬件和性能需求进行调整。对于非GPU环境,也可以使用deploy_cpu.sh
脚本在CPU上运行服务。
API使用示例
InsightFace-REST提供了直观的REST API接口。开发者可以参考项目中的demo_client.py
文件,了解API的基本使用方法。主要的API端点包括:
/extract
: 提取图像中的人脸特征/draw_detections
: 在图像上绘制检测到的人脸框
性能优化
InsightFace-REST在性能方面做了大量优化工作。以SCRFD_10g_gnkps检测器和glintr100识别模型为例,在NVIDIA RTX 2080 Super GPU上的性能表现如下:
工作进程数 | 客户端线程数 | v0.6.2.0 FPS | v0.7.0.0 FPS | 性能提升 |
---|---|---|---|---|
1 | 1 | 56 | 103 | 83.9% |
1 | 30 | 72 | 128 | 77.7% |
6 | 30 | 145 | 179 | 23.4% |
这些优化包括:
- 使用Numba重新实现SCRFD,速度提升1.5-2倍
- 将图像归一化步骤移至GPU,减少CPU到GPU的数据传输
- 优化face_align.norm_crop实现,速度提升4.5倍
- 仅在需要时提取人脸剪裁,提高仅检测场景的性能
未来工作
InsightFace-REST团队正在继续改进项目,未来的工作方向包括:
- 添加人脸索引和搜索示例(基于Milvus)
- 将Triton Inference Server作为执行后端
结论
InsightFace-REST为开发者提供了一个强大而灵活的工具,可以轻松地将先进的人脸识别技术集成到各种应用中。通过优化的性能、丰富的模型支持和简单的部署流程,InsightFace-REST正在推动人脸识别技术在实际应用中的普及。无论是安防监控、身份验证还是人机交互,InsightFace-REST都为开发者提供了一个可靠的解决方案。
随着项目的不断发展和社区的贡献,我们可以期待InsightFace-REST在未来带来更多创新和改进,为人脸识别技术的应用开辟新的可能性。