在ubuntu14.04下使用codeblocks(C++)调试caffe

来源:互联网 发布:微商和淘宝的区别 编辑:程序博客网 时间:2024/05/02 00:40

最近需要用c++caffe的代码,笔者希望使用codeblocks调试caffe。然而自己十分小白,所以折腾了很长一段时间才出来。在这篇博客

里我会总结一下从安装caffe到成功在codeblocks上运行官方提供的cpp例程的全过程。希望可以帮到大家。




笔者开始调试时,已经有了配置好的ubuntu14.04Opencv3.1.0。使用的是CPU_ONLY的模式。



1.caffe的安装



这里不得不说caffe官网上说的十分详细。基本照这他来就不会出问题。

首先是caffe的下载,笔者是从caffegithub上克隆下来的。

git clonehttps://github.com/BVLC/caffe

下载好后参考caffe官网上的Installation部分

先安装依赖项

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compilersudo apt-get install --no-install-recommends libboost-all-dev

再安装BLASPython(笔者用Python进行模型的训练)

BLAS:

sudo apt-get install libatlas-base-dev

Python:

笔者下载并安装了ipthon notebook

CUDA:

笔者装了CUDA8.0,不过其实根本就不需要装。我用CPU_ONLY,我装个蛋蛋。

更可恶的是,可能是由于我电脑没有独立显卡得缘故。我装完竟然登陆不了系统了

w(Д)w

最后我才发现是更改了环境变量的原因,并且用了这篇博客上的说明解决了问题,感谢这位博主http://www.cnblogs.com/zhcncn/p/3989572.html



然后进入编译环节。首先打开Makefile.config.example。由于我的是CPU_ONLYOPENCV使用的是3.1.0版本。于是需要将里面得CPU_ONLY:= 1

OPENCV_VERSION:= 3取消注释。

然后cd到你克隆下来的caffe中。执行下列命令

cp Makefile.config.example Makefile.configmake allmake testmake runtest

如果runtest通过了,就完成了。但是如果没过的话,就需要在网上根据bug找解决方案了。不过不用担心,网上资源还是很足的。


为了使用python,需要运行

make pycaffe


最后,按照官网上的说明,运行

make distribute



到此为止,caffe就安装完成了。



2.codeblocks的配置



有关codeblocks的配置的资源网上比较少,主要是需要配置编译器。由于笔者先前使用codeblocks进行opencv的编译。关于opencv

codeblocks中的配置不再赘述。有需要的同学可以参考网上的博客,有很多写的很棒。(๑•̀ㅂ•́)و✧



笔者首先在ipython上运行了00-classification.ipynb,一来是把运行cpp例程的一些文件下载下来,二来是确认一下caffer是好使的。



现在,先创建一个opencvproject。把其中的main函数换为官方提供的.cpp例程。为了在codeblocks中直接运行。我将需要的文件拷贝到了

这个project的文件夹下,并且将main函数前几句稍微改了一下

int main(int argc, char** argv) {  if (argc != 1) {    std::cerr << "Usage: " << argv[0]              << " deploy.prototxt network.caffemodel"              << " mean.binaryproto labels.txt img.jpg" << std::endl;    return 1;  }  ::google::InitGoogleLogging(argv[0]);  string model_file   = "deploy.prototxt";  string trained_file = "bvlc_reference_caffenet.caffemodel";  string mean_file    = "imagenet_mean.binaryproto";  string label_file   = "synset_words.txt";

然后我开始配置codeblocks的编译器,我搜到了一个比较不错的博客,虽然完全按照这种方法我没能成功,但是这篇博客还是帮了我很多。

http://blog.csdn.net/u012938704/article/details/52885879

好了,废话不多说,直接上配置方法


1)头文件的搜索位置


Searchdirectories ->Compile中添加:

(CAFFE_ROOT)/include(CAFFE_ROOT)/build/src (caffe.pb.h 的位置)



2)链接库的搜索位置


Searchdirectories ->Linker中添加:

(CAFFE_ROOT)/build/lib (libcaffe 的位置)



3)添加需要的链接库名


Linkersettings->linker libraries中添加:


(CAFFE_ROOT)/build/lib/libcaffe.so

Linkersettings->Other linker options中添加:

-pthread-lcaffe -lglog -lgflags -lprotobuf -lboost_system -lboost_filesystem-lm -lhdf5_hl -lhdf5 -lleveldb -lsnappy -llmdb -lboost_thread-lstdc++ -lcblas -latlas

4.添加相关宏定义

Compilesettings->#defines中添加:

CPU_ONLYUSE_OPENCVUSE_LEVELDBUSE_LMDB
注意,我的配置方法和原博有出入。首先第三步需要添加
libcaffe.so
其次,第四步中不能写。

-lopencv_core -lopencv_highgui -lopencv_imgproc
最后,不需要添加任何cpp文件到自己的工程中


现在可以编译通过了。运行,发现还是有错误


error while loading shared libraries: cannot open shared object file: No such file or director



参考这篇博文即可解决问题

http://blog.csdn.net/sahusoft/article/details/7388617

最后,运行成功φ(≧ω≦*)♪


第一次编辑博文,排版好麻烦 TAT

1 0