2017-08-02 5 views
1

DlibでQtを実行しようとしています。何が起こるのは、CUDAがエラーなくクラッシュすることを必要とするDlibのすべてのアルゴリズムが、私がVisual Studio上で同じコードを実行すると完全に動作するということです。 QtとDlibはVisual Studio 2015 x64でビルドされ、CUDAバージョンは8.0です。 "自動DETS =ネット(IMG);"Qtと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; 
} 

ライン上のプログラムがクラッシュ:

コードは、パフォーマンスを向上させるためにCUDAを使用することができDLIBからいくつかの例であります

私.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" 

感謝。私はちょうど私のプロジェクトにDLIB_USE_CUDAを定義するために必要な、それがうまく動作

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

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

Windowsオペレーティングシステム?? –

+0

はい。 Windows 10 x64 – GDias

+0

これは同じです[例](https://github.com/davisking/dlib/blob/master/examples/dnn_mmod_face_detection_ex.cpp)?? –

答えて

1

はこれを試してみてください。