web-dev-qa-db-fra.com

Comment gérer l'avertissement "Le module DNN n'a pas été construit avec le backend CUDA; passage au CPU" en C ++?

J'essaie d'exécuter YOLOv3 sur Visual Studio 2019 en utilisant CUDA 10.2 avec cuDNN v7.6.5 sur Windows 10 en utilisant NVidia GeForce 930M. Voici une partie du code que j'ai utilisé.

#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));
}

Bien que j'ajoute $ (CUDNN)\include; $ (cudnn)\include; à répertoires d'inclusion supplémentaires dans les deux C/C++ et - Linker, ajouté CUDNN_HALF; CUDNN; to C/C++> Preprocessor Definitions, et ajouté cudnn.lib; to - Linker> Input, je reçois toujours cet avertissement:

Le module DNN n'a pas été construit avec le backend CUDA; passage au CPU

et il fonctionne sur CPU au lieu de GPU, quelqu'un peut-il m'aider avec ce problème?

4

Je l'ai résolu en utilisant CMake , mais j'ai d'abord dû ajouter ceci opencv_contrib puis en le reconstruisant en utilisant Visual Studio . Assurez-vous que ces WITH_CUDA , WITH_CUBLAS , WITH_CUDNN , OPENCV_DNN_CUDA , BUILD_opencv_world sont archivés CMake .

3

Un problème similaire m'est arrivé il y a environ une semaine, mais j'utilisais Python et Tensorflow. Bien que les langages soient différents du C++, j'ai eu la même erreur. Pour résoudre ce problème, J'ai désinstallé CUDA 10.2 et rétrogradé à CUDA 10.1. D'après ce que j'ai trouvé, il pourrait y avoir un problème de dépendance avec CUDA, ou dans votre cas, OpenCV n'a pas encore créé de support pour la dernière version de CUDA.

[~ # ~] modifier [~ # ~]

Après quelques recherches supplémentaires, cela semble être un problème avec Opencv plutôt que CUDA. En référençant ceci thread github , si vous avez installé Opencv avec cmake, supprimez la version Arch bin inférieure à 7 sur le fichier de configuration, puis reconstruisez/réinstallez Opencv. Cependant , si cela ne fonctionne pas, une autre option serait de supprimer CUDA Arch bin version <5.3 et de reconstruire.

0
Aaron Jones