Caffe
FrankJingle
这个作者很懒,什么都没留下…
展开
-
【caffe源码研究】番外篇:(2) 使用Visual Studio 看cu代码
参考自 CUDA VS2010 语法高亮 cu .cuh 文件高亮 这个设置是让VS2010编辑.cu文件时,把.cu文件里的C/C++语法高亮。 设置方法: 在VS2010的菜单 依次点击:工具->选项->文本编辑器->文件扩展名 ,在这个界面里: “编辑器(I)”下拉框选microsoft visual ++,在“扩展名”文本框输入.cu 点击“添加”按钮 ,重复工作把.cuh 添加为vc+原创 2016-12-30 21:43:45 · 1180 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(6) :caffe.proto
caffe使用protobuf来定义网络结构、参数等。这里介绍一下caffe.proto里面核心的部分。Blob先看Blob相关的protobufmessage BlobShape { //数据块形状定义为Num×Channel×Height×Wight原因在于caffe基于容器的多维嵌套 //来实现高维数据的封装。即vector(N)>。 repeated int64 di原创 2017-01-05 14:36:30 · 955 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(7) :Layer种类
Caffe自带的Layer及其参数被定义在caffe.proto中。一、分类在Layer的派生类中,主要可以分为(1)Vision LayersVison 层主要用于处理视觉图像相关的层,以图像作为输入,产生其他的图像。其主要特点是具有空间结构。 包含Convolution(conv_layer.hpp)、Pooling(pooling_layer.hpp)、Local Response Nor原创 2017-01-05 15:46:20 · 1140 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(8) :Layer代码
简介Layer是Caffe模型的本质内容和执行计算的基本单元。Layer可以进行很多运算,如:convolve(卷积)、pool(池化)、inner product(内积),rectified-linear和sigmoid等非线性运算,元素级的数据变换,normalize(归一化)、load data(数据加载)、softmax和hinge等losses(损失计算)。可在Caffe的layer原创 2017-01-05 19:34:04 · 784 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(9) :DataLayer
先从最基础的Data层讲起。 看看datalayer相关的类的继承关系首先定义了一个template <typename Dtype>class Batch { public: Blob<Dtype> data_, label_;};##include <boost/thread.hpp> #include <vector> #include "caffe/blob.hpp"原创 2017-01-06 00:30:57 · 1059 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(11) :PoolingLayer
Pooling层也是CNN中重要的层。 主要分成max-pool和mean-pool两种方法Forward_cpu前向过程如下void PoolingLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { const Dtype* bottom_原创 2017-01-06 01:21:38 · 655 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(12) :激活函数层
以ReLULayer为例,比较简单,直接上代码#include <algorithm>#include <vector>#include "caffe/layers/relu_layer.hpp"namespace caffe {template <typename Dtype>void ReLULayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>原创 2017-01-06 01:26:50 · 383 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(13) :损失层
在训练阶段有损失层,损失层需要两个输入的Blob,一个是网络的预测值,一个是真实的标签。基类LossLayer,其他的loss继承自这个类。这里以欧拉损失为例来说明原理欧拉损失 E=12N∑n=1N||yn−y‘n||2E=\frac{1}{2N}\sum^{N}_{n=1}||y_n-y_n^`||^2前向传播top:(1×1×1×1)维的欧氏距离损失E=12N∑Nn=1||yn−y‘n||2E原创 2017-01-06 01:50:32 · 827 阅读 · 1 评论 -
【caffe源码研究】第四章:完整案例源码篇(1) :LeNetSolver初始化
在训练lenet的train_lenet.sh中内容为:./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt由此可知,训练网咯模型是由tools/caffe.cpp生成的工具caffe在模式train下完成的。 初始化过程总的来说,从main()、train()中创建Solver,在Solver中创建Net,原创 2017-01-06 10:38:15 · 984 阅读 · 0 评论 -
【caffe源码研究】第四章:完整案例源码篇(2) :LeNet初始化训练网络
一、Solver到NetSGDSolver的构造函数中主要执行了其父类Solver的构造函数,接着执行Solver::Init()函数,在Init()中,有两个函数值得注意:InitTrainNet()和InitTestNets()分别初始化训练网络和测试网络。(1). InitTrainNet首先,ReadNetParamsFromTextFileOrDie(param_.NET(), &net_原创 2017-01-06 11:18:29 · 606 阅读 · 0 评论 -
【caffe源码研究】第四章:完整案例源码篇(3) :LeNet初始化测试网络
一、 测试网络结构注:Top Blob Shape格式为:BatchSize,ChannelSize,Height,Width(Total Count)二、 与训练网络对比训练网络9层,测试网络12层 训练网络没有的是:多了label_mnist_1_split、layer ip2_ip2_0_split、accuracy,类型为Split Layer和Accuracy Layer三、 Split原创 2017-01-06 11:37:50 · 483 阅读 · 0 评论 -
【caffe源码研究】第四章:完整案例源码篇(4) :LeNet前向过程
入口信息通过如下的调用堆栈信息可以定位到函数ForwardFromTo(其他函数中无重要信息)caffe::Net<float>::ForwardFromTo() at net.cpp:574caffe::Net<float>::ForwardPrefilled() at net.cpp:596caffe::Net<float>::Forward() at net.cpp:610对于Forwar原创 2017-01-06 12:12:45 · 761 阅读 · 0 评论 -
【caffe源码研究】第四章:完整案例源码篇(5) :LeNet反向过程
本部分剖析Caffe中Net::Backward()函数,即反向传播计算过程。从LeNet网络角度出发,且调试网络为训练网络,共9层网络。入口信息Net::Backward()函数中调用BackwardFromTo函数,从网络最后一层到网络第一层反向调用每个网络层的Backward。void Net<Dtype>::BackwardFromTo(int start, int end) { for原创 2017-01-06 13:09:06 · 1055 阅读 · 2 评论 -
【caffe源码研究】第三章:源码篇(4) :Solver
一个典型的solver文件如下# The train/test net protocol buffer definitionnet: "examples/mnist/lenet_train_test.prototxt"# test_iter specifies how many forward passes the test should carry out.# In the case of原创 2017-01-04 21:43:37 · 1063 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(10) :ConvolutionLayer
简介CNN最经典的几个层,这里介绍一下卷积层。这张图总结的不太全面,但是基本表现出了卷积层的继承关系。BaseConvolutionLayer其继承自Layer,是一个卷积以及反卷积操作的基类,首先我们来看BaseConvolutionLayer的LayerSetUp函数void BaseConvolutionLayer<Dtype>::LayerSetUp(const vector<Blob<Dt原创 2017-01-06 01:08:50 · 2019 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(5) :Net
简介通过合成和自动微分,网络同时定义了一个函数和其对应的梯度。通过合成各层的输出来计算这个函数,来执行给定的任务,并通过合成各层的后向传播过程来计算来自损失函数的梯度,从而学习任务。Caffe模型是端到端的机器学习引擎。 准确的说,Net是由一系列层组成的有向无环(DAG)计算图,Caffe保留了计算图中所有的中间值以确保前向和反向迭代的准确性。一个典型的Net开始于data layer——从磁盘中原创 2017-01-04 22:02:21 · 1005 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(3) :工厂模式
caffe里面无论solver还是layer都使用了工厂模式。工厂模式工厂模式的介绍 工厂方法模式(Factory Method Pattern)工厂模式的UML的类图 :这里就用solver的工厂模式进行说明,具体代码在solver_factory.hpp中。SolverRegistrysolver_factory.hpp中定义了一个SolverRegistry类。template <typen原创 2017-01-04 16:08:48 · 2644 阅读 · 1 评论 -
【caffe源码研究】第三章:源码篇(2) :Blob 和 SyncedMemory
一、Blob在之前的介绍中提到Blob是:对处理数据的一层封装,用于在Caffe中通信传递。也为CPU和GPU间提供同步能力数学上,是一个N维的C风格的存储数组总的来说,Caffe使用Blob来交流数据,其是Caffe中标准的数组与统一的内存接口,它是多功能的,在不同的应用场景具有不同的含义,如可以是:batches of images(图像), model parameters(模型参数)原创 2017-01-04 12:13:14 · 921 阅读 · 1 评论 -
【caffe源码研究】番外篇:(1) 使用Visual Studio 调试caffe代码
对代码进行调试,还是在windows平台上使用Visual Studio进行调试跟踪比较方便,对学习源码比较有帮助。windows平台上的caffe安装方法见 【caffe源码研究】第一章:安装篇(中): Windows版本文环境Windows 64位Visual Studio 2013参考自 Caffe学习笔记(2) – 如何调试Caffe网络.先打开caffe的VS工程项目,假设你的caf原创 2016-12-30 17:06:09 · 1843 阅读 · 0 评论 -
【caffe源码研究】第一章:安装篇(上): jumbo版
下载caffe下载caffe的源码# git clone https://github.com/BVLC/caffe.git 安装依赖库caffe涉及到一些依赖库,先使用jumbo安装# jumbo install pkg-config snappy opencv hdf5 google-gflags google-glog leveldb安装python依赖库#先安装pip# jumbo原创 2016-11-24 15:04:34 · 2306 阅读 · 0 评论 -
【caffe源码研究】caffe笔记
结构分析caffe分为 1. Solver 2. Net 3. Layer 4. Blob 四层结构. Solver : 负责模型的求解 Net : 负责定义网络的结构 Layer: 负责每一层网络功能的具体实现 Blob : 则定义数据,负责数据在每一层之间的流动。Blob1. 简介Blob是: 对处理数据的一层封装,用于在Caffe中通信传递。 也为CPU和GPU原创 2016-11-28 07:26:49 · 2082 阅读 · 0 评论 -
【caffe源码研究】第一章:安装篇(中): Windows版
一、安装环境:Windows 64位 Visual Studio 2013下载微软编辑的caffe版本。git clone https://github.com/Microsoft/caffe.git照着README.txt安装就可以了。二、配置将 caffe\windows\CommonSettings.props.example复制一份叫做 caffe\windows\CommonSet原创 2016-12-20 16:51:08 · 882 阅读 · 0 评论 -
【caffe源码研究】第一章:安装篇(下): Linux版
暂留,有空补上。原创 2016-12-21 11:09:44 · 466 阅读 · 0 评论 -
【caffe源码研究】第二章:使用篇(1): 制作数据集
caffe支持的输入数据最常用的是Data类型,支持LEVELDB or LMDB。LevelDB的格式只需要将convert_imageset 后面接参数db_backend=leveldb即可。Images(支持ImageData格式)HDF5一、LMDB、LevelDB格式1. LMDBlmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。其主要特性有:基于原创 2016-12-21 16:30:50 · 1970 阅读 · 0 评论 -
【caffe源码研究】第二章:使用篇(2):tools
caffe编译好后在caffe/build/tools下会生成一些工具,一一介绍使用方法。一、caffe这是最重要的工具caffe: command line brewusage: caffe <command> <args>commands: train train or finetune a model test score a model原创 2016-12-21 17:58:29 · 2642 阅读 · 0 评论 -
【caffe源码研究】第二章:使用篇(3) : C++接口
在caffe提供的样例里有一个C++接口的范例,整理一下如下。 首先是预测的 Classifier 类,定义构造函数Classifier和预测函数Classify。#include <caffe/caffe.hpp>#ifdef USE_OPENCV#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#原创 2016-12-22 19:48:20 · 1203 阅读 · 0 评论 -
【caffe源码研究】第二章:使用篇(4) : python接口
本小节介绍一下python的使用接口。python接口的调用需要在编译正确python接口的环境下,详见安装篇。make pycaffe一、画网络结构图使用python接口的draw_net.py可以将提供的网络结构画出图像。 首先,需要安装graphviz,源码安装,yum源安装,jumbo安装等等都可以。 这里讲一下源码安装。graphviz源码安装暂留然后安装pydot,直接使用pip安装原创 2016-12-23 12:16:13 · 1220 阅读 · 0 评论 -
【caffe源码研究】第二章:使用篇(5) : 模型可视化
使用python可以比较方便的将模型的过程可视化,看看中间的结果。我在一个预测年龄的python脚本后面进行。拿之前的数字识别来做实验也可以。 原脚本如下 : mean_filename='mean.binaryproto'proto_data = open(mean_filename, "rb").read()a = caffe.io.caffe_pb2.BlobProto.FromStri原创 2016-12-26 20:30:06 · 969 阅读 · 0 评论 -
【caffe源码研究】第二章:使用篇(6) : 训练过程分析工具
将caffe生成的log进行解析,可以分析训练的过程。 如果你是Linux系统,那么默认生成的log在/tmp 下,名字一般类似于caffe.a216-All-Series.a216.log.INFO.20160426-054718.9658至于windows系统下,自己搜一下log.INFO.就出来了,如果清理过系统那可能就没有了。 我的是默认存在了Temp里面。如果不希望日志到处乱跑,可以写原创 2016-12-26 20:39:14 · 629 阅读 · 0 评论 -
【caffe源码研究】第二章:实战篇(1) : 字符识别项目
字符识别实战项目,前面章节已经都有涉及,这里做一个总结,看看一个完整的项目从数据制作、训练 、识别、分析的全过程。一、数据集的制作这里就使用lmdb格式,其他格式参考 【caffe源码研究】第二章:使用篇(1): 制作数据集 中的方法即可。(1). 现有的数据集我们的数据如下,每个traindata和testdata里面都有10个文件夹,命名为0-9,分别对应数字0-9. 下方是目录结构部分显示。原创 2016-12-26 21:38:17 · 2551 阅读 · 2 评论 -
【caffe源码研究】第二章:实战篇(2) : ImageNet分类
本实战运行Classifying Imagenet的接口。1. 下载model新建一个download_model.bat,在caffe-master的工作目录下,内容./scripts/download_model_binary.py models/bvlc_reference_caffenet 下载bvlc_reference_caffenet.caffemodel2. 分类写Classifyi原创 2016-12-26 22:03:52 · 1560 阅读 · 0 评论 -
【caffe源码研究】第三章:源码篇(1) :caffe整体架构
在【caffe源码研究】caffe笔记 中对caffe源码结构做出过介绍。大致框架如下图所示:Caffe框架主要有五个组件,Blob,Solver,Net,Layer,Proto,其结构图如图所示。Solver负责深度网络的训练,每个Solver中包含一个训练网络对象和一个测试网络对象。每个网络则由若干个Layer构成。每个Layer的输入和输出Feature map表示为Input Blob和O原创 2017-01-04 10:46:28 · 947 阅读 · 0 评论 -
【openGL】安装篇(上):Windows
环境Windows7 x64Visual Studio 2013参考自 http://jingyan.baidu.com/article/d5c4b52bca5005da560dc5d6.html现在visual studio 都默认支持OpenGL,所以我们不需要再去官网下载OpenGL,但GLU是我们在学习过程中很有必要使用的.下载GLUThttp://www.opengl.org/res原创 2017-01-11 11:18:19 · 13815 阅读 · 1 评论