**************************************************************************************************************************
文件说明:
windows下SSD网络在caffe中的配置
开发环境:
win10+cuda7.5+cuDNNv5.0+opencv2.4+vs2013
时间地点:
陕西师范大学*问津楼 2017年8月3日
作 者:
九 月
**************************************************************************************************************************
【1】安装VS2013,下载一个VS2013的镜像,直接下一步下一步就可以了
**************************************************************************************************************************
【2】安装CUDA7.5,去NVIDIA官网下载:
[1]官网地址1:http://www.geforce.cn/drivers
[2]百度云盘:链接: https://pan.baidu.com/s/1gfaNlEb 密码: 7ew9
[3]安装:直接下一步下一步,就可以。
**************************************************************************************************************************
【3】下载cuDNN7.5_v5,可以在我的百度云盘下载,我已经做了分享:
链接如下所示:链接: https://pan.baidu.com/s/1gfIgBab 密码: yqxf
**************************************************************************************************************************
【4】下载windows-caffe-SSD的源码:
[1]caffe微软的官方源代码:链接:http://pan.baidu.com/s/1c12xAgw 密码:vurt
[2]自己配置的源代码:链接:链接:http://pan.baidu.com/s/1kVaFl0z 密码:fib4 (推荐使用这个)
[3]接下来的具体配置过程,请参考我前面的博客,链接为:http://blog.csdn.net/maweifei/article/details/76559924
**************************************************************************************************************************
【5】经过上面的配置,现在就可以试着编译windows-caffe-SSD的源代码了,后面出现错误的时候,具体看错误的信息,进行错误的处理
**************************************************************************************************************************
【6】编译项目:
【报错】“未能生成object文件(警告被视为错误)”
【7】复制.\ssd_new下所有文件(除build,data,example以及models之外)至.\windows-caffe,替换原来文件夹中对应的文件,ssd_new
文件的链接如下所示:链接:http://pan.baidu.com/s/1jH9CTiI 密码:ll58
**************************************************************************************************************************
【8】编译文件:
【报错】error C3861: “mkdir”: 找不到标识符。解决办法:在db_lmdb.cpp文件的
【解决方法】将文件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
**************************************************************************************************************************
【9】编译文件:
【报错】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;
}
【10】编译文件:
【报错】报错error C2065: “SIGHUP”: 未声明的标识符
【解决方法】在common.cpp文件最上边一行添加语句#include "process.h"
**************************************************************************************************************************
【11】编译文件:
【报错】报错GLOG_NO_ABBREVIATED_SEVERITIES
【12】选择解决方案下的libcaffe项目,进入include/layers文件夹中,删除路径.\caffe-master\include\caffe\layers下的
roi_pooling_layer.hpp文件。进入src/layers文件夹中,删除路径.\caffe-master\src\caffe\layers下的roi_pooling_layers.cpp
**************************************************************************************************************************
【13】编译文件:
【报错】报了都是关于signal_handler.cpp文件相关的错误
【解决方法】在下面的链接中下载此文件,将此文件替换掉即可,具体的链接如下所示:
链接:http://pan.baidu.com/s/1bpu8wkn 密码:khbp
**************************************************************************************************************************
【13】编译文件:
【报错】找不到标识符"snprintf"
【解决方法】在bbox_util文件中,在标识符snprintf前面加上下划线_,修改为_snprintf。
**************************************************************************************************************************
【14】编译文件:
【报错】error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::InstallFailureSignalHandler(void)"
【解决方法】在common.cpp文件中,将出错的函数::google::InstallFailureSignalHandler()注释掉。
**************************************************************************************************************************
【15】编译工程:
【报错】无法打开cudnn.h文件
【解决方法】配置cuDNN的【包含目录】【库目录】【链接器】【DLL路径】,配置方法类似OpenCv库的配置
**************************************************************************************************************************
【16】编译工程:
【报错】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)
**************************************************************************************************************************
【17】编译工程:
【报错】"::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)));
**************************************************************************************************************************
【18】编译工程:
【报错】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_, fals
**************************************************************************************************************************
【19】编译工程:
编译项目,报与boost相关的regex正则表达式库出现问题,在项目中我们不需要正则表达式,所以将相关语句注释掉即可。
进入项目libcaffe中,
进入detection_output_layer.cu文件,将所有出现regex和rv的语句注释掉。
进入detection_output_layer.cpp文件,将所有出现regex和rv的语句注释掉。
进入detection_output_layer.hpp中,将语句#include <boost/regex.hpp>注释掉。
**************************************************************************************************************************
【20】编译项目,报与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>());
**************************************************************************************************************************
至此:SSD网络在windows下的配置已经完成,GPU版本的SSD网络已经可以运行
**************************************************************************************************************************
参考资料:
【1】http://www.jianshu.com/p/9a84cc434e05
【2】http://m.blog.csdn.net/gxb0505/article/details/73702451
【3】http://blog.csdn.net/buaalei/article/details/55094879
注:
如果需要编译好的SSD代码,请与作者联系。博主马上也要找工作,所以也比较忙,但是看见了会发!
**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
文件说明:
windows下SSD网络在caffe中的配置
开发环境:
win10+cuda7.5+cuDNNv5.0+opencv2.4+vs2013
时间地点:
陕西师范大学*问津楼 2017年8月3日
作 者:
九 月
**************************************************************************************************************************
【1】安装VS2013,下载一个VS2013的镜像,直接下一步下一步就可以了
**************************************************************************************************************************
【2】安装CUDA7.5,去NVIDIA官网下载:
[1]官网地址1:http://www.geforce.cn/drivers
[2]百度云盘:链接: https://pan.baidu.com/s/1gfaNlEb 密码: 7ew9
[3]安装:直接下一步下一步,就可以。
**************************************************************************************************************************
【3】下载cuDNN7.5_v5,可以在我的百度云盘下载,我已经做了分享:
链接如下所示:链接: https://pan.baidu.com/s/1gfIgBab 密码: yqxf
**************************************************************************************************************************
【4】下载windows-caffe-SSD的源码:
[1]caffe微软的官方源代码:链接:http://pan.baidu.com/s/1c12xAgw 密码:vurt
[2]自己配置的源代码:链接:链接:http://pan.baidu.com/s/1kVaFl0z 密码:fib4 (推荐使用这个)
[3]接下来的具体配置过程,请参考我前面的博客,链接为:http://blog.csdn.net/maweifei/article/details/76559924
**************************************************************************************************************************
【5】经过上面的配置,现在就可以试着编译windows-caffe-SSD的源代码了,后面出现错误的时候,具体看错误的信息,进行错误的处理
**************************************************************************************************************************
【6】编译项目:
【报错】“未能生成object文件(警告被视为错误)”
【解决方法】选择【项目】----【属性】---C/C++常规,将【警告视为错误】的选项改为【否】,具体如下图所示:
【7】复制.\ssd_new下所有文件(除build,data,example以及models之外)至.\windows-caffe,替换原来文件夹中对应的文件,ssd_new
文件的链接如下所示:链接:http://pan.baidu.com/s/1jH9CTiI 密码:ll58
**************************************************************************************************************************
【8】编译文件:
【报错】error C3861: “mkdir”: 找不到标识符。解决办法:在db_lmdb.cpp文件的
【解决方法】将文件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
**************************************************************************************************************************
【9】编译文件:
【报错】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;
}
最终修改的效果如下图所示:
【10】编译文件:
【报错】报错error C2065: “SIGHUP”: 未声明的标识符
【解决方法】在common.cpp文件最上边一行添加语句#include "process.h"
**************************************************************************************************************************
【11】编译文件:
【报错】报错GLOG_NO_ABBREVIATED_SEVERITIES
【解决方法】C/C++ --> 预处理器 --> 预处理器定义 --> 加上GLOG_NO_ABBREVIATED_SEVERITIES,具体如下图所示:
【12】选择解决方案下的libcaffe项目,进入include/layers文件夹中,删除路径.\caffe-master\include\caffe\layers下的
roi_pooling_layer.hpp文件。进入src/layers文件夹中,删除路径.\caffe-master\src\caffe\layers下的roi_pooling_layers.cpp
**************************************************************************************************************************
【13】编译文件:
【报错】报了都是关于signal_handler.cpp文件相关的错误
【解决方法】在下面的链接中下载此文件,将此文件替换掉即可,具体的链接如下所示:
链接:http://pan.baidu.com/s/1bpu8wkn 密码:khbp
**************************************************************************************************************************
【13】编译文件:
【报错】找不到标识符"snprintf"
【解决方法】在bbox_util文件中,在标识符snprintf前面加上下划线_,修改为_snprintf。
**************************************************************************************************************************
【14】编译文件:
【报错】error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::InstallFailureSignalHandler(void)"
【解决方法】在common.cpp文件中,将出错的函数::google::InstallFailureSignalHandler()注释掉。
**************************************************************************************************************************
【15】编译工程:
【报错】无法打开cudnn.h文件
【解决方法】配置cuDNN的【包含目录】【库目录】【链接器】【DLL路径】,配置方法类似OpenCv库的配置
**************************************************************************************************************************
【16】编译工程:
【报错】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)
**************************************************************************************************************************
【17】编译工程:
【报错】"::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)));
**************************************************************************************************************************
【18】编译工程:
【报错】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_, fals
**************************************************************************************************************************
【19】编译工程:
编译项目,报与boost相关的regex正则表达式库出现问题,在项目中我们不需要正则表达式,所以将相关语句注释掉即可。
进入项目libcaffe中,
进入detection_output_layer.cu文件,将所有出现regex和rv的语句注释掉。
进入detection_output_layer.cpp文件,将所有出现regex和rv的语句注释掉。
进入detection_output_layer.hpp中,将语句#include <boost/regex.hpp>注释掉。
**************************************************************************************************************************
【20】编译项目,报与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>());
**************************************************************************************************************************
至此:SSD网络在windows下的配置已经完成,GPU版本的SSD网络已经可以运行
**************************************************************************************************************************
参考资料:
【1】http://www.jianshu.com/p/9a84cc434e05
【2】http://m.blog.csdn.net/gxb0505/article/details/73702451
【3】http://blog.csdn.net/buaalei/article/details/55094879
注:
如果需要编译好的SSD代码,请与作者联系。博主马上也要找工作,所以也比较忙,但是看见了会发!
**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************