已装VS2019/CUDA10.1/TF2.1.0,求Win10下dlib人脸识别GPU运行指南
嗨,我明白你现在的困扰——明明装了CUDA和VS,dlib却还是死守着CPU跑。别着急,咱们一步步把环境捋顺,让你的GTX1050彻底发挥作用。
第一步:先把基础环境的坑填上
GPU加速的前提是CUDA、cuDNN和VS的配置完全到位,先把这些检查清楚:
确认CUDA 10.1的环境变量
右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,确保系统变量里有这几项:CUDA_PATH:指向你的CUDA 10.1安装目录(比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1)CUDA_PATH_V10_1:和上面路径完全一致- 还要把
%CUDA_PATH%\bin和%CUDA_PATH%\libnvvp加到Path系统变量里
安装对应版本的cuDNN
CUDA 10.1必须搭配cuDNN 7.6.5(官方适配的稳定版本,别乱选其他版本)。下载后解压,把里面的bin、include、lib三个文件夹里的内容,分别复制到CUDA 10.1的对应目录:cudnn\bin→C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bincudnn\include→C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\includecudnn\lib\x64→C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64
检查VS2019的C++组件
打开VS2019的「安装程序」→「修改」,确保勾选了「使用C的桌面开发」,尤其是里面的「MSVC v142 - VS 2019 C x64/x86生成工具」和「Windows 10 SDK」(选和你系统匹配的版本,比如1903或更高)。
第二步:用Anaconda隔离出干净的运行环境
避免不同库版本冲突,咱们单独建个环境:
打开Anaconda Prompt,创建新环境(比如叫dlib-gpu):
conda create -n dlib-gpu python=3.7(TensorFlow2.1.0适配Python3.6-3.8,选3.7和CUDA10.1兼容性最好)
激活环境:
conda activate dlib-gpu先装GPU版TensorFlow验证基础GPU环境:
pip install tensorflow-gpu==2.1.0安装完跑一行代码验证:
import tensorflow as tf print(tf.test.is_gpu_available())如果输出
True,说明TensorFlow的GPU配置没问题,接下来搞dlib就稳了。
第三步:从源码编译带CUDA支持的dlib
默认pip装的dlib大多不带GPU支持,必须手动编译:
先装编译依赖:
conda install cmake pip install numpy获取dlib源码(推荐v19.21版本,适配CUDA10.1):
直接下载GitHub上的压缩包解压到本地(比如D:\dlib-19.21),或者用git克隆:git clone https://github.com/davisking/dlib.git cd dlib git checkout v19.21编译并安装:
在Anaconda Prompt里进入dlib根目录,运行:python setup.py install --yes USE_CUDA --yes DLIB_USE_CUDA这个命令会强制启用CUDA支持,编译过程可能要几分钟,别中断。如果提示找不到CUDA,就手动指定路径:
python setup.py install --yes USE_CUDA --yes DLIB_USE_CUDA --cuda_path "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1"
第四步:验证dlib是否真的启用了GPU
切换到Spyder的dlib-gpu环境,运行这段代码:
import dlib print(dlib.DLIB_USE_CUDA)
如果输出True,恭喜你,dlib已经成功绑定GPU了!
第五步:测试GPU版人脸识别
用dlib的预训练模型跑个测试,看看GPU能不能干活:
import dlib import cv2 # 加载人脸检测器和关键点预测器 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") # 读取测试图片 img = cv2.imread("test_face.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸(这里会调用GPU) faces = detector(gray, 1) # 绘制关键点 for face in faces: landmarks = predictor(gray, face) for n in range(0, 68): x = landmarks.part(n).x y = landmarks.part(n).y cv2.circle(img, (x, y), 2, (0, 255, 0), -1) cv2.imshow("Face Landmarks", img) cv2.waitKey(0) cv2.destroyAllWindows()
打开任务管理器看「性能」标签,如果GPU使用率明显上升,就说明你的GTX1050已经在全力工作了!
常见小问题排查
- 编译dlib时提示MSVC版本不对:确保VS2019的MSVC v142组件已装,并且Anaconda Prompt是管理员身份运行的。
dlib.DLIB_USE_CUDA输出False:检查编译时有没有加--yes USE_CUDA --yes DLIB_USE_CUDA参数,或者CUDA路径是不是写错了。- 运行时GPU没占用:单张小图片可能体现不出GPU优势,试试批量处理图片或者视频流,就能看到GPU使用率上去了。
内容的提问来源于stack exchange,提问作者anwar

