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)不能正常工作,不确定?的主要内容,如果未能解决你的问题,请参考以下文章