2017-08-02 1 views
1

Ich versuche, Qt mit Dlib auszuführen. Was passiert ist, dass jeder Algorithmus von Dlib, der CUDA benötigt, ohne Fehler abstürzt und wenn ich denselben Code auf Visual Studio ausführe, funktioniert es perfekt. Qt und Dlib wurden mit Visual Studio 2015 x64 und CUDA Version 8.0 erstellt.Qt mit Dlib und CUDA

Der Code ist ein Beispiel einer von DLIB die CUDA für eine bessere Leistung verwenden können:

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

stürzt das Programm auf der Leitung "auto dets = netto (img);"

meine .proDatei:

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" 

Vielen Dank für die Aufmerksamkeit.

+0

Windows-Betriebssystem? –

+0

Ja. Windows 10 x64 – GDias

+0

Dies ist das gleiche [Beispiel] (https://github.com/davisking/dlib/blob/master/examples/dnn_mmod_face_detection_ex.cpp) ?? –

Antwort

1

Ich brauche nur DLIB_USE_CUDA auf meinem Projekt zu definieren, und es funktioniert ok.

1

Versuchen Sie folgende:

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

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