python-3.x - Dlib(支持GPU)无法正常工作,不确定吗?

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

我的系统配置:

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)]
    

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

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

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

    最佳答案

    我发现,如果面部稍微旋转而不是笔直,则会给face_encodings快速显示“Indexerror”。尽管它找到了带有坐标的脸部位置,并且在向裁剪图像提供坐标为“face_encodings”时失败,但出现索引错误...

    关于python-3.x - Dlib(支持GPU)无法正常工作,不确定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51713466/

    相关文章:

    python3 : how to use for loop and if statements over class attributes?

    python - 如何获取要打印的 CSV 列列表的总和

    python - ValueError : Graph disconnected: cannot obtain value for tensor Tensor. ..可以毫无问题地访问以下前几层:[]

    opencv - 在 Linux(Ubuntu)中编译时无法解析打开 cv 3.0.0 FaceRecognizer 类

    python-3.x - Pandas 添加唯一计数列

    python-3.x - 如何以优雅的方式导入我自己的模块?

    python - TensorFlow:TypeError:不允许将 `tf.Tensor` 用作 Python `bool`

    machine-learning - 如何使用python生成连接层prototxt

    ios - iPhone5C 中未安装 Luxand SDK

    java - 如何判断检测到的人脸是真人还是假人