Yolo+Windows 配置(詳細版)


一、配置環境

  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來訓練自己的數據等內容。

  

  

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM