caffe SSD 代码编译运行流程及问题解决
caffe SSD 代码编译运行流程及问题解决
该文基于以下代码:
https://github.com/weiliu89/caffe/tree/ssd
down下来后,进入目录
-rw-rw-r-- 1 ~ ~ 23986 8月 13 15:29 Makefile
-rw-rw-r-- 1 ~ ~ 4402 8月 10 17:05 Makefile.config.example
按照机器配置和环境的情况修改这两个文件,首先复制Makefile.config.example到Makefile.config
cp Makefile.config.example Makefile.config
在config文件里进行修改,如uncomment以下几项:
USE_CUDNN :=1,因为我们需要调用CUDNN运行caffe代码
OPENCV_VERSION :=3,因为机器上的opencv版本号是3.X
CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_61,code=sm_61
CUDA_ARCH只保留这几项就行,这是和gpu的算力性能有关的项目,本机器用的是TITAN Xp,因此如果不把较小的注释掉就会报warning。
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
加上hdf5的路径到include中。
这样Makefile的配置文件基本完成。下面对Makefile修改。
常见问题一般都是库找不到,因此主要关注这一段代码:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem boost_regex m hdf5_serial_hl hdf5_serial # handle IO dependencies
USE_LEVELDB ?= 1
USE_LMDB ?= 1
USE_OPENCV ?= 1ifeq ($(USE_LEVELDB), 1)LIBRARIES += leveldb snappy
endif
ifeq ($(USE_LMDB), 1)LIBRARIES += lmdb
endif
ifeq ($(USE_OPENCV), 1)LIBRARIES += opencv_core opencv_highgui opencv_imgprocifeq ($(OPENCV_VERSION), 3)LIBRARIES += opencv_imgcodecs opencv_videoioendifendif
PYTHON_LIBRARIES ?= boost_python27 python2.7
WARNINGS := -Wall -Wno-sign-compare
第一行中的LIBRARIES += 。。。,如果报错某个库没有找到,可以加入到这一行,如boost_regex m hdf5_serial_hl hdf5_serial 都是添加上的。因为曾经报错boost_regex::XXX没有找到。
报错与解决
~/about-caffe/caffe-ssd$ make all
LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
CXX/LD -o .build_release/tools/finetune_net.bin
CXX/LD -o .build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::raise_runtime_error(std::runtime_error const&)'
.build_release/lib/libcaffe.so: undefined reference to `boost::cpp_regex_traits<char>::toi(char const*&, char const*, int) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::put_mem_block(void*)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::get_mem_block()'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
.build_release/lib/libcaffe.so: undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
collect2: error: ld returned 1 exit status
Makefile:619: recipe for target '.build_release/tools/convert_imageset.bin' failed
make: *** [.build_release/tools/convert_imageset.bin] Error 1
问题类型:【undefined reference to `boost::re_detail::】
解决方案:看到一个说法是由于boost的版本过低,应该大于1.60,而本机的boost为1.58,所以手动下载一个boost进行安装,这里用的是1.68版本号的boost库,安装好之后问题解决。(安装boost参考本文:https://blog.csdn.net/this_capslock/article/details/47170313)
另一个问题是在make pycaffe时候,出现:
~/about-caffe/caffe-ssd$ make py
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
/usr/bin/ld: cannot find -lboost_python
collect2: error: ld returned 1 exit status
Makefile:501: recipe for target 'python/caffe/_caffe.so' failed
make: *** [python/caffe/_caffe.so] Error 1
问题类型:【cannot find -lboost_python】,但是实际上在makefile中已经把boost_python 添加上了:
PYTHON_LIBRARIES ?= boost_python python2.7
这里的解决方案是吧上面一句改为:
PYTHON_LIBRARIES ?= boost_python27 python2.7
即将boost_python改为boost_python。
最后caffe和pycaffe都编译成功,运行ssd的python脚步,报错:
~/about-caffe/caffe-ssd$ python examples/ssd/ssd_pascal.py
Traceback (most recent call last):File "examples/ssd/ssd_pascal.py", line 2, in <module>import caffe
ImportError: No module named caffe
错误类型:【No module named XXX】,这种情况有两种可能的原因,一是没有make pycaffe;另一种是没有把pycaffe的路径加入环境变量。这里我们make过了pycaffe,因此需要手动用加入pycaffe到环境变量。
caffe_root = '~/about-caffe/caffe-ssd/'
if caffe_root + 'python' not in sys.path:sys.path.append(caffe_root + 'python')
# sys.path.insert(0, caffe_root + 'python')import caffe
这样就可以运行了。
接下来就是讲lmdb数据换成需要训练的自己的数据集,对ssd的caffe模型进行训练了~
2018年8月13日16:14:04
你以为钟情于天使,其实是中了邪魔。 —— 剧作家,塞万提斯 【堂吉诃德】
caffe SSD 代码编译运行流程及问题解决相关推荐
- 该段代码编译运行后显示的是蓝色背景,白色闪烁字的效果
int main(int argc,char **argv) { printf("\033[44;37;5m hello world\033[0m\n"); ...
- 在线代码编译运行工具
在线代码编译运行工具 如果需要学习语言,比如练习一些算法,或者跑一些别人写的代码,有一些语言特性不太了解需要写一些简单的 demo 做一些验证,那么先搭建一个环境去跑就有一点麻烦了,无需搭建本地环境的 ...
- java花开程序_java代码的运行流程
1. 运行流程的概览图 2. 具体流程 2.1 java源文件编译为class字节码 java代码是运行在Java虚拟机上的.但是java是一门面向对象的高级语言,它不仅语法非常复杂,抽象程度也非常 ...
- 代码编译突然变缓慢问题解决办法(codeblock)
问题描述: 之前用codeblock写的代码编译一般十分快,只需零点几秒,不知道什么时候开始(可能是把360全家桶卸干净开始的吧~~)编译一份十分短的代码都有好久,等的十分不耐烦.编译好,运行输入数据 ...
- cmd命令行进行C++代码编译运行;实现进程调度和存储管理
最近刚考完一门,也算是有点闲暇时间,写个博客,就当做操作系统实验的笔记吧. 客官先别急着白嫖点个赞再看吧求求了 文章目录 一.在cmd命令行下编译运行C++源代码 1.进入目标目录 2. ...
- VTK Example代码编译运行
在VTK源码包的Example中,每个模块的例子都有一个CMakeList文件,可之间编译运行. 但VTK版本更新快,模块经常小改,而对于VTK6.x的Example的CMakeLists却没有改动 ...
- OpenCV神经网络ANN代码编译运行与解读(一)
运行环境搭建:参考<VS2013安装OpenCV4.1版本并搭建一个小程序> 基于OpenCV4.1.0中neural_network.cpp的例子代码. 参考了<OpenCV3[神 ...
- OpenCV神经网络ANN代码编译运行与解读(二)
[转载自]<OpenCV笔记(4)实现神经网络(ANN)> 作者的原文参考了:<OpenCV中使用神经网络 CvANN_MLP> 实际上的预测结果是并非一个确定值,所以即使用训 ...
- caffe 源码阅读与运行流程
bvlc:Berkeley Vision and Learning Center. pb:protobuf 的简写: 0. 运行流程 .prototxt ⇒ ImageDataParameter ⇒ ...
最新文章
- 入门架构——单机高性能
- Cookie对象的应用
- 提高代码质量 CheckStyle FindBugs PMD
- 感谢您的提问_感谢您的反馈,我们正在改进的5种方法
- ARM处理器工作模式
- tomcat是否有必要配置环境变量(摘)
- emacs java自动import,在Java模式如何我配置Emacs,这样就不会自动对齐方法参数
- vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法
- 思科模拟器叫什么_扫盲!通过型号快速识别思科路由器,交换机,服务器等设备...
- CentOS网络配置解决方案
- python函数超时,用装饰器解决 func_timeout
- 深入Atlas系列:客户端网络访问基础结构(上) - WebRequest的工作流程与生命周期...
- 虎虎生威 | 年终盘点,好文合辑!
- 计算机初中信息技术教学软件,初中信息技术教学工作计划精选
- linux未找到命令rpm,RPM命令执行失败:bash: rpm: 未找到命令...
- mysql中update语句怎么设置变量_MySQL数据库update语句使用详解
- 任务一:统计基础知识-样本与总体、均值与方差、二项分布、泊松分布
- 舞蹈链算法与数独求解
- 小程序中实现搜索功能
- 斐尔可圣手二代蓝牙设置问题