这个项目使用Ray分布式计算框架和InsightFace的Buffalo-L模型实现了高性能的人脸检测服务。
- 创建conda环境:
conda create -n face_detection python=3.8
conda activate face_detection- 安装必要的依赖:
# 安装基本依赖
pip install numpy opencv-python matplotlib
# 安装Ray分布式计算框架
pip install ray[default]
# 安装InsightFace (Buffalo-L模型的依赖)
pip install insightface onnxruntime-gpu
# 如果需要GPU加速,请确保已安装CUDA和cuDNNmodel_zoo/
├── main.py # Ray集群启动文件
├── README.txt # 项目说明文档
└── models/
└── buffalo_l/
├── buffalo_l.py # Buffalo-L模型基础实现
├── ray_buffalo_l.py # Ray Actor封装的模型实现
└── run.py # 调用示例
首先,启动本地Ray集群:
cd /root/Code/aiplat/model_zoo
python main.py这将启动一个本地Ray集群,并在控制台输出Ray Dashboard的访问地址(默认为http://localhost:8265)。
在另一个终端窗口中,部署Buffalo-L人脸检测服务到Ray集群:
cd /root/Code/aiplat/model_zoo
python models/buffalo_l/ray_buffalo_l.py该脚本会创建一个名为"Buffalo"的Ray Actor,并部署到集群中。
使用run.py进行本地验证:
cd /root/Code/aiplat/model_zoo/models/buffalo_l
python run.py --image path/to/your/image.jpg这将加载指定的图像,调用Ray集群中的人脸检测服务进行处理,并显示检测结果。
可以在Python代码中调用已部署的人脸检测服务:
import ray
import cv2
# 连接到Ray集群
ray.init(ignore_reinit_error=True)
# 获取已部署的人脸检测Actor
face_detector = ray.get_actor("Buffalo", namespace="face_detection")
# 读取图像
image = cv2.imread("path/to/image.jpg")
# 远程调用人脸检测
result = ray.get(face_detector.detect_face.remote(image))
# 显示结果
cv2.imshow("Face Detection Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()-
如果连接到Ray集群时出现问题,请确保:
- Ray集群已经启动(运行main.py)
- 连接地址正确(默认为本地连接)
-
如果模型加载失败,请检查:
- CUDA和cuDNN是否正确安装
- InsightFace模型是否已下载
-
如果出现资源分配错误,请检查:
- 是否有足够的CPU/GPU资源
- Ray集群配置是否正确
在ray_buffalo_l.py中,可以修改@ray.remote装饰器的参数来调整资源分配:
@ray.remote(num_cpus=1, num_gpus=0.5) # 分配0.5个GPU可以在BuffaloFaceDetector类的__init__方法中修改det_size参数来调整检测精度和性能:
self.app.prepare(ctx_id=0, det_size=(320, 320)) # 更小的尺寸,更快的速度对于多节点部署,请参考Ray官方文档配置集群地址和资源。
pip install -e .