未加星标

机器视觉:makefile编译调用Caffe框架的C++程序

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

Caffe作为在众多公司搞深度学习时较多使用的框架,其在使用的友好程度上显然要比后起的一些深度学习框架要差一些,虽然如此,其作为深度学习的第一个开源框架,自有它的很多优势,比如设计结构。关于Caffe的种种,这里不表,小白菜仅聊很小的一个点,即: 对于调用Caffe框架的C++程序,如何使用makefile进行编译的问题 。

这个问题是小白菜近两天遇到的一个问题,经过小半天的谷歌以及尝试,顺利解决。记录下来,一则备查询之需,二则对碰到相同问题的朋友也应该有帮助。当然对使用IDE的朋友,这个问题并不是问题,但是某些场合,比如开发环境在服务器上,这时候只能采用vim+makefile的方式来编写代码以及编译代码了,so我们终究还是避不过这个问题。

关于使用makefile编译调用Caffe框架的C++程序,有两种方式:一种是最容易且最笨的方法,即把你写的C++程序方法Caffe的examples目录里面,然后在 CMakeLists.txt 里面把你的C++程序添加到相应的位置,这种方式终究不是一个长久之道;另外一种是把Caffe编译成一个库,然后我们可以像正常使用一个库一样,调用和编译C++程序了。小白菜以为,此种方式是最优雅的方法,注意,对于makefile文件,我们并不是直接写的,而是通过写cmake文件然后编译生成的makefile文件。整个过程分为三步:

重新编译一份Caffe 编写cmake文件 编译目标文件

下面细解该方法的步骤。

重新编译一份Caffe

对于已有Caffe环境了的小伙伴,对于重新编译一份Caffe可能觉得多余,但小白菜以为,通过下面这种方式编译,可以让你后续的步骤能够顺利进行,执行下面命令:

git clone https://github.com/BVLC/caffe.git git checkout master cp Makefile.config.example Makefile.config

修改 Makefile.config 文件,小白菜的线上环境用的Openblas做的矩阵加速,所以BLAS这一块的配置如下:

# BLAS choice: # atlas for ATLAS (default) # mkl for MKL # open for OpenBlas BLAS := open BLAS_INCLUDE := /opt/OpenBLAS/include BLAS_LIB := /opt/OpenBLAS/lib

然后,可以开始愉快地编译下面Caffe了:

mkdir build && cd build cmake .. -DBUILD_SHARED_LIB=ON -DBLAS=open cmake . -DCMAKE_BUILD_TYPE=Debug # switch to debug make -j 12 && make install # installs by default to build_dir/install cmake . -DCMAKE_BUILD_TYPE=Release # switch to release make -j 12 && make install # doesn’t overwrite debug install

上面编译完成后,我们在 build/install 目录下看到Caffe作为一个供调用的库的完整文件:

├── bin ├── include ├── lib ├── python └── share

到这里,第一步走完了。回到关于推荐重新编译一份的问题,为什么推荐重新编译一份呢?这是因为,后面在写cmake文件的时候,我们是通过find_package来找Caffe库的,如果不按上面的过程重新编译一份,find_package无法找到Caffe的库目录。当然你也可以通过其他的方式绕过去,但如果想少些折腾,还是按这个来为妥。

编写cmake文件

顺利完成了 重新编译一份Caffe 的步骤后,我们来写(复制)一份 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8.8) find_package(Caffe) include_directories(${Caffe_INCLUDE_DIRS}) add_definitions(${Caffe_DEFINITIONS}) # ex. -DCPU_ONLY add_executable(caffeinated_application extract_features.cpp) target_link_libraries(caffeinated_application ${Caffe_LIBRARIES})

此份文件来自 Improved CMake scripts 。上面,小白菜要单独编译一份经过修改后的提取特征的文件 extract_features.cpp ,整个目录是这样的:

├── CMakeLists.txt └── extract_features.cpp 编译目标文件

我们进入到包含 CMakeLists.txt 和 extract_features.cpp 文件的目录,执行下面命令:

mkdir build cd build cmake .. make

执行到这一步,得到了我们的最终可执行文件 caffeinated_application ,我们的整个使用makefile编译调用Caffe框架的C++程序的问题已完结。

通过此种方法,我们能够很优雅的解决使用makefile编译调用Caffe框架的C++程序的问题,后面就可以愉快地写各种调用Caffe框架的代码了。

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

主题: C++深度学习CPU开源服务器谷歌TIDBU
分页:12
转载请注明
本文标题:机器视觉:makefile编译调用Caffe框架的C++程序
本站链接:http://www.codesec.net/view/522740.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(59)