• 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来训练自己的数据等内容。

      

      

      

     

     

     

  • 相关阅读:
    构建自己的C/C++插件开发框架(四)——核心层设计和实现
    构建自己的C/C++插件开发框架(二)——总体功能
    对企业来说,要放在第一位的是什么
    深入理解C++的动态绑定和静态绑定
    构建自己的C/C++插件开发框架(三)——总体结构
    管道和过滤器
    层模式——面向模式的体系结构学习笔记
    使用信元流(TLVStream)规范、简化模块(C/C++)间交互
    推荐博客
    Android 操作系统的内存回收机制
  • 原文地址:https://www.cnblogs.com/yyxf1413/p/7641537.html
Copyright © 2020-2023  润新知