Retinaface+CurricularFace模型部署:Ubuntu20.04环境配置详解

1. 环境准备与驱动安装

在开始部署之前,我们需要确保Ubuntu20.04系统已经安装了合适的GPU驱动和基础依赖。这是整个部署过程的基础,也是很多新手容易遇到问题的地方。

首先检查你的GPU型号和当前的驱动状态:

lspci | grep -i nvidia
nvidia-smi

如果你看到"No devices were found"或者驱动未安装的提示,就需要先安装NVIDIA驱动。对于Ubuntu20.04,推荐使用以下命令:

sudo apt update
sudo ubuntu-drivers autoinstall
sudo reboot

重启后再次运行nvidia-smi,你应该能看到GPU信息和驱动版本。建议使用470或更高版本的驱动,以确保对最新CUDA版本的良好支持。

接下来安装一些基础的系统依赖:

sudo apt install -y build-essential cmake git wget unzip \
libopenblas-dev liblapack-dev libjpeg-dev libpng-dev \
python3-dev python3-pip python3-venv

这些依赖包包含了编译工具、数学库、图像处理库和Python开发环境,是后续安装深度学习框架的基础。

2. Conda环境配置

为了避免与系统自带的Python环境冲突,我们使用Conda创建一个独立的虚拟环境。这样既能保持系统环境的干净,也方便后续的管理和迁移。

首先下载并安装Miniconda:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

安装完成后,创建一个新的Python环境:

conda create -n retinaface python=3.8 -y
conda activate retinaface

选择Python 3.8是因为它在稳定性和兼容性方面都有很好的表现,大多数深度学习框架都对3.8版本有很好的支持。

3. CUDA和cuDNN安装

CUDA和cuDNN是GPU加速计算的核心,正确的安装配置对模型性能至关重要。根据你的GPU架构和驱动版本,选择合适的CUDA版本。

对于大多数现代GPU,建议安装CUDA 11.3:

wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run

安装过程中,记得勾选CUDA Toolkit,但可以不选Driver(如果已经安装了更新的驱动)。

安装完成后,需要配置环境变量。将以下内容添加到你的~/.bashrc文件中:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

然后使配置生效:

source ~/.bashrc

验证CUDA安装是否成功:

nvcc --version

接下来安装cuDNN,这是NVIDIA提供的深度神经网络加速库。你需要从NVIDIA官网下载对应版本的cuDNN,然后执行:

tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

4. PyTorch框架安装

现在开始安装PyTorch框架,这是运行Retinaface和CurricularFace模型的基础。根据之前安装的CUDA版本,选择对应的PyTorch版本。

对于CUDA 11.3,使用以下命令安装:

pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

安装完成后,验证PyTorch是否能正确识别GPU:

import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0))

如果输出显示GPU可用,并且能正确显示你的GPU型号,说明PyTorch安装成功。

5. 项目依赖安装

接下来安装项目所需的其他Python依赖包。创建一个requirements.txt文件,包含以下内容:

opencv-python==4.5.3.56
numpy==1.21.2
scipy==1.7.1
pillow==8.3.2
tqdm==4.62.2
scikit-learn==0.24.2
matplotlib==3.4.3

使用pip安装这些依赖:

pip install -r requirements.txt

这些包分别提供了图像处理、数值计算、进度显示、机器学习算法和可视化功能,是项目运行的基础。

6. Retinaface模型部署

现在开始部署Retinaface人脸检测模型。首先克隆官方代码库:

git clone https://github.com/deepinsight/insightface.git
cd insightface/detection/retinaface

编译CUDA扩展(如果需要):

cd ./models/retinaface/rcnn/
python setup.py build_ext --inplace

下载预训练模型权重:

mkdir -p weights
wget https://github.com/deepinsight/insightface/files/3835529/retinaface-R50.zip -O weights/retinaface-R50.zip
unzip weights/retinaface-R50.zip -d weights/

测试模型是否正常工作:

import cv2
from retinaface import RetinaFace

# 初始化检测器
detector = RetinaFace(model_path="./weights/retinaface-R50", network="net3")

# 加载测试图像
img = cv2.imread("test.jpg")

# 进行人脸检测
faces = detector.detect(img)

print(f"检测到 {len(faces)} 张人脸")

7. CurricularFace模型部署

CurricularFace是人脸识别中使用的损失函数和模型架构,需要单独安装和配置。

首先安装相关的依赖包:

pip install mxnet-cu113==1.9.0

下载CurricularFace预训练模型:

wget https://github.com/deepinsight/insightface/files/5534597/curricularface.zip -O curricularface.zip
unzip curricularface.zip

创建一个简单的测试脚本来验证模型:

import mxnet as mx
from insightface.model_zoo import model_zoo

# 加载CurricularFace模型
model = model_zoo.get_model('curricularface')

# 准备测试图像
img = mx.image.imread('test_face.jpg')

# 提取人脸特征
feature = model.get_feature(img)
print(f"特征向量维度: {feature.shape}")

8. 常见问题解决

在部署过程中,你可能会遇到一些常见问题。这里列出几个典型问题及其解决方法。

问题1:CUDA out of memory

这是因为GPU内存不足导致的。可以尝试减小批处理大小:

# 在检测代码中添加
detector = RetinaFace(model_path="./weights", batch_size=2)

问题2:libcudart.so找不到

这是因为CUDA库路径没有正确配置。检查环境变量设置:

echo $LD_LIBRARY_PATH

确保包含了CUDA的lib64目录。

问题3:MXNet和PyTorch版本冲突

如果同时使用MXNet和PyTorch,可能会出现版本冲突。建议使用虚拟环境隔离,或者确保使用兼容的版本。

问题4:模型加载失败

检查模型文件路径是否正确,以及文件是否完整下载。可以重新下载模型文件:

md5sum weights/retinaface-R50
# 对比官方提供的MD5值

9. 完整测试示例

最后,我们创建一个完整的测试脚本来验证整个流程是否正常工作:

import cv2
import numpy as np
from retinaface import RetinaFace
from insightface.model_zoo import model_zoo

# 初始化检测器和识别器
detector = RetinaFace(model_path="./weights", network="net3")
recognizer = model_zoo.get_model('curricularface')

# 加载测试图像
img = cv2.imread("group_photo.jpg")

# 人脸检测
faces = detector.detect(img)
print(f"检测到 {len(faces)} 张人脸")

# 对每张人脸进行识别
for i, face in enumerate(faces):
    # 提取人脸区域
    x1, y1, x2, y2 = face['bbox'].astype(int)
    face_img = img[y1:y2, x1:x2]
    
    # 提取特征
    feature = recognizer.get_feature(face_img)
    print(f"人脸 {i+1} 特征提取完成,维度: {feature.shape}")

运行这个脚本,如果能够正常检测人脸并提取特征,说明整个系统已经成功部署。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐