1. 程式人生 > >darknet集成遇到的問題以及解決方法

darknet集成遇到的問題以及解決方法

set_mode 時報 Go esp file {} fine red 文件

將darknet集成進工程時,遇到了一些問題,下面記錄一下解決方法:

集成步驟:

首先在yolo編譯的時候,需要將三個開關打開:

#define GPU
#define CUDNN
#define OPENCV

將編譯出來的libdarknet.so以及darknet.h分別放入相應的工程文件夾中;

在CMakeLists.txt中將相應的lib路徑以及include路徑添加進去;

添加相應的cpp和hpp以及main函數測試代碼,並修改相應的CMakeLists.txt;

編譯

遇到的問題以及解決方法如下:

問題:load_network之類的函數沒有定義,找不到

原因:yolo是純c框架,工程是C++的,因此要調用的函數需要加上extern "C" {}

解決方法:在darknet.h中用extern "C" {}包括所有的函數定義

問題:list ambigous;

原因:在C++的標準庫中有list這個容器,而在darknet.h中又定義了同名的結構體;

解決方法:將工程中全局的using namespace std;去掉,改用std::

問題:caffe::Caffe::set_mode(caffe::Caffe::GPU);在這裏報錯,具體忘記了是什麽錯誤,總之就是與darknet.h中的#define GPU有關

解決方法:

#undef GPU
caffe::Caffe::set_mode(caffe::Caffe::GPU);
#define GPU

問題:0號顯卡運行工程的時候正常,改用1號顯卡時報錯:CUDA Error: an illegal memory access was encountered ./src/cuda.c:36: check_error: Assertion `0‘ failed.

原因:在網上搜索了相關的解決方法,一般都是將計算能力那個地方更改之後重新編譯yolo,但是與我不是同樣的情況,我是在調用setdeviceid的時候弄錯了;

解決方法:應該先調用cuda_set_device(gpu_id);然後再調用load_network(_cfgfile, _weightfile, 0);

目前關於yolo的就是上述的這些問題;

還有另外的一些軟鏈接找不到的問題,後來發現是連接到系統路徑去了,而不是連接到同一個文件夾下的庫,不知道如何造成的,只能刪掉重新鏈接。

darknet集成遇到的問題以及解決方法