欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ubuntu16.04编译caffe和测试

程序员文章站 2022-06-12 10:30:45
...
使用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就可以)
ubuntu16.04编译caffe和测试

  • 修改PYTHON_INCLUDE路径

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

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

如图所示:
ubuntu16.04编译caffe和测试

  • 添加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/

如图所示:
ubuntu16.04编译caffe和测试

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  

训练结果:

ubuntu16.04编译caffe和测试

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

参考链接:

  • 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