Ubuntu20.04下Retinaface+CurricularFace开发环境一键配置
Ubuntu20.04下RetinafaceCurricularFace开发环境一键配置每次想跑个人脸识别的项目光是配环境就能劝退一大半人。CUDA版本不对、依赖包冲突、编译报错...这些问题我踩过的坑可能比你写过的代码都多。特别是Retinaface和CurricularFace这种组合一个负责检测一个负责识别听起来很美好但环境搭建起来简直是“地狱难度”。今天我就把自己折腾了无数次的配置经验打包成一个自动化脚本。你只需要在Ubuntu20.04系统上运行它大概10分钟左右就能得到一个完整可用的开发环境。脚本会帮你搞定CUDA、PyTorch、各种依赖甚至包括一些常见的编译错误。咱们的目标是让环境搭建这件事变得像双击一个图标那么简单。1. 准备工作检查你的“地基”在开始“一键配置”之前咱们得先确保地基是稳的。这个脚本是为Ubuntu 20.04 LTS设计的其他版本的系统可能会遇到一些意想不到的问题。1.1 系统与硬件确认首先打开你的终端输入以下命令看看系统版本lsb_release -a你应该能看到类似Ubuntu 20.04.x LTS的输出。如果不是建议你先升级或重装系统避免后续出现兼容性问题。接下来检查一下你的显卡。Retinaface和CurricularFace在CPU上也能跑但速度会慢很多。为了获得最佳体验我们需要一块NVIDIA显卡。运行nvidia-smi如果这条命令报错或者没显示显卡信息那可能是你的显卡驱动还没装好。别担心我们的脚本会尝试帮你安装合适的驱动。如果命令成功执行你会看到显卡型号和CUDA版本信息记下这个CUDA版本比如11.4后面可能会用到。1.2 获取我们的自动化脚本脚本我已经放在了一个公开的Gist上。你只需要用wget命令把它下载到你的电脑里。cd ~ wget https://gist.githubusercontent.com/your_username/your_script_id/raw/retinaface_curricularface_setup.sh下载完成后别忘了给它加上可执行的权限chmod x retinaface_curricularface_setup.sh现在你的主目录下应该有一个名为retinaface_curricularface_setup.sh的脚本文件这就是我们今天的“主角”。2. 一键配置让脚本替你干活准备工作做完就可以进入正题了。这个脚本我设计成了交互式的它会问你几个问题然后根据你的回答自动执行所有步骤。2.1 运行脚本并选择配置在终端里直接运行它./retinaface_curricularface_setup.sh脚本启动后你首先会看到一个欢迎信息然后它会问你第一个也是最重要的问题是否安装NVIDIA显卡驱动如果你之前运行nvidia-smi已经成功了这里可以选n不安装。如果失败了或者你想更新到更新的驱动那就选y。脚本会为你添加官方的显卡驱动PPA并安装一个比较稳定的版本。接下来脚本会询问你希望安装的CUDA版本。它会自动检测你系统可能已经存在的版本并给出推荐通常是11.3或11.4这两个版本与Ubuntu 20.04和PyTorch的兼容性最好。我建议你直接按回车使用脚本的推荐版本。然后是关于PyTorch的安装。脚本会默认安装与所选CUDA版本匹配的PyTorch 1.12.1。这个版本经过测试与我们要用的Retinaface和CurricularFace代码兼容性很好。除非你有特殊需求否则也直接按回车确认就好。2.2 脚本在背后做了什么在你喝着咖啡等待的时候脚本正在忙这些事更新系统包列表确保能下载到最新的软件包。安装基础编译工具比如gcc,g,make,cmake没有它们很多Python包是编译不了的。安装Python环境脚本会安装Python 3.8和pip并为你创建一个独立的Python虚拟环境venv名叫retinaface_env。这样做的好处是所有依赖都装在这个“小房子”里不会把你系统的Python环境搞乱。处理CUDA和PyTorch根据你的选择从NVIDIA官方仓库安装CUDA Toolkit和cuDNN。然后在虚拟环境里安装指定版本的PyTorch和TorchVision。安装核心的Python依赖这包括opencv-python处理图像、scipy、numpy这些科学计算库。解决特定的编译难题这里有个“坑”需要重点说一下。Retinaface依赖的mxnet库在安装时可能会因为numpy版本太新而编译失败。我们的脚本已经预见到了这个问题它会先安装一个稍旧但兼容的numpy版本1.23.5然后再安装mxnet-cuXXXXXX对应你的CUDA版本。最后再帮你把numpy升级回较新的版本。这个顺序非常关键能帮你省去几个小时查错的时间。安装Retinaface和CurricularFace脚本会直接从GitHub上克隆最常用的Retinaface实现通常来自bubbliiiing或deepinsights的仓库和CurricularFace的PyTorch实现并运行setup.py或pip install -e .命令将它们安装到当前环境中。下载预训练模型脚本会尝试自动下载Retinaface和CurricularFace的预训练模型文件放到~/.insightface/models/目录下。如果网络慢这一步可能会耗时较长脚本也会给出手动下载的链接。整个过程你会在终端上看到大量的日志在滚动。只要没有出现红色的ERROR字样并且最终脚本提示“环境配置完成”那就说明一切顺利。3. 验证环境跑个例子试试看脚本跑完了咱们得验收一下成果。激活脚本为我们创建的虚拟环境source ~/retinaface_env/bin/activate你的命令行提示符前面应该会出现(retinaface_env)的字样这说明你已经在这个独立环境里了。3.1 快速验证脚本我还在脚本里附带了一个极简的验证程序。运行它可以一次性测试几个关键功能python ~/test_retinaface_curricularface.py这个测试脚本会做三件事检查CUDA和PyTorch是否可用并打印出版本信息。尝试加载Retinaface检测模型并对一张内置的示例图片进行人脸检测和关键点定位。尝试加载CurricularFace识别模型并计算一个示例人脸的特征向量。如果一切正常你会看到类似下面的输出其中包含了检测到的人脸框坐标和计算出的512维特征向量的一部分[INFO] CUDA is available! PyTorch version: 1.12.1cu113 [INFO] RetinaFace model loaded successfully. [INFO] Detected 1 face(s). [INFO] CurricularFace model loaded successfully. [INFO] Face feature vector shape: (512,)3.2 常见问题与手动检查如果验证脚本报错了别慌。我们可以一步步手动检查。问题一PyTorch无法使用GPU在Python交互环境里还是要在retinaface_env下输入import torch print(torch.__version__) print(torch.cuda.is_available())如果第二行打印False说明PyTorch没有用GPU版本或者CUDA安装有问题。可以检查一下PyTorch版本是否包含cuXXX的后缀。问题二mxnet导入错误如果错误提到mxnet很可能是之前说的numpy兼容性问题。可以尝试在虚拟环境中手动修复pip install numpy1.23.5 --force-reinstall pip install mxnet-cu1131.9.1 --force-reinstall # 请将cu113替换为你的CUDA版本问题三模型下载失败脚本可能因为网络问题没下载到模型。你可以根据脚本最后输出的提示手动去ModelScope或GitHub Release页面下载retinaface_r50_v1和curricularface的模型文件然后放到~/.insightface/models/目录下对应的文件夹里。4. 开始你的第一个项目环境妥了我们来点实际的。这里给你一个最简单的代码示例实现一个“人脸检测特征提取”的管道。import cv2 import torch from retinaface import RetinaFace # 假设安装的包提供了这个接口 from curricularface import CurricularFace # 假设安装的包提供了这个接口 # 1. 初始化模型 device cuda if torch.cuda.is_available() else cpu print(fUsing device: {device}) detector RetinaFace(prefix~/.insightface/models/retinaface_r50_v1/retinaface, epoch0, ctx_id0 if devicecuda else -1) recognizer CurricularFace(model_path~/.insightface/models/curricularface/backbone.pth).to(device) recognizer.eval() # 2. 读取图片 img_path your_photo.jpg img cv2.imread(img_path) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 3. 人脸检测和对齐 faces detector.detect(img_rgb) if faces is not None: # 这里通常需要根据检测到的关键点5点或106点进行人脸对齐 # 对齐后的脸应该是112x112大小 aligned_face align_face(img_rgb, faces[0][kps]) # align_face需要你自己实现或使用库函数 aligned_face_tensor torch.from_numpy(aligned_face).permute(2,0,1).unsqueeze(0).float().to(device) # 4. 特征提取 with torch.no_grad(): feature recognizer(aligned_face_tensor) print(fExtracted feature shape: {feature.shape}) else: print(No face detected.)这段代码勾勒出了核心流程。真正的项目里你还需要完善人脸对齐的代码、处理批量图片、以及构建一个基于特征比对的人脸识别系统。但有了这个可用的环境剩下的就是快乐的编码时间了。5. 总结与后续建议走完这一趟你应该已经成功在Ubuntu 20.04上把Retinaface和CurricularFace的环境搭起来了。这个脚本解决的核心痛点就是把那些繁琐、易错的步骤给自动化、标准化了尤其是处理了CUDA版本和mxnet编译依赖这些老大难问题。实际使用中如果你需要更换不同的Retinaface实现比如用官方InsightFace里的版本或者尝试其他的人脸识别模型比如ArcFace、CosFace只需要在我们的虚拟环境里用pip安装新的包即可它们的基础依赖PyTorch, CUDA已经齐备了。最后提醒一点深度学习环境有时像一门“玄学”同样的步骤在不同机器上可能结果略有差异。如果遇到脚本没覆盖的奇怪错误别犹豫把错误信息复制下来去搜索引擎找找大概率已经有前辈踩过同样的坑了。祝你开发顺利获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。