一、配置环境

  VS2013+显卡GtX1080ti+CUDA7.5+Opencv3.1.0+pthread

  pthread:ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

  YOLO:http://pjreddie.com/darknet/yolo

  Darknet:https://github.com/pjreddie/darknet

二、配置步骤

1、新建vs工程:删除新建后的自带的kernel.cu

2、为了方便调试,将工程设置为Release x64模式

3、在工程下添加三个文件夹,分别命名为c,h,cu。这里需要注意:需要添加的文件位置在 darknet的src以及examps中,具体添加文件根据darknet中的Makefile里面所显示的来添加文件。因为YOLO会随时更新,别人的文件可能和你不一致。

   下面是我的Makefile文件中需要添加的文件:

  添加的.c和.h文件

OBJ=gemm.o utils.o cuda.o deconvolutional_layer.o convolutional_layer.o list.o image.o activations.o im2col.o col2im.o blas.o crop_layer.o dropout_layer.o maxpool_layer.o softmax_layer.o data.o matrix.o network.o connected_layer.o cost_layer.o parser.o option_list.o detection_layer.o route_layer.o box.o normalization_layer.o avgpool_layer.o layer.o local_layer.o shortcut_layer.o activation_layer.o rnn_layer.o gru_layer.o crnn_layer.o demo.o batchnorm_layer.o region_layer.o reorg_layer.o tree.o  lstm_layer.o
EXECOBJA=captcha.o lsd.o super.o voxel.o art.o tag.o cifar.o go.o rnn.o rnn_vid.o compare.o segmenter.o regressor.o classifier.o coco.o dice.o yolo.o detector.o  writing.o nightmare.o swag.o darknet.o 

   添加的.cu文件 

OBJ+=convolutional_kernels.o deconvolutional_kernels.o activation_kernels.o im2col_kernels.o col2im_kernels.o blas_kernels.o crop_layer_kernels.o dropout_layer_kernels.o maxpool_layer_kernels.o network_kernels.o avgpool_layer_kernels.o

 

 4、接下来是添加包含目录、依赖库等:CUDA7.5,opencv3.1.0,pthread


5、上面都配置完之后进行编译,会出现很多错误,这里对遇到的错误进行总结下:

a、将出现#include<src/time.h>处都改成#include<time.h>

b、删除#include<unisd.h>,这是linux下的头文件

c、在用到inline的文件中,都在前面添加#define inline _inline

d、“error C2079: “tval_before”使用未定义的 struct“timeval””:在出现类似结构体错误的文件头添加

  “   

  #ifdef WIN32
  # include <windows.h>
  #else
  # include <sys/time.h>
  #endif

  ”

e、“error C2275: “image”: 将此类型用作表达式非法”:在出现类似错误时,只需将该类型定义的变量语句放在函数头即可

  如下:

对于定义指针时,类型用作表达式非法,只需要在函数头初始化指针为NULL即可,例如:image *p=NULL

d、在utils.c文件中,出现错误:“error C2036: “void *”: 未知的大小”:只需要在void*类型的变量前,添加相应的类型即可

e、会出现snprintf,popen,pclose,sleep无法解析的问题,这里只要将snprintf改成_snprintf或者在预编译处加入

  #if _MSC_VER

  #define snprintf _snprintf 

  #endif

  即可,然后把popen,pclose,sleep改成_popen,_pclose,_sleep。问题就可以解决

f、出现“error LNK2001: 无法解析的外部符号"gettimeofday"&"timersub"”:解决方法是在文件头部添加gettimeofdaytimersub函数的声明。具体声明如下:

 1 #ifdef WIN32
 2 int gettimeofday(struct timeval *tp, void *tzp)
 3 {
 4     time_t clock;
 5     struct tm tm;
 6     SYSTEMTIME wtm;
 7     GetLocalTime(&wtm);
 8     tm.tm_year = wtm.wYear - 1900;
 9     tm.tm_mon = wtm.wMonth - 1;
10     tm.tm_mday = wtm.wDay;
11     tm.tm_hour = wtm.wHour;
12     tm.tm_min = wtm.wMinute;
13     tm.tm_sec = wtm.wSecond;
14     tm.tm_isdst = -1;
15     clock = mktime(&tm);
16     tp->tv_sec = clock;
17     tp->tv_usec = wtm.wMilliseconds * 1000;
18     return (0);
19 }
20 
21 void timersub(struct timeval *a, struct timeval *b, struct timeval *res)
22 {
23     res = a - b;
24 }
25 #endif

g、出现“错误 1095 error LNK2019: 无法解析的外部符号 curandSetPseudoRandomGeneratorSeed”:解决方法是在包含的头文件中添加: 

  #pragma comment(lib, "cudart.lib")
   #pragma comment(lib, "curand.lib")

  即可。

h、出现“error C2065: “CLOCK_REALTIME”: 未声明的标识符”:直接将那句话注释掉即可

 

i、注意前面添加文件时,一定要按照Makefile里面显示的添加,否则会出错!

 

6、编译成功后,就可以进行测试了,添加命令路径:

detect D:/gaokun/YOLO/darknet/cfg/yolo.cfg D:/gaokun/YOLO/darknet/yolo.weights

  此时,还需要对darknet.c文件中的部分内容进行修改:

  

  还需要对detector.c中的路径进行修改:

  

  对image.c的内容进行修改:

  

  注意:修改完上述文件后,需重新编译yolo-windows-master。然后再加入命令行调试参数,进行调试。

     调试时,取消对包含“CLOCK_REALTIME”的语句的注释(错误h)。

7、以下是部分测试结果:

 

参考博客:http://blog.csdn.net/xiaoye5606/article/details/62439298

后续会更新用YOLO来训练自己的数据等内容。

  

  

  

 

 

 

posted on 2017-10-09 16:13  2师兄不会胖  阅读(6920)  评论(0编辑  收藏  举报