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?
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 .
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.