caffe学习笔记--写一个运行caffe.cpp的makefile

基于caffe的鉴黄图片分类c++代码 基于caffe的鉴黄图片分类c++代码 icity.cpp: #include #include #include #include #include "caffe/caffe.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2 阅读详情

之前因为有caffe的项目要放到服务器上面,但是其实不需要在服务器上面重新安装caffe,所以写了个makefile. 这里改写了个简单的,比较容易读的,只运行caffe.cpp,如果由其他的,可以按照makefile的规则添加就好。

首先,还是要说一下关于caffe的依赖,参考之前的两篇博客:http://blog.youkuaiyun.com/thystar/article/details/51179064  和http://blog.youkuaiyun.com/thystar/article/details/50837750   

这里,我们运行下caffe.cpp的train过程:

因为我的caffe是gpu编译的,这里我们需要用cpu,所以,编译会报错:fatal error: cublas_v2.h: 没有那个文件或目录。需要改下代码:在device_alternate.cpp中添加#define CPU_ONLY 1即可

因为这里不需要用gpu,所以稍微改下train的代码,把跟gpu下相关的代码删掉:

改完后的代码如下:

int train() {
  CHECK_GT(FLAGS_solver.size(), 0) << "Need a solver definition to train."; /// FLAGS_solver是一个字符串,这里这个字符串是“examples/mnist/lenet_solver.prototxt”
  CHECK(!FLAGS_snapshot.size() || !FLAGS_weights.size())
      << "Give a snapshot to resume training or weights to finetune "
      "but not both.";

  caffe::SolverParameter solver_param;
  caffe::ReadSolverParamsFromTextFileOrDie(FLAGS_solver, &solver_param);///读取文件,并将相应的值赋给solver_param

  caffe::SignalHandler signal_handler(
        GetRequestedAction(FLAGS_sigint_effect),
        GetRequestedAction(FLAGS_sighup_effect));

  Caffe::set_mode(Caffe::CPU);
  shared_ptr<caffe::Solver<float> >
      solver(caffe::SolverRegistry<float>::CreateSolver(solver_param));///完成网络的初始化

  solver->SetActionFunction(signal_handler.GetActionFunction());

  if (FLAGS_snapshot.size()) {
    LOG(INFO) << "Resuming from " << FLAGS_snapshot;
    solver->Restore(FLAGS_snapshot.c_str());
  } else if (FLAGS_weights.size()) {
    CopyLayers(solver.get(), FLAGS_weights);
  }


        LOG(INFO) << "Starting Optimization";
        solver->Solve();///开始训练,优化过程中所有的输出都来自这一步
        LOG(INFO) << "Optimization Done.";
        return 0;
}
RegisterBrewFunction(train);

然后,来写个Makefile,

首先,需要指定caffe路径,

# this is a makefile for caffe
TARGET := mnist
# caffe directory
CAFFE_DIR := /home/sindyz/caffe-master
# caffe include
CAFFE_INCLUDE := $(CAFFE_DIR)/include
# caffe build 
CAFFE_BUILD := $(CAFFE_DIR)/build
# caffe build lib
CAFFE_BUILD_LIB := $(CAFFE_BUILD)/lib
# caffe build src
CAFFE_BUILD_SRC := $(CAFFE_BUILD)/src

按照之前codeblock配置中的方式,加入链接库:

# dependency libraries and caffe linking libs
LFLAGS := -pthread -lnsl -lX11
LFLAGS += -lcaffe -lglog -lgflags \
	-lprotobuf -lboost_system -lboost_filesystem \
	-lboost_thread -lboost_coroutine -lboost_context -lboost_regex\
	-lm -lhdf5_hl -lhdf5 -lleveldb -lsnappy -llmdb \
	-lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_objdetect\
	-lstdc++ -lcblas -latlas

LFLAGS += -Wl,-rpath=$(CAFFE_BUILD_LIB)
这里需要说明的是,如果指示在本机上运行-rpath=$(CAFFE_BUILD_LIB)是没有问题的。如果要放到别的系统上,需要把所有的链接库文件全部放到lib目录下,一并上传。具体步骤后面会介绍

后面的就是要定义运行规则:

# rules
CFLAGS := -g -I . -I $(CAFFE_INCLUDE) -I $(CAFFE_DIR)/src \
	-I $(CAFFE_BUILD_SRC) -I ./ \
	-Wall -DCPU_ONLY -DUSE_OPENCV
CC := g++

SRC += caffe.cpp

$(TARGET):$(SRC)
	$(CC) -o $(TARGET) -O0 -std=c++11 $(SRC) $(CFLAGS) $(LFLAGS) -L$(CAFFE_BUILD_LIB) -Wno-sign-compare

clean :
	@rm -f $(TARGET)

OK, 在当前目录下打开命令窗口,输入make编译。

编译成功后,运行:./mnist train --solver=examples/mnist/lenet_solver.prototxt

这里运行的是mnist这个数据集


现在,说一下如果要把这个项目放到别的linux系统要怎么弄。

首先,需要找出本项目所有依赖库:我的生成的执行文件名是mnist.

在当前目录下执行:

cp $(ldd mnist | cut -d \( -f1 | cut -d \> -f2) lib/

lib目录要提前建好,这样,所有的依赖库都被放到lib目录下;

命令行中间的部分其实是个正则表达式,可以直接ldd mnist下看看库文件的输出形式

然后,需要改下makefile, 把原来的-rpath=$(CAFFE_BUILD_LIB) 该为当前lib目录-rpath=./lib

即可。


最后需要说明的两个地方是,1. 拷贝到别的系统的文件只需mnist这个执行文件,lib文件和数据的存放文件examples/mnist目录。

2. 如果用centos,g++的默认版本太低。需要跟新下,跟新执行如下命令:

$ cat /etc/centos-release
CentOS release 6.7 (Final)
$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-3-toolchain
$ scl enable devtoolset-3 bash
$ gcc --version
gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)
...
$ g++ --version
g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)
...
$ gfortran --version
GNU Fortran (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)


Caffe学习-Caffe编译常见错误总结及解决方法 阅读详情

相关推荐

深度学习文章1:Caffe安装教程:Ubuntu16.04(CPU)

Caffe安装教程:Ubuntu16.04(CPU)本文是在新安装的Ubuntu16.04上进行Caffe的安装,每个版本的Ubuntu安装略有不同,请自行百度。一、检查自己电脑是否具有GPU 通常Caffe在计算时有两种模式可以选择,CPU或GPU,使用GPU处理图像速度会更快,但往往有的计算机没有GPU,配置太低,所以只能选择CPU,作者的电脑不支持GPU,因此选择CPU安装的版本。 输入:

莫欺丶Miss航的博客 2万+

caffe中makefile的设置

来自:https://blog.csdn.net/u013078356/article/details/55095757 6.配置caffe (1)使用Git直接下载Caffe非常简单,或者去https://github.com/BVLC/caffe下载。由于我习惯去github上找代码,所以就直接去下载的源码。 下载完成后,会在家目录下的下载里找到caffe-master.zip,用unz...

gaotihong的博客 1218

caffe安装配置文件Makefile.config

caffe安装配置文件Makefile.config caffe安装配置文件Makefile.config caffe安装配置文件Makefile.config

caffe学习笔记1.1-- caffe的Makefile文件

在本文中,描述一下caffe的Makefile文件,这个文件用于caffe的编译;这里不会把所有文件都考过来,有些脚本相似的会省略掉 文件在caffe根目录下,因为用到makefile.config中的变量,因此,在用到的时候我会给下说明 首先,是项目名称 PROJECT := caffe #项目名称,就是当前的caffe目录 接下来,这个文件要用到了Makefile.conf

thystar的专栏 1万+

caffe Makefile.config

Ubuntu 16.04 + cuda8.0 + opencv3.1 + cudnn + python 环境下的 caffe 编译文件 Makefile.config ,详细:http://blog.csdn.net/yhaolpz/article/details/71375762

Caffe-SSD编译配置文件修改Makefile和Makefile.config

安装配置caffe-ssd过程中遇到的坑主要来自配置文件的设置,因此Makefile和对应config的设置异常重要。附件包含了CPU和GPU版的配置,Python2.7和Python3.5的配置。另,ssd安装配置过程及可能遇到的坑见https://blog.csdn.net/lukaslong/article/details/81390276

Caffe的Makefile的阅读_01

在Caffe的原Makefile(Shell脚本语法的文件)中, 各种大写的配置变量和条件语句充斥其中, 顺着这次顺利编译源码的时机, 在想, 为何不去"翻译"一下Makefile脚本, 了解Caffe的编译?! 好, 开始. CODE 01: 定义了编译时用到的变量的代码 # 在shell及make命令中, 定义变量: 项目名和配置文件, 之后做配置文件的检查, 并include; PROJEC...

T=F?1:0 241

caffe的配置文件Makefile.conf

利用anaconda2来进行caffe编译Makefile.conf的文件更改情况。

Ubuntu16:cmake生成Makefile编译caffe过程(OpenBLAS/CPU+GPU)塈解决nvcc warning:The ‘compute_20‘, ‘sm_20‘

之前在ubuntu14下实现了Caffe编译(参见去年写的博客 《 Ubuntu14:cmake生成Makefile编译caffe过程(OpenBLAS/CPU only)》)。 最近将系统升级到ubuntu16,新电脑显示也支持CUDA了,重新编译Caffe时发现还依赖库还是有点不同,在这里记下来。硬件配置神舟Z7M-SL7D2笔记本 CPU Core i7-6700HQ(含集成显卡)

10km的专栏 1万+

Hi3519V101

Hi3519V101作为新一代行业专用HD IP摄像机SoC,集成新一代ISP,采用业界最新的H.265视频压缩编码器,同时采用先进低功耗工艺和低功耗架构设计,这一切将使得Hi3519V101在低码率、高图像质量和低功耗方面持续引领行业水平。

Caffe编译的配置文件Makefile.config(环境:OpenBLAS,Anaconda,无GPU)

主要修改项: 1. 无GPU; 2. 使用了OpenCV 3; 3. 使用了OpenBLAS; 4. 使用了Anaconda。 具体请见 http://blog.csdn.net/u010391437/article/details/73703200 这篇博客的第9步。

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

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

GarfieldEr007的专栏 886

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\\,\‘,\“,\?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解;

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\\,\',\",\?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解;

南城花开过的博客 3万+

linux环境cpp/c文件的makefile编写(caffe举例)

编译单个cpp文件 方法一、g++ 文件名.cpp,生成一个名为 “文件名.out” 的可执行文件 方法二、g++ -c 文件名.cpp -o 新文件名.o:生成一个被命名成 “新文件名” 的.o文件 g++ 文件名.o -o 新文件名:生成一个名为 “新文件名” 的可执行文件 两种方法本质上是一样的。最后执行 ./可执行文件名如 ./a.out即可执行程序...

独行侠 1055

ICT调试技巧:从基础到实战的全面指南

本文提供了一份全面的ICT调试技巧指南,涵盖从基础认知到实战应用的全过程。详细解析了ICT设备硬件结构、程序文件构成,并重点讲解了调试界面的核心参数与高效快捷键。通过跳线、电阻、电容及二极管等常见元器件的实战调试案例,分享了参数设置要点与典型问题解决方案,帮助工程师快速掌握ICT调试核心技能,提升测试效率与准确性。

weixin_29202213的博客 341

手把手教你用Ubuntu Base 20.04打造轻量级ARM开发板根文件系统(附常见问题解决)

本文详细介绍了如何基于Ubuntu Base 20.04 LTS构建轻量级ARM开发板根文件系统,涵盖环境准备、镜像制作、跨架构配置、软件包定制及常见问题解决。通过实战指南,开发者可快速掌握ARM架构下的根文件系统构建技巧,优化系统性能并解决部署中的典型问题。

gin88的博客 209

caffe linux c++ Makefile 文件

Makefile 文件: SRCS = $(wildcard *.cpp) # wildcard把 指定目录 ./ 下的所有后缀是cpp的文件全部展开。 OBJS = $(SRCS:.cpp = .o) # OBJS将$(SRCS)下的.cpp文件转化为.o文件 CXX = g++ # 代表所使用的编译器 INCLUDES = -I/usr/local/inc...

weixin_NineDays66 416

用itext读取PDF文件提取对应得字符串

一.maven导入jar包 <!--pdf解析start--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version...

zhanghua_chinese的博客 3695

Makefile编译问题----C++调用caffe

Makefile编译问题(其实也是C++调用caffe,如何在Linux下编译运行的问题) 博文https://blog.csdn.net/zxj942405301/article/details/71799279中只给出了MTCNN.h和MTCNN.cpp,需要自己写main.cpp,所以若只是想让编译通过,我写了一个简单的demo: #include &lt;iostream&gt; #...

lantuxin的博客 524

n8n实战:动态报表生成与企业微信自动化推送

本文详细介绍了如何利用n8n实现动态报表生成与企业微信自动化推送的全流程。通过配置n8n Form触发器、智能报表生成核心逻辑以及企业微信Webhook推送,帮助企业大幅提升数据收集与报表推送效率,实现从数据录入到报表推送的全自动化处理。

weixin_29267307的博客 304

pdb文件删除杂原子 HETATM;保留或去除水分子

这样操作水分子也会跟着删除,如果需要保留水分子。

weixin_42357472的博客 2644

深度学习之Caffe完全掌握:用C++调用模型之makefile

深度学习之Caffe完全掌握:用C++调用模型之makefile 使用c++调用已经训练好的模型并不难,因为caffe项目下的examples文件夹有示例,但是编写一个Makefile来单独编译一个调用caffe库的C++文件需要自己来完成。并且caffe依赖复杂,必须处理好。 classification.cpp文件解析(详情请参看这篇参考文章)#include <caffe/caffe.hp

MinCong Luo的博客 2332

手把手教你学Simulink--基于电能质量与无功补偿的场景实例:统一电能质量调节器(UPQC)的联合控制仿真

在现代电力系统中,电能质量问题有源电力滤波器(APF)→ 治理谐波与无功动态电压恢复器(DVR)→ 补偿电压暂降/暂升静止无功发生器(SVG)→ 无功补偿与电压支撑而统一电能质量调节器(Unified Power Quality Conditioner, UPQC)是一种集串联补偿与并联补偿于一体的全能型电能质量治理装置✅ 电压类问题:暂降、暂升、不平衡、闪变✅ 电流类问题:谐波、无功、三相不平衡✅ 实现双向有功交换(储能型)串联单元(DVR功能):串联于线路,控制电源侧电压质量并联单元。

MHD0815的博客 236

caffe的c++学习(通过c++接口使用caffe)

1.caffe的c++接口学习参考 https://blog.csdn.net/jiongnima/article/details/70197866 2.为了更好理解代码,需要调试caffe的程序(注意:makefile中要加入-g才能调试)。此处选择是:使用Ubuntu+vscode来调试classfication.cpp代码 首先,编写makefile,编译classificati...

qq_32425195的博客 5433

构建OneService:打造高效、安全、灵活的企业级数据服务平台

数据服务(OneService)作为统一的数据服务出口,实现了数据的统一市场化管理,有效地降低数据开放门槛的同时,保障了数据开放的安全。

数据与算法架构提升之路专栏 2106

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用Caffe C++ API调用生成模型进行分类

1. 前言 对于在Caffe环境之间设计和训练模型,一般是采用python接口,这样比较方便。但是到实际部署的时候,为了速度等因素的考虑,都会使用Caffe下的C++ API接口实现的。在这里使用Caffe自带的classification.cpp进行改造,希望能给大家理解带来帮助。 2. 实现 2.1 Classifier类 首先来看类的声明文件classification.h: ...

m_buddy的博客 3308

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 七月算法机器学习笔记4--线性回归与逻辑回归
下一篇: Spring杂记
thystar
博客等级 码龄17年 407粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值