简体   繁体   English

Qt与Dlib和CUDA

[英]Qt with Dlib and CUDA

I'm trying to run Qt with Dlib. 我正在尝试使用Dlib运行Qt。 What happens is that every algorithm from Dlib that requires CUDA crashes without errors and if i run the same code on visual studio it works perfectly. 发生的事情是,Dlib中要求CUDA崩溃的每个算法都不会出错,并且如果我在Visual Studio上运行相同的代码,它会完美运行。 Qt and Dlib was built with Visual Studio 2015 x64 and CUDA version is 8.0. Qt和Dlib是使用Visual Studio 2015 x64构建的,CUDA版本是8.0。

The code is some example from Dlib that can use CUDA for better performance: 该代码是Dlib中的一些示例,可以使用CUDA以获得更好的性能:

    #include <iostream>
    #include <dlib/dnn.h>
    #include <dlib/data_io.h>
    #include <dlib/image_processing.h>
    #include <dlib/gui_widgets.h>


    using namespace std;
    using namespace dlib;

    // ----------------------------------------------------------------------------------------

    template <long num_filters, typename SUBNET> using con5d = con<num_filters,5,5,2,2,SUBNET>;
    template <long num_filters, typename SUBNET> using con5  = con<num_filters,5,5,1,1,SUBNET>;

    template <typename SUBNET> using downsampler  = relu<affine<con5d<32, relu<affine<con5d<32, relu<affine<con5d<16,SUBNET>>>>>>>>>;
    template <typename SUBNET> using rcon5  = relu<affine<con5<45,SUBNET>>>;

    using net_type = loss_mmod<con<1,9,9,1,1,rcon5<rcon5<rcon5<downsampler<input_rgb_image_pyramid<pyramid_down<6>>>>>>>>;

    // ----------------------------------------------------------------------------------------


int main(int argc, char** argv) try
{
    if (argc == 1)
    {
        cout << "Call this program like this:" << endl;
        cout << "./dnn_mmod_face_detection_ex mmod_human_face_detector.dat faces/*.jpg" << endl;
        cout << "\nYou can get the mmod_human_face_detector.dat file from:\n";
        cout << "http://dlib.net/files/mmod_human_face_detector.dat.bz2" << endl;
        return 0;
    }


    net_type net;
    deserialize(argv[1]) >> net;  

    image_window win;
    for (int i = 2; i < argc; ++i)
    {
        matrix<rgb_pixel> img;
        load_image(img, argv[i]);

        // Upsampling the image will allow us to detect smaller faces but will cause the
        // program to use more RAM and run longer.
        while(img.size() < 1800*1800)
            pyramid_up(img);

        // Note that you can process a bunch of images in a std::vector at once and it runs
        // much faster, since this will form mini-batches of images and therefore get
        // better parallelism out of your GPU hardware.  However, all the images must be
        // the same size.  To avoid this requirement on images being the same size we
        // process them individually in this example.
        auto dets = net(img);
        win.clear_overlay();
        win.set_image(img);
        for (auto&& d : dets)
            win.add_overlay(d);

        cout << "Hit enter to process the next image." << endl;
        cin.get();
    }
}
catch(std::exception& e)
{
    cout << e.what() << endl;
}

the program crashes on line "auto dets = net(img);" 该程序在“ auto dets = net(img);”行崩溃

my .pro file: 我的简历:

INCLUDEPATH += C:\dlib\dlib-19.4
LIBS += -LC:\dlib\dlib-19.4\mybuild\dlib_build\Release -ldlib

INCLUDEPATH += "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include"
LIBS +="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\curand.lib"
LIBS +="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas.lib"
LIBS +="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas_device.lib"
LIBS +="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudnn.lib"
LIBS +="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudart_static.lib"

Thanks for the attention. 感谢您的关注。

Try this: 尝试这个:

LIBS += L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64"

LIBS += -lcurand -lcublas -lcublas_device -lcudnn -lcudart_static

我只需要在我的项目上定义DLIB_USE_CUDA,它就可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM