Как бороться с предупреждением «DNN модуль не был создан с бэкэндом CUDA; переключение на CPU» в C ++? - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь запустить YOLOv3 в Visual Studio 2019 с использованием CUDA 10.2 с cuDNN v7.6.5 на Windows 10 с использованием NVidia GeForce 930M. Вот часть кода, который я использовал.

#include <fstream>
#include <sstream>
#include <iostream>
#include <opencv2/dnn.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;
using namespace dnn;
using namespace std;

int main()
{
    // Load names of classes
    string classesFile = "coco.names";
    ifstream ifs(classesFile.c_str());
    string line;
    while (getline(ifs, line)) classes.push_back(line);

    // Give the configuration and weight files for the model
    String modelConfiguration = "yolovs.cfg";
    String modelWeights = "yolov3.weights";

    // Load the network
    Net net = readNetFromDarknet(modelConfiguration, modelWeights);
    net.setPreferableBackend(DNN_BACKEND_CUDA);
    net.setPreferableTarget(DNN_TARGET_CUDA);

    // Open the video file
    inputFile = "vid.mp4";
    cap.open(inputFile);

    // Get frame from the video
    cap >> frame;

    // Create a 4D blob from a frame
    blobFromImage(frame, blob, 1 / 255.0, Size(inpWidth, inpHeight), Scalar(0, 0, 0), true, false);

    // Sets the input to the network
    net.setInput(blob);

    // Runs the forward pass to get output of the output layers
    vector<Mat> outs;
    net.forward(outs, getOutputsNames(net));
}

Хотя я добавляю $ (CUDNN) \ include; $ (cudnn) \ include; в Дополнительные каталоги включения в обоих C / C ++ и Linker , добавлено CUDNN_HALF; CUDNN; в C / C ++> Определения препроцессора и добавлено cudnn.lib; до Linker> Input , я все еще получаю это предупреждение:

Модуль DNN не был построен с бэкэндом CUDA; переключение на CPU

и он работает на CPU вместо GPU, кто-нибудь может мне помочь с этой проблемой?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Я решил это с помощью CMake , но сначала мне пришлось добавить это opencv_contrib , а затем пересобрать его с помощью Visual Studio . Убедитесь, что эти WITH_CUDA , WITH_CUBLAS , WITH_CUDNN , OPENCV_DNN_CUDA , BUILD_opencv_world проверены в CMake .

0 голосов
/ 08 апреля 2020

У меня была похожая проблема около недели go, но я использовал Python и Tensorflow. Хотя языки отличались от C ++, я получил ту же ошибку. Чтобы это исправить, я удалил CUDA 10.2 и опустил до CUDA 10.1. Из того, что я обнаружил, может быть проблема зависимости с CUDA, или в вашем случае OpenCV еще не создал поддержку последней версии CUDA.

EDIT

После некоторых дальнейших исследований, похоже, проблема с Opencv, а не с CUDA. Ссылка на этот поток github , если вы установили Opencv с помощью cmake, удалите версию архива bin ниже 7 в файле конфигурации, затем перестройте / переустановите Opencv. Однако , если это не сработает, другой вариант будет удалить версию CUDA arch bin <5.3 и перестроить. </p>

...