【caffe配置】SSD(Single Shot MultiBox Detector)在Windows下配置步骤

前段时间和小伙伴一起在windows下配置了ssd,踩了很多雷,一直没有时间把他整理出来。小伙伴替我整理了,我就直接搬过来了。

原文链接:http://www.jianshu.com/p/9a84cc434e05


1.SSD简介

SSD全称Single Shot MultiBox Detector,是一个用于目标检测的深度学习框架。
By Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg.

SSD是一个单一的网络对象检测的统一框架。你可以使用代码来训练/评估一个用于目标检测任务的网络。(http://arxiv.org/abs/1512.02325).


作者的Github上https://github.com/weiliu89/caffe 只给出了linux下的代码,下面内容是将代码移植到windows上的实现步骤。本文参考了samylee的博文Windows-SSD配置与测试,在此表示感谢。

2. 配置环境

windows7 + vs2013 + Cuda8.0


3. 所需文件

vs2013,windows-caffe,ubuntu-ssd,libboost,cudnn,OpenCV(可选)ssd_detect.cpp,io.cpp

windows-caffe地址: 链接:http://pan.baidu.com/s/1hrGRu1A 密码:j82rhttps://github.com/conner99/caffe,推荐使用后者。
ubuntu-ssd地址: 链接:http://pan.baidu.com/s/1mhYuf7y 密码:3jp2
libboost地址:链接:http://pan.baidu.com/s/1pLbBMpP 密码:41tq
cudnn地址:链接:http://pan.baidu.com/s/1o8vWBhw 密码:kdj4
opencv地址:链接:http://pan.baidu.com/s/1eSkHBj0 密码:nhch
ssd_detect.cpp地址:链接:http://pan.baidu.com/s/1nvwECNv 密码:e3yn
io.cpp地址:链接:http://pan.baidu.com/s/1i4CL7QP 密码:g623


4. 配置步骤和出现的问题

本人配置的是使用GPU的版本,以下为配置步骤和出现的问题:

  1. 从上述网址下载的windows-caffe使用的Cuda版本为7.5,我使用的Cuda版本为8.0,所以将其版本改为8.0,重命名.\caffe-master\windows\路径下的CommonSettings.props.exampleCommonSettings.props,修改Cuda配置为<CudaVersion>8.0</CudaVersion>,此外设置<CpuOnlyBuild>true</CpuOnlyBuild><UseCuDNN>false</UseCuDNN>

  2. 编译项目,报错“未能生成object文件(视警告为错误)”,解决方法:右击选择属性->配置属性->c/c++->常规,将“警告视为错误”的选项改为“否”,若还报错,将math_functions.obj文件放到路径caffe-master\Build\Int\libcaffe\x64\[Release|Debug]下。

  3. 复制.\ssd_new下所有文件(除builddataexample以及models之外)至.\windows-caffe,替换原来文件夹中对应的文件。

  4. 编译文件,报错error C3861: “mkdir”: 找不到标识符。解决办法:在db_lmdb.cpp文件的

    CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << " failed";

    语句上下添加语句,使得:

    #ifdef MSC_VER
         CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << " failed";
    #endif
  5. 编译文件,报错error C2360: “occurrences_32”的初始化操作由“case”标签跳过。解决办法:在hdf5.cpp文件中将所有出错的case语句下的内容都括上大括号{ },比如,将语句
    case H5T_FLOAT:
       LOG_FIRST_N(INFO, 1) << "Datatype class: H5T_FLOAT";
       break;
    改为:
    case H5T_FLOAT:
    {
       LOG_FIRST_N(INFO, 1) << "Datatype class: H5T_FLOAT";
       break;
    }
  6. 选择解决方案下的libcaffe项目,进入include/layers文件夹中,将路径.\caffe-master\include\caffe\layers下除了roi_pooling_layer.hpp的所有hpp文件添加到include/layers中。进入src/layers文件夹中,将路径.\caffe-master\src\caffe\layers下除了roi_pooling_layers.cpp的所有cpp文件添加到src/layers中。

  7. 编译项目,报错error C2065: “SIGHUP”: 未声明的标识符。解决办法:在common.cpp文件最上边一行添加语句

    #include "process.h"
  8. 编译项目,报了都是关于signal_handler.cpp文件相关的错误,在https://github.com/conner99/caffe下载工程,找到signal_handler.cpp文件替换即可。

  9. 编译项目,报错找不到boost库,在解决方案的caffeclassification项目下的VC++选项下,在包含目录中添加 ~/boost_1_59_0/,在库目录中添加~\boost_1_59_0\stage\lib

  10. 选择解决方案下的libcaffe项目,进入libcaffe/src/util文件夹中,将路径\ssd_new\src\caffe\util下的bbox_util.cpp文件添加到libcaffe/src/util中。

  11. 编译项目,报错找不到标识符"snprintf",解决办法:在bbox_util文件中,在标识符snprintf前面加上下划线_,修改为_snprintf

  12. 编译项目,报错:

    error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::InstallFailureSignalHandler(void)"

    采用了粗暴的解决方式,在common.cpp文件中,将出错的函数::google::InstallFailureSignalHandler()注释掉。

  13. 选择解决方案下的classification项目,将ssd_detect.cpp文件添加到项目中,去除注释,修改相应的模型文件和网络结构定义文件的路径。


至此,SSD目标检测的CPU版本,已经可以在windows下运行,接下来配置 SSD的GPU加速版本


  1. 在路径.\caffe-master\windows\下进入CommonSettings.props配置文件中,设置<CpuOnlyBuild>false</CpuOnlyBuild><UseCuDNN>true</UseCuDNN>

  2. 进入.\caffe-master\windows\路径下,启动Caffe工程,编译工程,报错:

    error MSB3721: 命令“……”已退出,返回代码为1

    修改.\caffe-master\windows\路径下的CommonSettings.props文件,修改对应内容为:

    <CudaArchitecture>compute_30,sm_30;compute_50,sm_50</CudaArchitecture>
  3. 之后编译工程,报错:无法打开cudnn.h文件,从本博客第二部分下载cudnn,之后在项目工程的属性中的vc++包含目录中添加~/cuda/include路径。在库目录中添加~/cuda/lib/x64路径。
  4. 编译工程,报错:error : declaration is incompatible with "const char *cudnnGetErrorString(cudnnStatus_t)",解决方法:修改cudnn.hpp文件中
    inline const char* cudnnGetErrorString(cudnnStatus_t status)
    inline const char* CUDNNWINAPI cudnnGetErrorString(cudnnStatus_t status)
  5. 编译工程,报错:"::caffe::kBNLL_THRESHOLD" is undefined in device code",解决方法:修改bnll_layer.cu
    Dtype expval = exp(min(in_data[index], Dtype(kBNLL_THRESHOLD)));
    Dtype expval = exp(min(in_data[index], Dtype(50)));
  6. 编译工程,报错:error : too few arguments in function call. conv_layer.cu。修改conv_layer.cu文件中
    this->forward_gpu_gemm(bottom_data + n * this->bottom_dim_, weight, top_data + n * this->top_dim_);
    this->forward_gpu_gemm(bottom_data + n * this->bottom_dim_, weight, top_data + n * this->top_dim_, false);
  7. 编译项目,报错error MSB3073,解决办法:进入项目libcaffe的属性设置,设置生成事件 -> 预先生成事件 -> 在生成中使用 -> 否,设置生成事件 -> 后期生成事件 -> 在生成中使用 -> 否

  8. 编译项目,报与boost相关的regex正则表达式库出现问题,在项目中我们不需要正则表达式,所以将相关语句注释掉即可。进入项目libcaffe中,进入detection_output_layer.cu文件,将所有出现regexrv的语句注释掉。进入detection_output_layer.cpp文件,将所有出现regexrv的语句注释掉。进入detection_output_layer.hpp中,将语句#include <boost/regex.hpp>注释掉。

  9. 编译项目,报错:找不到".\caffe\3rdparty\hungarian.h"文件,在路径.\caffe-master\include\caffe\3rdparty\下添加hungarian.h文件。编译项目,报错:找不到".\src\caffe\3rdparty\hungarian.cpp"文件,在路径.\caffe-master\src\caffe\3rdparty\下添加hungarian.cpp文件。

  10. 编译项目,报与thrust相关的错误,进入项目libcaffe中,注释掉

    #include "thrust/functional.h"
    #include "thrust/sort.h"
    ……
    thrust::sort_by_key(&confidences[0], &confidences[0] + num_remain, &idx[0],
    thrust::greater<Dtype>());

    这些语句。

  11. 进入解决方案下的classification项目的ssd_detect.cpp文件中,去除注释,修改相应的模型文件和网络结构定义文件的路径。


至此,SSD目标检测的GPU版本,已经可以在windows下运行。



文/qgpmztmf(简书作者)
原文链接:http://www.jianshu.com/p/9a84cc434e05
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
您可以按照以下步骤配置 PyTorch 环境以使用 SSDSingle Shot MultiBox Detector): 1. 首先,确保您已经安装了 Python 和 pip。您可以在命令行中输入以下命令检查是否已正确安装: ``` python --version pip --version ``` 2. 创建一个新的虚拟环境(可选但推荐),这样可以隔离您的项目。在命令行中输入以下命令创建和激活虚拟环境: ``` python -m venv ssd_env source ssd_env/bin/activate # Linux / macOS ssd_env\Scripts\activate # Windows ``` 3. 安装 PyTorch。根据您的操作系统、CUDA 版本和 Python 版本,选择相应的安装命令。您可以在 https://pytorch.org/get-started/locally/ 页面上找到适合您的命令。 例如,如果您使用的是 Linux、CUDA 10.2 和 Python 3.7,请输入以下命令: ``` pip install torch==1.7.1+cu102 torchvision==0.8.2+cu102 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html ``` 请根据您的配置进行相应的调整。 4. 安装其他依赖项。SSD 还依赖于其他一些库,如 NumPy、OpenCV 和 matplotlib。您可以使用以下命令安装这些库: ``` pip install numpy opencv-python matplotlib ``` 5. 下载 SSD 的源代码。您可以从 GitHub 上的相关存储库中获取 SSD 的源代码。请确保您已经安装了 Git,并在命令行中输入以下命令: ``` git clone https://github.com/weiliu89/caffe.git ``` 这将克隆 SSD 源代码到当前目录。 6. 配置 SSD。进入 SSD 源代码的根目录,并根据 README 中的说明进行配置和设置。 这样,您就可以在 PyTorch 中配置 SSD 环境了。请注意,SSD 是一个复杂的模型,需要较高的计算资源和训练数据。在运行 SSD 之前,您可能需要进一步了解 SSD 的使用方法和训练流程。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值