Dlib(支持GPU)无法正常工作,不确定吗?

时间:2018-08-06 18:15:59

标签: python-3.x deep-learning face-recognition dlib

我的系统配置:

Windows 10, Nvidia 940mx 2GB GDDR5 GPU,8GB RAM,i5第8代。

已安装软件:

  1. CUDA工具包9.0
  2. cuDNN 7.1.4

使用以下命令安装上述要求后,我已经成功安装了具有GPU支持的dlib:

$ git clone https://github.com/davisking/dlib.git
$ python setup.py install --clean

正如dlib的创建者@Davis King所说,在我的jupyter笔记本上执行了:

import dlib
dlib.DLIB_USE_CUDA
[Out 17] :True

验证我的“ dlib”是否正在通过CUDA使用GPU,并且其他所有依赖dlib的库(例如@adma ageitgey的“ face_recognition”)也将使用cuda加速。

因此,我正在运行一个用于训练图像的代码,以便可以使用以下代码识别视频中的人脸:

import face_recognition
img = face_recognition.load_image_file('./training images/John_Cena/Gifts-John-Cena-Fans.jpg')
locations = face_recognition.face_loactions(img,model='cnn')

它显示如下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Tushar\Anaconda3\lib\site-packages\face_recognition\api.py", line 116, in face_locations
    return [_trim_css_to_bounds(_rect_to_css(face.rect), img.shape) for face in _raw_face_locations(img, number_of_times_to_upsample, "cnn")]
  File "C:\Users\Tushar\Anaconda3\lib\site-packages\face_recognition\api.py", line 100, in _raw_face_locations
    return cnn_face_detector(img, number_of_times_to_upsample)
RuntimeError: Error while calling cudaMalloc(&data, n) in file C:\Users\Tushar\Desktop\face_recognition\dlib\dlib\cuda\cuda_data_ptr.cpp:28. code: 2, reason: out of memory

再次尝试获取另一张图片后:

img = face_recognition.load_image_file('./training images/John_Cena/Images.jpg')
locations = face_recognition.face_loactions(img,model='cnn')

出现错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Tushar\Anaconda3\lib\site-packages\face_recognition\api.py", line 116, in face_locations
    return [_trim_css_to_bounds(_rect_to_css(face.rect), img.shape) for face in _raw_face_locations(img, number_of_times_to_upsample, "cnn")]
  File "C:\Users\Tushar\Anaconda3\lib\site-packages\face_recognition\api.py", line 100, in _raw_face_locations
    return cnn_face_detector(img, number_of_times_to_upsample)
RuntimeError: Error while calling cudnnConvolutionForward( context(), &alpha, descriptor(data), data.device(), (const cudnnFilterDescriptor_t)filter_handle, filters.device(), (const cudnnConvolutionDescriptor_t)conv_handle, (cudnnConvolutionFwdAlgo_t)forward_algo, forward_workspace, forward_workspace_size_in_bytes, &beta, descriptor(output), output.device()) in file C:\Users\Tushar\Desktop\face_recognition\dlib\dlib\cuda\cudnn_dlibapi.cpp:1007. code: 3, reason: CUDNN_STATUS_BAD_PARAM

然后我重新启动了jupyter的内核,并再次尝试使用其他图像:

face_recognition.face_locations(face_recognition.load_image_file('./training 
   images/John_Cena/images.jpg'),model='cnn')
[Out] : [(21, 136, 61, 97)]

这一次它给出了图像中人脸位置的坐标。

所以这一次又一次地发生,对于某些图像来说,它运行得很好,对于某些图像,它给出了两个错误之一(如上所述)。

使用model ='hog'时,对于在model ='cnn'中使用的所有相似图像,其运行都很好。

因此,当我尝试使用for循环在不同文件夹中的图像上训练分类器时:

from face_recognition.face_detection_cli import image_files_in_folder
import os
import os.path
import face_recognition
for class_dir in os.listdir('./training images/'):
    count = 0
    for img_path in image_files_in_folder(os.path.join('./training images/', class_dir)):  
                count += 1
                image = face_recognition.load_image_file(img_path)
                face_bounding_boxes = face_recognition.face_locations(image,model='cnn')
                print(face_bounding_boxes, count)

在处理一些显示相同的2个错误中的任何图像后,它总是停止(如上所述)。 我尝试了各种可能的方法来安装具有GPU支持,CUDA 9.0工具包和cuDNN 7.1.4的dlib。他们都工作正常!

我不知道这是什么真正的问题,是显示卡的内存(2 GB)不足还是其他。

我真的很想利用GPU的功能来更快地识别视频。

1 个答案:

答案 0 :(得分:0)

我发现如果脸部轻微旋转而不是直的,face_encodings 会快速出现“Indexerror”。尽管它找到了带有坐标的人脸位置,并且当将带有坐标的裁剪图像提供给“face_encodings”时,它仍因索引错误而失败...