前期准备:
Darknet下载:https://github.com/pjreddie/darknet
保留文件夹cfg、文件夹src、include、data、examples,删掉其它
将include中的文件移到src中,将examples中的yolo.c移到src中,在src中新建CMakeLists:
CMAKE_MINIMUM_REQUIRED( VERSION 3.0 )
PROJECT( Darknet )
AUX_SOURCE_DIRECTORY( . DIR_MAIN )
SET( OpenCV_DIR D:/OpenCV/opencv2.4.13/build )
FIND_PACKAGE( OpenCV REQUIRED )
INCLUDE_DIRECTORIES( . )
FILE(GLOB_RECURSE HEADERS *.h *.hpp)
SOURCE_GROUP("Include" FILES ${HEADERS} )
ADD_EXECUTABLE( Darknet ${DIR_MAIN} ${HEADERS})
TARGET_LINK_LIBRARIES( Darknet ${OpenCV_LIBS} )
由于本工程中只用了CPU,所以也删掉了src中的*.cu文件
下载好pthreads库文件
CMake 编译生成工程文件,打开.sln
添加包含目录:
添加链接库:
注:此时可以先编译项目修改其它错误,所有错误改了之后将pthreadVC2.dll复制到工程的.exe文件夹中
先纠错:
参考:
https://blog.csdn.net/xiaoye5606/article/details/62439298
https://blog.csdn.net/luojun2007/article/details/52370140
https://blog.csdn.net/m_buddy/article/details/82634136
在darknet.h中添加:#define inline _inline
#if _MSC_VER
#define snprintf _snprintf
#endif
重新编译
compare.c
network net需要改为指针,下面的一些结构体的.改为->
将
typedef struct {
network net;
char *filename;
int class;
int classes;
float elo;
float *elos;
} sortable_bbox;
剪切到darknet.h中
#include
删掉#include
utils.c中的计时函数需要修改
double what_time_is_it_now()
{
struct timeval time;
if (gettimeofday(&time,NULL)){
return 0;
}
return (double)time.tv_sec + (double)time.tv_usec * .000001;
}
改为
double what_time_is_it_now()
{
clock_t start;
start = clock();
return (double)(start);
}
之前为何要将结构体sortable_bbox剪切到compare.c中是因为下面的两个函数中返回的指针类型问题
Image.h中添加#define OPENCV
Main.c中函数名改为main
将image_opencv.cpp中的#ifdef OPENCV 往下挪几行。
将变量名class改一改,我改为了classi。
Yolov1模型下载:
https://pjreddie.com/darknet/yolov1/
Yolov2模型下载:
https://pjreddie.com/darknet/yolov2/
输入参数进行调试时,需要将image.c文件中load标签的函数load_alphabet()中的路径改掉,第一个参数没明白是啥意思,第二个参数选择模式,第三个参数cfg即网络文件,第四个参数是weights即权重文件,第五个是测试文件,如我的输入是:
ss test E:/Code/DeepLearning/darknet-master/darknet/cfg/yolov1-tiny.cfg E:/Code/DeepLearning/darknet-master/darknet/tiny-yolov1.weights E:/Code/DeepLearning/darknet-master/darknet/data/dog.jpg