首先,我们可以参照官方文档,官方文档是最直接最权威的:
接下来我们介绍具体步骤:
前置条件
- Nvidia显卡驱动安装。
- Cuda和CuDnn设置。
一些依赖项
这些依赖项安装可以直接从软件源获取,当然也可以自己源码安装。
下面是相应的命令行代码:
# protobuf,snappy,leveldb,opencv,hdf5,boost ,python-opencv,glog ,gflag,lmdb
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install python-dev python-opencv
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
关于blas可以选择atlas,openblas和MKL。
sudo apt-get install libatlas-base-dev
# openblas也很方便
sudo apt-get install libopenblas-dev
安装Caffe
下载BVLC的Caffe:
git clone --recursive https://github.com/BVLC/caffe
编译Caffe
1.Make方式
Make方式为官方的编译方式,但是在后续caffe的使用时会稍显麻烦,这里要注意根据安装的库以及自己是否使用gpu、cudnn以及bals的选择等作出修改。
cp Makefile.config.example Makefile.config
# For CPU & GPU accelerated Caffe, no changes are needed.
#For cuDNN acceleration using NVIDIA’s proprietary cuDNN software, uncomment the USE_CUDNN := 1 switch in #Makefile.config. cuDNN is sometimes but not always faster than Caffe’s GPU acceleration.
#For CPU-only Caffe, uncomment CPU_ONLY := 1 in Makefile.config.
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
make all -j8
make test
make runtest
2.Cmake方式
Cmake方式针对自己使用Caffe以及从软件源安装Caffe的用户来说比较方便快捷。
mkdir build
cd build
cmake ..
make all
make install
make runtest
注意:是在Caffe目录下进行build的创建。
完成最后的make runtest 之后,显示如下:
在用Caffe进行编译工程项目时可能会遇到下面的bug:
fatal error: caffe/proto/caffe.pb.h
解决办法如下:
protoc src/caffe/proto/caffe.proto --cpp_out=.
sudo mkdir include/caffe/proto
sudo mv src/caffe/proto/caffe.pb.h include/caffe/proto
由于使用Caffe不仅仅是停留在训练,可能很多都要具体的测试实际的项目,因此相比于Make方式,Cmake的优势就大大体现出来了。
编译自己的项目,仅仅需要写一个简单的CmakeLists.txt文件,并且文件内的内容可以保证百分之九十的不变,这使得验证算法和项目变得相当方便。
代码如下:
cmake_minimum_required(VERSION 2.9)
project(big_model) // 根据自己工程名字修改
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV)
find_package(Caffe REQUIRED)
#message(FATAL_ERROR ${Caffe_INCLUDE_DIRS})
include_directories(${Caffe_INCLUDE_DIRS})
set(SOURCE_FILES main.cpp model.cpp model.h) // 根据自己实际源码修改
add_executable(big_model ${SOURCE_FILES})
target_link_libraries(big_model ${OpenCV_LIBS} )
target_link_libraries(big_model ${Caffe_LIBRARIES})