ubuntu16.04编译caffe和测试

使用ubuntu16.04安装编译caffe框架踩了很多坑,装了很久,编译成功的是CPU版本,先将就用。

一、环境

  • Linux: ubuntu-16.04-desktop-amd64
  • OpenCV3.4.8,安装教程:OpenCV3.4.8安装(自己随便安装一个版本即可)
  • cuda9.0(网上的安装教程很多,这个不难)
  • cudnn(同上)

注:这些环境已经提前安装好

二、安装

1、必要的环境
sudo apt-get update #更新软件列表   
sudo apt-get upgrade #更新软件   
sudo apt-get install build-essential #安装build essentials  
2、安装必要的库
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev protobuf-compiler gfortran libjpeg62 libfreeimage-dev libatlas-base-dev git python-dev python-pip libgoogle-glog-dev libbz2-dev libxml2-dev libxslt-dev libffi-dev libssl-dev libgflags-dev liblmdb-dev python-yaml  
sudo easy_install pillow
3、下载caffe
cd ~  
git clone https://github.com/BVLC/caffe.git
4、安装python相关的依赖库
cd caffe  
cat python/requirements.txt | xargs -L 1 sudo pip install
5、增加符号链接
sudo ln -s /usr/include/python2.7/ /usr/local/include/python2.7  
sudo ln -s /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ /usr/local/include/python2.7/numpy  
6、修改Makefile.config配置文件
  • 在~/caffe目录下,先将Makefile.config.example复制为Makefile.config
cp Makefile.config.example Makefile.config
  • 去掉 # CPU_ONLY: = 1 的注释

用gedit打开Makefile.config(或者直接用vim在终端中打开修改也可以)

gedit Makefile.config

结果如图:(ctrl + F 直接搜索CPU_ONLY就可以)
在这里插入图片描述

  • 修改PYTHON_INCLUDE路径

/usr/lib/python2.7/dist-packages/numpy/core/include

改为: /usr/local/lib/python2.7/dist-packages/numpy/core/include

如图所示:
在这里插入图片描述

  • 添加hdf5库文件(如果没有 hdf5,安装一下,如果有了,就跳过安装)

安装hdf5:

sudo apt-get install libhdf5-dev

添加hdf5库文件:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

如图所示:
在这里插入图片描述

7、编译caffe

在caffe目录下面执行:

make test
make pycaffe  
make all  

理论上应该是就可以编译成功,但是到这个步骤我遇到几个问题,重新编译好几次,每次的错误都不太一样,下面的解决方法解决了所有的报错。

  • 问题
LD .build_release/src/caffe/test/test_db.o
.build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
.build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
.build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:628: recipe for target '.build_release/test/test_db.testbin' failed
make: *** [.build_release/test/test_db.testbin] Error 1

这个问题的出现应该是opencv类的问题,因为我使用的是opencv3,所以出现这种报错。
解决:

  • 在Makefile文件中将
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m

改为:

LIBRARIES += glog gflags protobuf leveldb snappy \
  lmdb boost_system boost_filesystem hdf5_hl hdf5 m \
  opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio
  • 将Makefile.config文件中的
 # OPENCV_VERSION := 3

取消注释,变为:

  OPENCV_VERSION := 3
  • 执行:
make clean #清除编译信息

再次执行:

make test
make all
make pycaffe

就可以编译成功!

8、使用mnist测试
  • 依次执行:
cd ~/caffe 

./data/mnist/get_mnist.sh  

./examples/mnist/create_mnist.sh  
  • 编辑examples/mnist文件夹下的lenet_solver.prototxt文件,将solver_mode模式从GPU改为CPU。
  • 训练模型
./examples/mnist/train_lenet.sh  

训练结果:

在这里插入图片描述

注:每个人在安装的时候都可能遇到不一样的问题,需要耐心慢慢解决

参考链接:

  • https://blog.csdn.net/weixin_37850264/article/details/79065695
  • https://blog.csdn.net/w5688414/article/details/76695413?utm_source=blogxgwz1
  • http://melonteam.com/posts/quan_juan_ji_shen_jing_wang_luo_fcn_xue_xi_bi_ji/#%E5%9B%9B%E4%BD%BF%E7%94%A8caffe%E8%BF%9B%E8%A1%8Cfcn%E7%9A%84%E8%AE%AD%E7%BB%83
  • https://www.cnblogs.com/houjun/p/9982903.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章