web-dev-qa-db-ja.com

C ++で「DNNモジュールはCUDAバックエンドでビルドされませんでした。CPUに切り替える」警告に対処する方法は?

NVidia GeForce 930Mを使用するWindows 10でCUDA 10.2とCUDNN v7.6.5を使用してVisual Studio 2019でYOLOv3を実行しようとしています。これは私が使用したコードの一部です。

#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;Additional Include DirectoriesC/C++と-の両方に追加しますがリンカーCUDNN_HALF; CUDNN;C/C++> Preprocessor Definitionsに追加し、cudnn.lib;を-に追加リンカー>入力、まだこの警告が表示されます:

DNNモジュールはCUDAバックエンドでビルドされていません。 CPUへの切り替え

そしてそれはGPUの代わりにCPUで実行されます、誰でもこの問題で私を助けることができますか?

CMakeを使用して解決しましたが、最初にこれを追加する必要がありました opencv_contrib 次に、Visual Studio。これらのWITH_CUDAWITH_CUBLASWITH_CUDNNOPENCV_DNN_CUDABUILD_opencv_worldCMakeでチェックインされます。

1週間ほど前に同様の問題が発生しましたが、PythonとTensorflowを使用していました。言語はC++とは異なりましたが、同じエラーが発生しました。これを修正するには、 CUDA 10.2をアンインストールしてCUDA 10.1にダウングレードしました。私が見つけた結果によると、CUDAに依存関係の問題がある可能性があります。または、あなたの場合、OpenCVはCUDAの最新バージョンのサポートをまだ作成していません。

[〜#〜]編集[〜#〜]

さらなる調査の結果、CUDAではなくOpencvに問題があるようです。これを参照 github thread 、cmakeでOpencvをインストールした場合は、構成ファイルで7以下のArch binバージョンを削除してから、Opencvを再ビルド/再インストールします。 ただし、それが機能しない場合は、CUDA Arch binバージョン5.3を削除して再ビルドすることもできます。

0
Aaron Jones