將darknet集成進工程時,遇到了一些問題,下面記錄一下解決方法:框架
集成步驟:函數
首先在yolo編譯的時候,須要將三個開關打開:測試
#define GPU
#define CUDNN
#define OPENCVspa
將編譯出來的libdarknet.so以及darknet.h分別放入相應的工程文件夾中;io
在CMakeLists.txt中將相應的lib路徑以及include路徑添加進去;編譯
添加相應的cpp和hpp以及main函數測試代碼,並修改相應的CMakeLists.txt;容器
編譯List
遇到的問題以及解決方法以下:file
問題: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的就是上述的這些問題;
還有另外的一些軟連接找不到的問題,後來發現是鏈接到系統路徑去了,而不是鏈接到同一個文件夾下的庫,不知道如何形成的,只能刪掉從新連接。