将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的就是上述的这些问题;
还有另外的一些软连接找不到的问题,后来发现是链接到系统路径去了,而不是链接到同一个文件夹下的库,不知道如何形成的,只能删掉从新连接。