第二章:环境搭建与工具链

说实话,环境搭建这事儿,看着简单,但坑是真不少。我见过太多同学在模型训练上花了两周,结果环境配了三天还没跑通第一个demo。这一章,我就把这几年的血泪经验掰开揉碎讲给你听。

2.1 Python环境配置

Python版本怎么选?我个人习惯用3.8或3.10。为什么?3.8最稳,几乎所有库都支持。3.10性能好一点,但有些老库可能报错。3.9?嗯,我建议跳过,它有点尴尬。

注意:千万别用系统自带的Python!我吃过这个亏。系统Python是给操作系统用的,你乱装包会把系统搞崩。一定要用虚拟环境。

我的标准配置是这样的:

# 安装Miniconda(比Anaconda轻量多了)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

# 创建虚拟环境
conda create -n face_recognition python=3.8
conda activate face_recognition

# 升级pip
pip install --upgrade pip

为什么要用conda?说白了,它管理依赖比pip强太多了。尤其是后面装CUDA相关的包,conda能自动帮你解决版本冲突。我在项目中遇到过好几次pip装到一半报错,换成conda一次过。

2.2 CUDA/cuDNN安装

这部分是重头戏。你想想看,人脸识别模型动辄几百兆,没有GPU加速根本跑不动。CUDA就是NVIDIA给GPU开的"后门",让咱们能用显卡算矩阵。

先查你的显卡型号:

nvidia-smi

看到输出里的CUDA Version了吗?那就是你显卡支持的最高版本。我建议装低一个版本,比如显示12.4,你就装12.1。为什么?稳定!

显卡型号 推荐CUDA版本 对应cuDNN版本
RTX 3090/4090 11.8 或 12.1 8.9.x
RTX 2080 Ti 11.3 8.2.x
GTX 1080 Ti 10.2 7.6.x
小技巧:装完CUDA后,记得把路径加到.bashrc里。我曾经忘了这步,折腾了两小时才发现是环境变量没配。
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

cuDNN安装更简单,其实就是把几个文件复制到CUDA目录下:

# 下载cuDNN后
cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/cudnn*.h /usr/local/cuda/include/
cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/libcudnn* /usr/local/cuda/lib64/
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

2.3 PyTorch vs TensorFlow:怎么选?

这个问题我几乎每次讲课都会被问到。我的答案很直接:做人脸识别,首选PyTorch。

为什么?三个原因:

  • 调试方便:PyTorch是动态图,你可以print中间结果。TensorFlow 2.x虽然也支持动态图,但总感觉有点别扭。
  • 学术界主流:最新的ArcFace、CosFace这些论文,官方代码全是PyTorch写的。你用TensorFlow还得自己复现,何必呢?
  • 部署生态好:PyTorch转ONNX、转TensorRT都很成熟。我最近做的项目就是从PyTorch训练,转ONNX,再用TensorRT推理,一条龙很顺畅。

当然,TensorFlow也有它的优势,比如TFLite在移动端部署确实强。但如果你刚入门,听我的,先学PyTorch。

# PyTorch安装(CUDA 12.1版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 验证安装
python -c "import torch; print(torch.cuda.is_available())"
# 输出True就对了

2.4 OpenCV与dlib安装

这两个库是人脸识别的"左右手"。OpenCV负责图像处理,dlib负责人脸检测和关键点定位。

OpenCV安装很简单:

pip install opencv-python opencv-contrib-python

这里有个坑:opencv-python是基础版,opencv-contrib-python包含了额外模块,比如人脸识别用的LBPH算法。我建议两个都装,省得到时候缺模块。

dlib就有点麻烦了。它依赖C++编译环境,Windows用户经常卡在这一步。我的建议是:

  • Linux/Mac:直接pip install dlib,前提是你装了cmake和boost
  • Windows:要么装Visual Studio Build Tools,要么直接用conda install -c conda-forge dlib
踩坑提醒:我曾经在Windows上编译dlib花了整整一下午,各种报错。后来发现conda装只要30秒...所以别跟自己过不去,能用conda就用conda。
# 推荐安装方式
conda install -c conda-forge dlib

# 验证
python -c "import dlib; print(dlib.__version__)"

2.5 完整环境验证脚本

所有东西装完后,跑一下这个脚本,确保环境没问题:

import torch
import cv2
import dlib
import numpy as np

print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"OpenCV版本: {cv2.__version__}")
print(f"dlib版本: {dlib.__version__}")

# 测试GPU
if torch.cuda.is_available():
    print(f"GPU型号: {torch.cuda.get_device_name(0)}")
    print(f"显存: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB")

# 测试OpenCV读取
img = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.imwrite("test.jpg", img)
print("OpenCV读写测试通过")

# 测试dlib人脸检测
detector = dlib.get_frontal_face_detector()
print("dlib人脸检测器加载成功")

如果所有输出都正常,恭喜你,环境搭建完成了!

说实话,环境搭建是最枯燥但最重要的一步。我见过太多人在这上面浪费好几天,最后心态崩了。按照我上面的步骤来,半小时内肯定搞定。下一章我们就开始真正的人脸检测实战了,到时候你会感谢现在认真配环境的自己。