Dlib(支持 GPU)不能正常工作,不确定?

Posted

技术标签:

【中文标题】Dlib(支持 GPU)不能正常工作,不确定?【英文标题】:Dlib (GPU supported) is not working properly, not sure? 【发布时间】:2019-01-13 18:11:24 【问题描述】:

我的系统配置:

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

已安装的软件:

    CUDA 工具包 9.0 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)]

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

所以这种情况一次又一次地发生,对于某些图像它运行良好,而对于某些图像,它给出了 2 个错误之一(如上所述)。

使用 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 的力量来更快地识别视频。

【问题讨论】:

面临与您相同的问题!这可能是由于低2GB的内存?因为我能够在 GPU 上运行 YOLO/darknet(基于 CNN) 在使用 CNN 模型之前,您是否尝试过将图像大小调整为 224x224 之类的?如果图像的输入分辨率很大,您可能会遇到内存不足的问题。 【参考方案1】:

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

【讨论】:

这个答案似乎与问题完全无关。

以上是关于Dlib(支持 GPU)不能正常工作,不确定?的主要内容,如果未能解决你的问题,请参考以下文章

安装具有GPU支持的dlib时发生错误

给定 dlib 的 68 点面部标志,确定它们有多好

如何检查 dlib 是不是正在使用 GPU?

dlib 不使用 CUDA

如何安装dlib gpu版本

win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)