2017-08-02 128 views
1

我試圖用Dlib運行Qt。會發生什麼是從Dlib需要CUDA的每個算法崩潰沒有錯誤,如果我在Visual Studio上運行相同的代碼,它完美的作品。 Qt和Dlib是使用Visual Studio 2015 x64和CUDA版本8.0構建的。Qt與Dlib和CUDA

的代碼是從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; 
} 

在線路程序崩潰 「自動dets的淨=(IMG);」

我.pro文件:

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" 

感謝您的關注。

+0

windows操作系統?? –

+0

是的。 Windows 10 x64 – GDias

+0

這是相同的[示例](https://github.com/davisking/dlib/blob/master/examples/dnn_mmod_face_detection_ex.cpp)?? –

回答

1

我只是需要來定義我的項目DLIB_USE_CUDA,它工作正常。

1

試試這個:

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

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