Caffe安装

系统环境

CentOS release 6.4 (Final)
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
cuda-5.5

必要项安装

参考博客:
http://blog.csdn.net/xuanyuansen/article/details/46786597
参考官网:
http://caffe.berkeleyvision.org/install_yum.html
安装中卡的时间比较长的一个问题:
执行cmake .. 出现错误:
Could NOT find Atlas (missing: Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY
Atlas_LAPACK_LIBRARY)
解决方案是修改变量BLAS的值,该变量在CMakeFiles.txt中有定义。
cmake -DBLAS=open ..
安装软件包(部分)的版本为:
pythonPython 2.7.11 :: Anaconda 2.4.1 (64-bit)
安装成功的Makefile.config文件

可选项安装项

opencv

为了使用caffe中的ImageData,则必须要设置Makefile.config中的USE_OPENCV=1,此时需要安装opencv.
参考官方安装指南

其中,yum install ffmpeg ffmpeg-devel报错 package not found 解决方案为: 在 /etc/yum.repos.d 下新建源dag.repo,内容如下

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1

然后,

yum install ffmpeg ffmpeg-devel

详见这里
安装opencv
下载opencv-2.4.9.zip,解压后执行

cd opencv-2.4.9 && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D INSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -D WITH_V4L=ON ..
make -j8
sudo make install 

执行make 时报如下的错误:

../../lib/libopencv_highgui.so.2.4.9: undefined reference to `png_set_longjmp_fn'
collect2: ld 返回 1
make[2]: *** [bin/opencv_perf_imgproc] 错误 1
make[1]: *** [modules/imgproc/CMakeFiles/opencv_perf_imgproc.dir/all] 错误 2
make: *** [all] 错误 2

查到png_set_longjmp_fn 是动态链接库libpng.so中的一个函数
ldd libopencv_highgui.so.2.4.9 得到

    ...
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007f9939b64000)
libpng16.so.16 => /usr/lib64/libpng.so(0x00007f9939922000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x00007f99396bd000)
libjasper.so.1 => /usr/lib64/libjasper.so.1 (0x00007f9939464000)
    ...

找到被libopencv_highgui.so.2.4.9需要的libpng.so链接库的位置,并执行

readelf -s libpng.so #读取链接库的头文件

发现没有函数字段png_set_longjmp_fn ,所以做一个硬连接

ln ~/anaconda2/lib/libpng16.so.16 /usr/lib64/libpng.so

这样上述undefined reference to png_set_longjmp_fn 问题就不会出现。
(这里给出一个顺利安装的示例)

安装成功后,将opencv中的cv2.so拷贝到Python的安装目录下,以便可以在Python中导入,否则将出现ImportError: No module named cv2

cp /usr/local/lib/python2.7/site-packages/cv2.so ~/anaconda2/lib/python2.7/site-packages
python
>>> import cv2
>>> print cv2.__version__
>>>img=cv2.imread("0_Karen_160.png",0)
>>> print img [[0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 ..., 
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]]

如果img是none的话则说明opencv安装有问题,可能是opencv中的libpng包有问题,读取.jpg得到none可能是libjpg有问题,还有一种说法为debug和release的包混合了(详见这里),反正都需要重新安装opencv,安装RELESE版本的设置变量CMAKE_BUILD_TYPE=RELEASE .

至此,opencv 基本安装成功(如果在Python )。在caffe-master目录下的Makefile.config中设置 USE_OPENCV := 1,并不用取消注释 #OPENCV_VERSION := 3,否则重新编译caffe到make all时ld将会找opencv 3的一个库libopencv_imgcodecs.so,找不到时会报错如下

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so
/usr/bin/ld: cannot find -lopencv_imgcodecs

安装CUDA
因为实验机器上已经安装了CUDA driver 6.0,nvcc 5.5,虽然不是caffe推荐的最佳配置,但是通过注释掉出错的行(不推荐)勉强编译通过。

在Makefile.config文件中
1.注释掉CPU_ONLY := 1 
2.更改CUDA_DIR
在caffe-master下执行
make clean
mkdir build && cd build
cmake -DBLAS=open -DUSE_OPENCV=0 ..
make VERBOSE=1 all -j4
make test -j4
make runtest -j4

在执行make all时因为cuda版本低报出如下错误:

src/caffe/parallel.cpp:131: 错误:‘struct cudaDeviceProp’没有名为‘isMultiGpuBoard’的成员
src/caffe/parallel.cpp:131: 错误:‘struct cudaDeviceProp’没有名为‘isMultiGpuBoard’的成员
...

解决方法是直接将src/caffe/parallel.cpp 文件中的相关行注释掉,之后可以顺利编译通过。
注:如果在编译过程中显示检测到的设备数量为0,且出现Check failed: error == cudaSuccess (3 vs. 0) initialization error 之类的错误则很可能是cuda sdk 和cuda driver 的版本不匹配的问题。

重新编译caffe

更改Makefile.config文件之后需要重新编译caffe

cd caffe-master
rm -rf build
cd build
cmake -DBLAS=open ..
make all -j4
make test -j4
make runtest -j4

Caffe Example

仅使用CPU需要修改的地方
CMakeLists.txt
caffe_option(CPU_ONLY “Build Caffe without CUDA support” ON)
Makefile.config
CPU_ONLY := 1
lenet_solver.prototxt (运行样例)
solver_mode: CPU

源码学习

使用nsight(CUDA Toolkit的一部分)学习caffe源代码
用nsight打开源代码时出错,
java: cairo-misc.c:380:_cairo_operator_bounded_by_source: Assertion `NOT_REACHED’ failed.
原因是没有安装 Cairo Graphics,解决办法是打开时添加参数
nsight -vmargs -Dorg.eclipse.swt.internal.gtk.cairoGraphics=”false”

文档学习摘要

问题

protocol buffer是什么?为什么可以让Caffe的效率高?

你可能感兴趣的:(源码,深度学习,caffe)