声明:本文转载自summer rain的文章,出于想学习caffe的目的把全文都转载过来了。感谢summer rain的精彩教程。
首先,caffe是个啥?
一个深度学习的框架,C++编写的。用户可独立于代码自定义神经网络,按需调整。可通过CUDA和GPU运算极大提高运算速度,尤其是对图片的处理方面性能卓越。支持CPU和GPU的切换。可用C++,python,matlab等接口。
安装什么的,具体见官网和各路大神写的教程。比如我用的fast-rcnn,github有非常详细的安装。
在我折腾了小几个月来来回回几台电脑,发现有几点注意的:
1. 路径问题和软件版本。根据教程安装软件或框架失败,很大部分原因就是路径和版本了。尤其是这种依赖各种库文件和安装包的,更加需要注意。官网是推荐用Anaconda安装python各个包的。(哦,对,我主要用的是python)我在安装过程中还是出现过路径问题的,具体给忘了,orz。。。
2. make的顺序。没错,我有段时间卡在library not found的error上久久不能自拔,发现安装的版本和make所需要的版本就是不一样。后来发现原来make之后我手贱的给brew upgrade了。后来忘记make clear就直接test了。
3. 动态库的问题。mac就是这么贱,近来更新系统频繁不说,动态库更新不说,连名字也改了!于是我的air到现在都没能安装成功,macpro目前工作正常。问了msra mm的人,建议我用windows,不推荐mac。(哦,我忘记他们本来就是windows的人了,是我天真了。)不过估计最大的原因还是我手贱对air做了啥。。。
使用。
可参考example mnist的代码,看他们怎么运行的。
转换数据:
可以用convert_imageset工具将自己的数据(一般是一堆图片)转换成lmdb文件:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
rootfolder是存放图片的文件夹绝对路径,listfile中每行记录一张图片的相对路径和类别(类别需为整数),rootfolder和listfile中的图片相对路径构成图片的绝对路径。
通过resize可将图片调整为相同的宽高。
如:convert_imageset -resize_height 64 -resize_width 64 ./ pic_label.list mydb
设置训练参数:
网络结构和网络迭代参数在不同prototxt文件中定义,
在迭代参数文件,如mnist例子中lenet_solver.prototxt文件里,指定网络结构参数的位置。
网络结构:net由layer组成,layer之间通过input和output联系。详见例子lenet_train_test.prototxt。
训练和测试。
caffe train –solver=lenet_train_test.prototxt
顺便,参考的网站:http://linusp.github.io/2015/07/21/caffe-base-usage.html
其他不错的帖子:http://www.datakit.cn/blog/2015/08/03/caffe_introduction.html
(20160124更新)
因为用了anaconda库(没错,就是caffe官网建议的),要定时更新。。不然就像我一样死在libhdf5的.9版本上几天。更新命令:
conda update conda
conda update anaconda
bug的错误是: Library not loaded: libhdf5_hl.9.dylib
通过几天的debug发现anaconda里面是.9的,/usr/local/lib里面是.10版本。我选择狗带。。
于是直接通过brew uninstall hdf5把后面的删了,顺便anaconda里面更新。然后错误变成了.10找不到。。。重新brew装回来,错误变成了Segmentation fault: 11。啊啊啊啊!!!
(20160125更新)
真是被网上的帖子给坑惨了。
blas用的是openblas,于是很多人说需要加两句话:
exportLDFLAGS=/usr/local/opt/openblas/lib:
LDFLAGS
exportCPPFLAGS=/usr/local/opt/openblas/include:
CPPFLAGS
于是一整天都死在这个bug上:
ld: can’t map file, errno=22 file ‘/usr/local/opt/openblas/lib’ for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
纠结了一整天,最后决定把所有的caffe删了重新下载设置,并且放弃openblas,结果还是同样的错误。我就想,整个程序里面是没有相关的,怎么还是这个错误,那肯定是环境变量哪边出了问题。想了半天,好像就上面设置了个LDFLAGS那边的路径正好跟错误一样,把那个设置为空。make立即通过了。我真是想找块豆腐撞死算了。
(20160126更新)
据说今年水逆结束,于是我在水逆结束的那个点(下午五点,日本时间六点?)过了十分钟make runtest成功了!!!
真是被anaconda害惨了。各种错误,最后卡在hdf5的link和lib版本不同(anaconda再更新也只有.5,brew upgrade直接给到.6), 没办法,把所有依赖anaconda的全部禁掉,重新用单纯的brew,结果成功了。
今天出现的其他bug是:
dyld: Library not loaded: libcaffe.so.1.0.0-rc3,好像是因为动态链接没成功,于是收到加了DYLD_LIBRARY_PATH=/Users/bei/caffe/.build_release/lib
cmake之后发现CPU_ONLY还是显示OFF, 于是手动改两个文件,CaffeConfig.cmake和CMakeCache.txt,搜索CPU_ONLY,设置为ON,然后重新make
(20160127更新)
我也真是击不败的小强,在这点上我突然很佩服自己呢。是的,今天又来继续折腾了。言归正传。
昨天晚上把anaconda禁掉之后,runtest终于全部通过了。但是!在我吃完晚饭回来准备再看的时候,发现重新开个终端所有的path又变回去了(有anaconda)。找了一晚上,在c同学帮助下,终于发现是.bash_profile里面的问题。anaconda在安装的时候,很强盗的修改了.bash_profile文件,导致每次都会自动把anaconda加入到环境变量里。禁用就好。(顺便了解了修改环境变量的三个方式,以及他们的优先级什么的,.bashrc, /ect/profile什么的)
今天准备用已经训练好的模型试试。哦,顺便说下,我已经放弃了本来想用的fast-rcnn,因为它必须得用gpu运行,然后我这不争气的电脑没有NVIDIA,耍不起来,只能cpu-only,于是fast-rcnn的runtest很多都没法通过。
models文件夹下面提供了几个训练好的model,利用scripts里面的download可以顺利下载,比如:
python scripts/download_model_binary.py models/bvlc_alexnet
用example里面的cat.jpg测试caffenet model的时候出现了几个错误。
首先,No to_python (by-value) converter found for C++ type: boost::shared_ptr