caffe 订阅
Caffe,全称Convolutional Architecture for Fast Feature Embedding,是一个兼具表达性、速度和思维模块化的深度学习框架。由伯克利人工智能研究小组和伯克利视觉和学习中心开发。虽然其内核是用C++编写的,但Caffe有Python和Matlab 相关接口。Caffe支持多种类型的深度学习架构,面向图像分类和图像分割,还支持CNN、RCNN、LSTM和全连接神经网络设计。Caffe支持基于GPU和CPU的加速计算内核库,如NVIDIA cuDNN和Intel MKL。 展开全文
Caffe,全称Convolutional Architecture for Fast Feature Embedding,是一个兼具表达性、速度和思维模块化的深度学习框架。由伯克利人工智能研究小组和伯克利视觉和学习中心开发。虽然其内核是用C++编写的,但Caffe有Python和Matlab 相关接口。Caffe支持多种类型的深度学习架构,面向图像分类和图像分割,还支持CNN、RCNN、LSTM和全连接神经网络设计。Caffe支持基于GPU和CPU的加速计算内核库,如NVIDIA cuDNN和Intel MKL。
信息
外文名
Convolutional Architecture for Fast Feature Embedding
领    域
人工智能
特    点
清晰,可读性高,学习快速
简    称
Caffe
中文名
快速特征嵌入的卷积结构
接    口
Python和Matlab 相关接口
实    质
一种深度学习框架
Caffe简介
Caffe是一个深度学习框架,最初开发于加利福尼亚大学伯克利分校。Caffe在BSD许可下开源,使用C++编写,带有Python接口。是贾扬清在加州大学伯克利分校攻读博士期间创建了Caffe项目。项目托管于GitHub,拥有众多贡献者。Caffe应用于学术研究项目、初创原型甚至视觉、语音和多媒体领域的大规模工业应用。雅虎还将Caffe与Apache Spark集成在一起,创建了一个分布式深度学习框架CaffeOnSpark。2017年4月,Facebook发布Caffe2,加入了递归神经网络等新功能。2018年3月底,Caffe2并入PyTorch。
收起全文
精华内容
参与话题
问答
  • Caffe简介

    千次阅读 多人点赞 2018-08-19 16:15:54
    什么是caffe? caffe的特点 caffe架构 caffe的硬件环境 caffe的依赖库 caffe的接口 1、什么是caffe?  caffe是一个清晰而高效的深度学习框架,是纯粹的C++/CUDA架构,支持命令行、python和matlab接口;可以在...
    • 什么是caffe?
    • caffe的特点
    • caffe架构
    • caffe的硬件环境
    • caffe的依赖库
    • caffe的接口

    1、什么是caffe?

            caffe是一个清晰而高效的深度学习框架,是纯粹的C++/CUDA架构,支持命令行、python和matlab接口;可以在CPU和GPU之间无缝切换,其作者是贾扬清,目前caffe2已经发布。

           caffe的全称是Convolutional Architecture for Fast Feature Embedding(译为:快速特征嵌入的卷积体系结构),核心语言是C++。caffe的基本工作流程是设计建立在神经网络的一个简单假设,所有的计算都是层的形式表示的,网络层所做的事情就是输入数据,然后输出计算结果。比如卷积就是输入一幅图像,然后和这一层的参数(filter)做卷积,最终输出卷积结果。每层需要两种函数计算,一种是forward,从输入计算到输出;另一种是backward,从上层给的gradient来计算相对于输入层的gradient。这两个函数实现之后,我们就可以把许多层连接成一个网络,这个网络输入数据(图像,语音或其他原始数据),然后计算需要的输出(比如识别的标签)。在训练的时候,可以根据已有的标签计算loss和gradient,然后用gradient来更新网络中的参数。

    2、caffe的特点

    *模块化

    caffe设计之初就做到了尽可能的模块化,允许对数据格式、网络层和损失函数进行扩展。

    *表示和实现分离

    caffe的模型定义是用Protocol Buffer(协议缓冲区)语言写进配置文件的,以任意有向无环图的形式,caffe支持网络架构。caffe会根据网络需要正确占用内存,通过一个函数调用实现CPU和GPU之间的切换。

    *测试覆盖

    每一个单一的模块都对应一个测试

    *python和matlab接口

    同时提供两种接口

    *预训练参考模型

    针对视觉项目,caffe提供了一些参考模型,这些模型仅应用在学术和非商业领域

    3、caffe架构

    *数据存储

    caffe通过“Blobs”即以四维数组的方式存储和传递数据。Blobs提供了一个统一的内存接口,用于批量图像(或其他数据)的操作和参数更新,Models是以Google Protocol Buffers的方式存储在磁盘上的。大型数据存储在LevelDB数据库中。

    *层             http://caffe.berkeleyvision.org/tutorial/layers.html

    一个caffe层(Layer)是一个神经网络层的本质,它采用一个或多个Blobs作为输入,并产生一个或者多个Blobs作为输出。层有两个关键的职责,前向传播,需要输入并产生输出;反向传播,取梯度作为输出通过参数和输入计算梯度。

    *网络和运行方式

    caffe保留所有的有向无环图,保证前向传播和反向传播正确进行。caffe模型是终端到终端的机器学习系统。一个典型的网络开始于数据层,结束于loss层。在CPU和GPU上,层会产生相同的结果。

    4、caffe的硬件环境

    *CPU的选择

    caffe支持CPU和GPU训练。如果采用CPU训练,CPU支持的线程越多越好,因为caffe本身显性的使用两个线程。一个线程用来读取数据,另一个线程用来执行前向传播和反向传播;如果采用GPU训练,则大量运算由GPU完成,CPU只运行caffe的两个线程,因此即使选用更多的CPU也无法大幅度加速训练,训练时效取决于GPU。

    *GPU的选择

    因为caffe只支持cuda(Computer Unified Device Architecture)库,而cuda库是NVIDIA显卡专用的,所以选择caffe作为深度学习框架一定要选用NVIDIA显卡。如果电脑使用两个不同显卡的版本,则训练速度是两张低速卡一起训练的速度。

    *内存的选择

    选择支持双通道的内存以及高频率的内存有利于训练,GPU训练下,内存频率不是重要影响因素。

    *硬盘选择

    caffe采用单独线程异步方式从硬盘中顺序读取数据,需要根据实际情况看是否考虑固态硬盘(SSD),硬盘容量和数据集密切相关。

    5、caffe的依赖库

    Boost库:一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。caffe采用C++作为主开发语言,其中大量的代码依赖于Boost库。

    GFlags库:Google的一个开源的处理命令行参数的库,使用C++开发。caffe库采用GFlags库开发caffe的命令行。

    GLog库:一个应用程序的日志库,提供基于C++风格的流日志API,caffe运行时的日志依赖于GLog库。

    LevelDB库:Google实现的一个非常高效的Key-Value数据库。单进程服务,性能非常高。是caffe支持的两种数据库之一。

    LMDB库:是一个超级小、超级快的Key-Value数据存储服务,使用内存映射文件,因此在读取数据的性能跟内存数据库一样,其大小受限于虚拟地址空间的大小。是caffe支持的两种数据库之一。

    ProtoBuf库:Google Protocol Buffer,一种轻便高效的结构化数据存储格式,可用于结构化数据的串行化(序列化),适合做数据存储或RPC数据交换格式。可用于通信协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。caffe使用起来非常方便很大程度上是因为采用.proto文件作为用户的输入接口。用户通过编写.proto文件定义网络模型和Solver。按序排列时二进制字符串尺寸最小,高效序列化,易读的文本格式与二进制版本兼容,可用多种语言实现高效的接口,尤其是 C++
    和 Python。这些优势造就了 Caffe 模型的灵活性与扩展性。

    HDF5库:Hierarchical Data File,一种高效存储和分发科学数据的新型数据格式,可存储不同类型的图像和数码数据的文件格式,可在不同的机器上进行传输,同时还有统一处理这种文件格式的函数库。caffe支持HDF5格式。

    snappy库:一个C++库,用来压缩和解压缩的开发包。旨在提供高速压缩速度和合理的压缩率。caffe在数据处理时依赖于snappy库。

    6、caffe的接口

    caffe python接口------Pycaffe

    (1)caffe.Net是主要接口,负责导入数据、校验数据、计算模型;

    (2)caffe.Classifier用于图像分类;

    (3)caffe.Detector用于图像检测;

    (4)caffe.SGDSolver是搂在外的solver的接口;

    (5)caffe.io处理输入输出,数据预处理;

    (6)caffe.draw可视化net的结构;

    (7)Caffe blobs以numpy ndarrays的形式表示,方便而且高效。

    caffe matlab接口------matcaffe

    caffe命令行接口

               caffe train:用于模型学习

               caffe test:用于测试运行模型的得分,并且用百分比表示网络输出的最终结果

               caffe time:用来检测系统性能和测量模型相对执行时间,此命令通过逐层计时与同步,执行模型检测

     

    展开全文
  • 本课程在windows下搭建CPU版本Caffe环境,便于初学者学习和调试。通过实例介绍了Caffe的的训练和预测方法以及对应的python接口,便于大家掌握Caffe常用的训练和预测方法;结合以图形化的方式介绍网络结构、训练的...
  • 深度学习(五)caffe环境搭建

    万次阅读 热门讨论 2015-09-28 10:31:24
    对于caffe的系统一般使用linux系统,当然也有windows版本的caffe,不过如果你一开始使用了windows下面的caffe,后面学习的过程中,会经常遇到各种错误,网上下载的一些源码、模型也往往不能快速的跑起来,因为貌似...

    ubuntu 系统下的Caffe环境搭建

    原文地址http://blog.csdn.net/hjimce/article/details/48781693

    作者:hjimce

    对于caffe的系统一般使用linux系统,当然也有windows版本的caffe,不过如果你一开始使用了windows下面的caffe,后面学习的过程中,会经常遇到各种错误,网上下载的一些源码、模型也往往不能快速的跑起来,因为貌似caffe的官方只提供了linux版本,而且caffe在不断的快速迭代更新中,如果不使用原版的话,后面编译出现什么问题,自己怎么错的,自己都不知道。本篇博文主要讲解快速搭建caffe环境:

    电脑系统:ubuntu 14.04

    显卡:GTX 850

    在ubuntu下要完整的搭建caffe,个人感觉最难的一步就是cuda的安装了,特别是对于双显卡的电脑来说,很容易黑屏、无法登陆图形界面,这个我安装了n久,都没装成功,因为我的电脑笔记本双显卡,每次装完cuda就黑屏,网上的教程一大堆,但都中看不中用,导致我重装了二三十次的系统,最后才成功。这里为了讲caffe的安装,我们先不使用GPU,进行安装测试,因为没有GPU我们依旧可以跑caffe,只是速度比较慢而已。

    1、安装caffe所需要的依赖库

    命令:

    sudo apt-get install libatlas-base-dev
    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
    这些库要安装挺久的,请耐心等待。

    2、下载caffe。

    到github上下载caffe:https://github.com/BVLC/caffe。下载完成后,解压caffe源码包。解压后,我们打开文件,可以看到caffe的源码包如下:


    3、配置Make.config 文件。caffe文件解压后,文件夹下面有一个Makefile.config.example文件,我们需要对这个文件进行重命名为:Make.config  。也就是去掉后缀example。然后我们打开这个文件,可以看到如下内容:


    然后我们把:#CPU_ONLY:=1,那一行的注释符号去掉:CPU_ONLY:=1。这是因为我们没有安装CUDA,还不能使用gpu,所以我们把配置改为只使用cpu。

    4、编译caffe。

    方案一:

    (1)在完成Make.config配置后,我们输入命令:

    make all

    进行caffe源码编译.这一步有可能遇到如下错误:

    caffe/proto/caffe.pb.h: No such file or directory
    如果出现这个错误,那么输入命令:

    protoc src/caffe/proto/caffe.proto --cpp_out=.
    mkdir include/caffe/proto
    mv src/caffe/proto/caffe.pb.h include/caffe/proto

    然后在进行make all 就可以了

    (2)编译完成后,在安装python接口,输入命令:

    make pycaffe
    这个如果不使用python接口,调用caffe模型的话也可以不用安装,不过建议还是搞一下,就一句话的事。完事后,我们会发现caffe源码目录下,多了一个build文件,这个文件下面有个tools,打开这个文件夹:


    这个文件夹下面的工具可是个好东西啊,以后我们会经常用到这些可执行文件,最常用的就是可执行文件:caffe,我们只要调用这个工具,就可以进行训练。

    (3)接着编译test文件夹下面的源码。命令如下:

    make test
    make runtest

    采用这种方案一般没问题,不过我在使用c++调用的时候,会使用到链接库:libcaffe.so.1.0.0-rc3,这种方法编译后没有生成这个文件;经过google查找,发现采用cmake编译,才会生成libcaffe.so文件

    方案二:直接采用cmake:

    mkdir build
    cd build
    cmake ..
    make all -j8

    5、测试阶段

    安装完了,自然要测试一下能不能用咯。首先cd到caffe目录,然后输入命令:

    sh data/mnist/get_mnist.sh
    sh examples/mnist/create_mnist.sh
    vim examples/mnist/lenet_solver.prototxt

    把lenet_solver.prototxt里面的solver_mode 改为 CPU。因为我们还没装GPU,暂时只使用CPU就好了。

    然后我们运行脚本:

    ./examples/mnist/train_lenet.sh
    这个时候,如果成功的话,就会开始跑起来:


    说明:如果在使用caffe、或者编译安装caffe过程中,出现如下错误:

    CXX/LD -o .build_release/tools/convert_imageset.bin
    .build_release/lib/libcaffe.so: undefined reference tocv::imread(cv::String const&, int)'.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)'
    
    那么请修改上面的Makefile文件(不是Makefile.config):

    LIBRARIES += glog gflags protobuf leveldb snappy \
    lmdb boost_system hdf5_hl hdf5 m \
    opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
    也就是在libraries后面,加上opencv的相关库文件。

    接着就开始caffe搞起吧,推荐个caffe模型网站:https://github.com/BVLC/caffe/wiki/Model-Zoo。本来个人不是很喜欢caffe的,就是因为这个网站吸引了我,这个网站可以搞到好多caffe模型、源码,非常适合于我们学习。

    二、在Eclipse中使用编译调试caffe

    1、首先就是安装Eclipse,然后安装c++开发插件,这个可以百度搜一下,eclipse下面怎么进行c++开发。

    2.导入caffe makefile工程到eclipse (由于是英文版,下面描述也用英文,省的翻译,方便大家调试)
    (1)File→New→Project→C/C++ →Makefile Project with Existing Code.
    (2)Create a new Makefile Project from existing code
    Projectname: caffe-master
    Existing code location:/home/user/caffe-workspace/caffe-master
    Language: choose C and C++
    Toolchain:choose Linux GCC
    (3)Then click on caffe-master in Project Explorer (set Window→Open  Perspective → C/C++).

    (4)Now go File → Properties → Run/Debug settings.Click  New.., and choose C/C++ application
    (5)Fill launch configurationproperties
    ·        Arguments:
    fill   train –solver=examples/mnist/lenet_solver.prototxt
    and change working directory from default to /home/user/caffe-workspace/caffe-master(change to your own directory)

    (6)Now you can use debug caffe code: Run-> Debug

    三、C++函数调用相关路径,makefile

    CC=g++
    
    CXXFLAGS = -O2 -Wall -D__STDC_CONSTANT_MACROS 
    
    INCLUDE = -I/usr/local/cuda/include -I. -I/usr/local/cuda/include -I/home/hjimce/caffe/include/ -I/home/hjimce/caffe/src/
    
    LIBRARY = -L/usr/local/x86_64-linux-gnu/ -lprotobuf \
    					-L/usr/lib/x86_64-linux-gnu/ -lglog \
    					-L/usr/local/cuda/lib64/ -lcudart -lcublas -lcurand \
    					-L/usr/local/lib/ -lm -lpthread -lavutil -lavformat -lavcodec -lswscale -lopencv_core -lopencv_imgproc -lopencv_highgui \
    					-L/usr/lib/python2.7/config-x86_64-linux-gnu/ -lpython2.7 \
    					-L/sur/lib32/ -lrt \
    					-L../../caffe/build/lib/ -lcaffe
    
    all:
    	$(CC) $(INCLUDE) $(OBJS) testcpp.cpp -o exercise $(LIBRARY)


    windows下的caffe环境搭建


    最近在ubuntu搞了一个月的caffe,总感觉很不爽,因为ubuntn下面的c++集成开发工具,eclipse用起来没有vs爽,因为对caffe的函数名不是很熟悉,所以需要借助vs的c++助手。然后前一个月大部分也是调用pycaffe,但是最近感觉需要对caffe的c++函数比较熟悉,才能把自己的能力进一步提高,于是就开始搞起了windows 下的caffe,借助vs的强大功能,快速学习caffe。一开始采用vs2012,最后各种错误,最后改成vs2013很容易就编译成功了。

    最后推荐一个windows下caffe安装网站:http://thirdeyesqueegee.com/deepdream/2015/07/13/running-deep-dream-on-windows-with-full-cuda-acceleration/    这个包含了python的集成开发环境anaconda,caffe的全套功能。

    ************作者:hjimce   时间:2015.10.10  联系QQ:1393852684  原创文章,转载请保留原文地址、作者等信息***************

    附录:在使用pycaffe遇到如下错误

    raise ValueError('Mean shape incompatible with input shape.')
    ValueError: Mean shape incompatible with input shape.
    那么把 ./python/caffe/io.py文件夹下面的代码:

    if ms != self.inputs[in_][1:]:  
    raise ValueError('Mean shape incompatible with input shape.') 
    改成:

    if ms != self.inputs[in_][1:]:  
    print(self.inputs[in_])  
    in_shape = self.inputs[in_][1:]  
    m_min, m_max = mean.min(), mean.max()  
    normal_mean = (mean - m_min) / (m_max - m_min)  
    mean = resize_image(normal_mean.transpose((1,2,0)),  
        in_shape[1:]).transpose((2,0,1)) * \  
       (m_max - m_min) + m_min  
    #raise ValueError('Mean shape incompatible with input shape.')




    
    
    展开全文
  • Ubuntu16.04 Caffe 安装步骤记录(超详尽)

    万次阅读 多人点赞 2017-05-19 19:09:11
    历时一周终于在 ubuntu16.04 系统成功安装 caffe 并编译,网上有很多教程,但是某些步骤并没有讲解详尽,导致配置过程总是出现各种各样匪夷所思的问题,尤其对于新手而言更是欲哭无泪,在我饱受折磨后决定把安装步骤...

    历时一周终于在 ubuntu16.04 系统成功安装 caffe 并编译,网上有很多教程,但是某些步骤并没有讲解详尽,导致配置过程总是出现各种各样匪夷所思的问题,尤其对于新手而言更是欲哭无泪,在我饱受折磨后决定把安装步骤记录下来,尽量详尽清楚明白,避免后来小白重蹈覆辙。

    安装硬件: intel i5 + NVIDIA 740 M

    安装流程细分为如下10个步骤,细化步骤粒度更易避免出错:

    1、安装依赖包
    2、禁用 nouveau
    3、配置环境变量
    4、下载 CUDA 8.0
    5、安装 CUDA 8.0
    6、验证 CUDA 8.0 是否安装成功
    7、安装 cudnn
    8、安装 opencv3.1
    9、安装 caffe
    10、安装 pycaffe notebook 接口环境

    第1步 安装依赖包

    安装后续步骤或环境必需的依赖包,依次输入以下命令:

    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
    
    sudo apt-get install --no-install-recommends libboost-all-dev
    
    sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
    
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
    
    sudo apt-get install git cmake build-essential
    

    有一定几率安装失败而导致后续步骤出现问题,所以要确保以上依赖包都已安装成功,验证方法就是重新运行安装命令,如验证 git cmake build-essential是否安装成功共则再次运行以下命令:

     sudo apt-get install git cmake build-essential 
    

    界面提示如下则说明已成功安装依赖包,否则继续安装直到安装成功。

    yhao@yhao-X550VB:~$ sudo apt-get install git cmake build-essential
    正在读取软件包列表... 完成
    正在分析软件包的依赖关系树       
    正在读取状态信息... 完成       
    build-essential 已经是最新版 (12.1ubuntu2)。
    cmake 已经是最新版 (3.5.1-1ubuntu3)。
    git 已经是最新版 (1:2.7.4-0ubuntu1.1)。
    下列软件包是自动安装的并且现在不需要了:
      lib32gcc1 libc6-i386
    使用'sudo apt autoremove'来卸载它(它们)。
    升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 94 个软件包未被升级。
    

    第2步 禁用 nouveau

    安装好依赖包后需要禁用 nouveau,只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,首先需要打开该文件,通过以下命令打开:

    sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
    

    打开后发现该文件中没有任何内容,写入:

    blacklist nouveau option nouveau modeset=0 
    

    保存时命令窗口可能会出现以下提示:

    ** (gedit:4243): WARNING **: Set document metadata failed: 不支持设置属性 metadata::gedit-position
    
    

    无视此提示~,保存后关闭文件,注意此时还需执行以下命令使禁用 nouveau 真正生效:

    sudo update-initramfs -u
    

    第3步 配置环境变量

    同样使用 gedit 命令打开配置文件:

    sudo gedit ~/.bashrc
    
    

    打开后在文件最后加入以下两行内容:

    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
    
    export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 
    

    保存退出。

    第4步 下载 CUDA 8.0

    进入 https://developer.nvidia.com/cuda-downloads ,依次选择 CUDA 类型然后下载即可。
    这里写图片描述

    第5步 安装 CUDA 8.0

    第四步下载的1.4G的 CUDA中包含有 nvidia 显卡驱动,故此步骤 CUDA 的安装包括了 nvidia 显卡驱动的安装,此时注意你是否已经安装过 nvidia 显卡驱动,若无法保证已安装的 nvidia 显卡驱动一定正确,那就卸载掉之前安装的 nvidia 显卡驱动(卸载方法链接),然后开始安装 CUDA 8.0;若可以保证已安装正确的 nvidia 显卡驱动,则直接开始安装 CUDA 8.0,在安装过程中选择不再安装 nvidia 显卡驱动。

    为了方便开始安装过程的路径查找,把下载的 CUDA 安装文件移动到 HOME 路径下,然后通过 Ctrl + Alt + F1 进入文本模式,输入帐号密码登录,通过 Ctrl + Alt + F7 可返回图形化模式,在文本模式登录后首先关闭桌面服务:

    sudo service lightdm stop
    

    然后通过 Ctrl + Alt + F7 发现已无法成功返回图形化模式,说明桌面服务已成功关闭,注意此步对接下来的 nvidia 驱动安装尤为重要,必需确保桌面服务已关闭。

    Ctrl + Alt + F1 进入文本模式,然后运行 CUDA 安装文件进行安装,之前我们已经把 CUDA 安装文件移动至 HOME,直接通过 sh 命令运行安装文件即可:

    sudo sh cuda_8.0.61_375.26_linux.run --no-opengl-libs
    

    其中 cuda_8.0.61_375.26_linux.run 是我的 CUDA 安装文件名,而你需替换为自己的 CUDA 安装文件名,若此时忘记可直接通过 ls 文件查看文件名,这也是我建议把 CUDA 安装文件移动到 HOME 下的另一个原因。

    执行此命令约1分钟后会出现 0%信息,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,这里的选择对应第5步开头,若未安装则输入 “y”,若确保已安装正确驱动则输入“n”。

    剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装,此时若出现安装失败提示则可能为未关闭桌面服务或在已安装 nvidia 驱动的情况下重复再次安装 nvidia 驱动,安装完成后输入重启命令重启:

    reboot
    

    重启后登录进入系统,配置 CUDA 环境变量,与第3步相同,使用 gedit 命令打开配置文件:

    sudo gedit ~/.bashrc
    

    在该文件最后加入以下两行并保存:

    export PATH=/usr/local/cuda-8.0/bin:$PATH
    
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    

    使该配置生效:

    source ~/.bashrc
    

    第6步 验证 CUDA 8.0 是否安装成功

    分别执行以下命令:

    cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
    
    sudo make
    
    ./deviceQuery
    

    若看到类似以下信息则说明 cuda 已安装成功:

    ./deviceQuery Starting...
    
     CUDA Device Query (Runtime API) version (CUDART static linking)
    
    Detected 1 CUDA Capable device(s)
    
    Device 0: "GeForce GT 740M"
      CUDA Driver Version / Runtime Version          8.0 / 8.0
      CUDA Capability Major/Minor version number:    3.5
      Total amount of global memory:                 2004 MBytes (2100953088 bytes)
      ( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA Cores
      GPU Max Clock rate:                            1032 MHz (1.03 GHz)
      Memory Clock rate:                             800 Mhz
      Memory Bus Width:                              64-bit
      L2 Cache Size:                                 524288 bytes
      Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
      Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
      Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
      Total amount of constant memory:               65536 bytes
      Total amount of shared memory per block:       49152 bytes
      Total number of registers available per block: 65536
      Warp size:                                     32
      Maximum number of threads per multiprocessor:  2048
      Maximum number of threads per block:           1024
      Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
      Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
      Maximum memory pitch:                          2147483647 bytes
      Texture alignment:                             512 bytes
      Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
      Run time limit on kernels:                     No
      Integrated GPU sharing Host Memory:            No
      Support host page-locked memory mapping:       Yes
      Alignment requirement for Surfaces:            Yes
      Device has ECC support:                        Disabled
      Device supports Unified Addressing (UVA):      Yes
      Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
      Compute Mode:
         < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
    
    deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GT 740M
    Result = PASS
    
    

    第7步 安装 cudnn

    登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应 cuda 版本且 linux 系统的 cudnn 压缩包,注意官网下载 cudnn 需要注册帐号并登录,不想注册的可从我的网盘下载:https://pan.baidu.com/s/1c2xPVzy

    这里写图片描述

    下载完成后解压,得到一个 cudn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:

    sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
    

    然后命令行进入 cudn/lib64 路径下,运行以下命令:

    sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
    cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
    sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成软衔接
    sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
    

    这里需要注意第三行命令,网上有人的第三行命令为:

    sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成软衔接
    

    起初我执行的也是上条链接 libcudnn.so.5.1.5 的命令,但是后面编译caffe时出错,报错内容为 /usr/bin/ld: 找不到 -lcudnn,所以这里需要先查看一下自己应该链接的是 libcudnn.so.5.1.10 还是 libcudnn.so.5.1.5 ,查看方法为下:

    locate libcudnn.so
    

    我执行完后显示如下:

    yhao@yhao-X550VB:~$ locate libcudnn.so
    /home/yhao/.local/share/Trash/files/libcudnn.so
    /home/yhao/.local/share/Trash/files/libcudnn.so.5
    /home/yhao/.local/share/Trash/files/libcudnn.so.5.1.10
    /home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so
    /home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so.5
    /home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so.5.1.10
    /home/yhao/.local/share/Trash/info/libcudnn.so.5.1.10.trashinfo
    /home/yhao/.local/share/Trash/info/libcudnn.so.5.trashinfo
    /home/yhao/.local/share/Trash/info/libcudnn.so.trashinfo
    /home/yhao/cuda/lib64/libcudnn.so
    /home/yhao/cuda/lib64/libcudnn.so.5
    /home/yhao/cuda/lib64/libcudnn.so.5.1.10
    /usr/local/lib/libcudnn.so
    /usr/local/lib/libcudnn.so.5
    

    可以看到我的文件是 libcudnn.so.5.1.10 ,并没有 libcudnn.so.5.1.5,所以第三行命令我链接的是 libcudnn.so.5.1.10 ,这里第三行链接命令视你的查看结果而定。

    安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:

    yhao@yhao-X550VB:~$ nvcc -V
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2016 NVIDIA Corporation
    Built on Tue_Jan_10_13:22:03_CST_2017
    Cuda compilation tools, release 8.0, V8.0.61
    

    第8步 安装 opencv3.1

    进入官网 : http://opencv.org/releases.html , 选择 3.1.0 版本的 source , 下载 opencv-3.1.0.zip
    这里写图片描述

    解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.1.0 目录下,执行:

    mkdir build # 创建编译的文件目录
    
    cd build
    
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
    
    make -j8  #编译
    
    

    在执行 make -j8 命令编译到 92% 时可能会出现以下错误:

    modules/cudalegacy/src/graphcuts.cpp:120:54: error: 
    ‘NppiGraphcutState’ has not been declared
    typedef NppStatus (*init_func_t)(NppiSize oSize, 
    NppiGraphcutState** ppState, Npp8u* pDeviceMem);
    

    这是由于opecv3.1与cuda8.0不兼容导致的。解决办法:

    修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件内容,如图:
    这里写图片描述

    编译成功后安装:

    sudo make install #安装
    

    安装完成后通过查看 opencv 版本验证是否安装成功:

    pkg-config --modversion opencv  
    

    第9步 安装 caffe

    首先在你要安装的路径下 clone :

    git clone https://github.com/BVLC/caffe.git
    

    进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :

    sudo cp Makefile.config.example Makefile.config
    

    复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

    然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:

    sudo gedit Makefile.config
    

    修改 Makefile.config 文件内容:

    1.应用 cudnn

    将
    #USE_CUDNN := 1
    修改成: 
    USE_CUDNN := 1
    

    2.应用 opencv 版本

    将
    #OPENCV_VERSION := 3 
    修改为: 
    OPENCV_VERSION := 3
    

    3.使用 python 接口

    将
    #WITH_PYTHON_LAYER := 1 
    修改为 
    WITH_PYTHON_LAYER := 1
    

    4.修改 python 路径

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
    修改为: 
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial       
    

    这里贴出 我的Makefile.config文件 方便大家参考

    然后修改 caffe 目录下的 Makefile 文件:

    将:
    NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
    替换为:
    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
    
    将:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
    改为:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
    

    然后修改 /usr/local/cuda/include/host_config.h 文件 :

    将
    #error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
    改为
    //#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
    

    OK ,可以开始编译了,在 caffe 目录下执行 :

    make all -j8
    

    这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。

    编译成功后可运行测试:

    sudo make runtest -j8
    

    这里写图片描述

    如果显示结果为上图所示,则表示 caffe 已经成功安装。

    10、安装 pycaffe notebook 接口环境

    在上一步成功安装 caffe 之后,就可以通过 caffe 去做训练数据集或者预测各种相关的事了,只不过需要在命令行下通过 caffe 命令进行操作,而这一步 pycaffe 的安装以及 notebook 环境配置只是为了更方便的去使用 caffe ,实际上大多数都是通过 python 来操作 caffe 的,而 notebook 使用浏览器作为界面,可以更方便的编写和执行 python 代码。

    首先编译 pycaffe :

    cd caffe
    
    sudo make pycaffe -j8
    

    以下是我编译 pycaffe 时出现的错误:

    python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录
    

    解决方法:

    sudo apt-get install python-numpy
    

    此外也可能是由于 Makefile.config 文件中 python 路径设置错误出现的错误,可根据上一步检查一下,也可能出现别的错误,百度谷歌之~

    编译 pycaffe 成功后,验证一下是否可以在 python 中导入 caffe 包,首先进入 python 环境:

    python
    

    然后导入 caffe :

    >>> import caffe
    

    若不报错则表示 caffe 的 python 接口已正确编译,但是应该不会那么顺利,以下是我导入 caffe 时出现的错误:

    错误1:

    File "<stdin>", line 1, in <module>   ImportError: No module named caffe
    

    解决方法:

    sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc
    
    source ~/.bashrc
    

    错误2:

    ImportError: No module named skimage.io
    

    解决方法:

    pip install -U scikit-image #若没有安装pip: sudo apt install python-pip
    

    ok,最后一步,配置notebook环境

    首先要安装python接口依赖库,在caffe根目录的python文件夹下,有一个requirements.txt的清单文件,上面列出了需要的依赖库,按照这个清单安装就可以了。

    在安装scipy库的时候,需要fortran编译器(gfortran),如果没有这个编译器就会报错,因此,我们可以先安装一下。

    首先进入 caffe/python 目录下,执行安装代码:

    sudo apt-get install gfortran
    
    for req in $(cat requirements.txt); do sudo pip install $req; done
    

    安装完成以后执行:

    sudo pip install -r requirements.txt
    

    就会看到,安装成功的,都会显示Requirement already satisfied, 没有安装成功的,会继续安装。

    然后安装 jupyter :

    sudo pip install jupyter
    

    安装完成后运行 notebook :

    jupyter notebook
    
    或
    
    ipython notebook
    

    就会在浏览器中打开notebook, 点击右上角的New-python2, 就可以新建一个网页一样的文件,扩展名为ipynb。在这个网页上,我们就可以像在命令行下面一样运行python代码了。输入代码后,按shift+enter运行,更多的快捷键,可点击上方的help-Keyboard shortcuts查看,或者先按esc退出编辑状态,再按h键查看。

    这里写图片描述

    为心仪公司折腾DL许久然而并无缘~

    加油。

    参考文章:

    http://www.cnblogs.com/denny402/p/5088399.html

    http://blog.csdn.net/sunpeng19960715/article/details/54835148

    关注公众号,Get 更多知识点
    展开全文
  • Caffe的简介、依赖、框架

    万次阅读 2018-08-14 16:09:50
    1. Caffe Caffe是一个以表达式、速度和模块化为核心的深度学习框架,由BLVC(Berkeley Vision and Learning Center)和社区贡献者开发。项目创建者是贾扬清。 2. Feature Expressive architecture 具有表现力的...

    1. 官网介绍

    1. Caffe

    Caffe是一个以表达式、速度和模块化为核心的深度学习框架,由BLVC(Berkeley Vision and Learning Center)和社区贡献者开发。项目创建者是贾扬清。

    2. Feature

    • Expressive architecture

    具有表现力的结构鼓励应用和创新。模型及优化是通过配置定义的,而不是使用硬编码的方式。可以在GPU和CPU之间无缝切换,可以用GPU训练,然后部署到集群或移动设备上。

    • Extensible code

    具有扩展性的代码促进了Caffe的积极发展。Caffe第一年fork超过一千次,有许多有意义的贡献和反馈。由于众多的贡献者,Caffe框架跟踪并实现了当前最新的代码和模型。

    • Speed

    快速性使Caffe适合研究实验和工业开发。Caffe在单个的NVIDIA K40 GPU上每天能处理6千万张图片。识别时速度为1ms/张,训练时速度为4ms/张,BLVC相信Caffe具有最快的卷积神经网络实现。

    • Community

    Caffe已经支持学术研究项目,启动原型,甚至支持大规模视觉、语音和多媒体的工业应用。

    3. Document

    一个介绍Caffe的PPT

    实践指导和框架参考

    安装,已经在Ubuntu,Red Hat,OS X上测试过了。

    模型规范及已经训练的模型

    API文档,通过代码中的注释生成的。

    4. Demo

    在ImageNet上训练和测试CaffeNet

    Yann LeCun的手写字符识别,训练和测试。

    CIFAR-10数据集上Caffe的训练与测试。

    ImageNet上训练的CaffeNet在Flickr Style数据集上的调优。

    用Caffe工具提取CaffeNet和AlexNet特征。

    用底层API进行图像的简单分类

    运行在Flask web服务器上的图像分类Demo

    在MNIST数据集上训练和测试siamese网络。

    5. NoteBook Demo

    通过预先训练的模型进行图像实时识别,对神经网络的每层特征和参数进行可视化,可以了解可视化的神经网络接口。

    使用Python定义、训练、测试经典的LeNet。

    在新数据集上对ImageNet上训练的CaffeNet进行调优。

    使用Caffe作为一般的SGD优化器在非图像的HDF5数据上训练逻辑回归。

    使用Python数据层在PASCAL VOC上进行多标签分类。

    怎样修改神经网络,手动改变模型参数来进行定制化使用。

    在Python中使用预先训练的模型作为检测器来进行目标检测。

    提取特征、绘制Siamese网络嵌入。

    6. Philosophy

    • Expression

    模型和优化都是通过纯文本模式定义的而不是通过代码的方式。

    • Speed

    对于研究和工业而言,在最新的模型和大规模数据上具有同样的速度是关键。

    • Modularity

    新任务及设置要求灵活性和可扩展性

    • Openness

    科学和应用进展需要通用的代码、参考模型和再现性。

    • Community

    学术研究、启动原型和工业应用通过在BSD-2项目中的联合讨论和开发实现所有共享。

    7. Tour

    • Net,Lays and Blobs

    Caffe模型的结构组成

    • Forward/Backward

    分层结构模型的基本计算

    • Loss

    通过损失函数定义要学习的任务

    • Solver

    求解程序协调模型优化

    • Layer Catalogue

    这一层是建模和计算的基本单元,Caffe的目录包含最新模型的层

    • Interfaces

    命令行,Python,MATLAB

    • Data

    怎样将模型输入变为Caffe能处理的数据

    • Caffeinated Convolution

    Caffe怎样计算卷积

    2. 普通介绍

    1. Caffe介绍

    在深度学习领域,Caffe框架是人们无法绕过的一座山。Caffe是一个用C++编写的深度学习框架,作者是UC Berkeley博士贾扬清,Caffe。由于Caffe清晰、高效,因此在深度学习中被广泛使用,用户逐渐地也形成了一个开放的社区,一些重要的研究成果(主要是各种模型)被引入到了Caffe中,例如著名的AlexNet。 
    Caffe无论在结构、性能上,还是在代码质量上,都是一款非常出色的开源框架。它将深度学习的每一个细节都原原本本地展现出来,大大降低了人们学习、研究和开发的难度。

    Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口。Caffe的清晰性表现在网络结构与参数都独立于代码,用户只要以普通文本(但需遵循一定的简单格式)就可以定义好自己的神经网络,并按自己的需要进行调整。而高效性则体现在对CUDA的支持,GPU 运算能极大地提高图像处理的速度,同时Caffe提供了在CPU模式和GPU模式之间的无缝切换。

    2. Caffe特点

    • 上手快:模型与相应优化都是以文本形式而非代码形式给出。Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。

    • 速度快:能够运行最棒的模型与海量的数据。Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.

    • 模块化:方便扩展到新的任务和设置上。可以使用Caffe提供的各层类型来定义自己的模型。

    • 开放性:公开的代码和参考模型用于再现。

    • 社区好:可以通过开源社区和Github参与讨论和开发。

    参考资料:

    1. Caffe官网

    2. http://www.zmonster.me/2015/07/21/caffe-base-usage.html

    3. http://www.cnblogs.com/zdz8207/p/DeepLearning-Caffe.html



    Caffe是一个开源的深度学习框架,其实现依赖于许多其它的库,下面将分别介绍Caffe所需的依赖库。

    1. OpenCV

    OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。

    2. Boost

    Boost C++库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。Boost作为一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过相比于STL,Boost更加实用。STL集中在算法部分,而Boost包含了不少工具类,可以完成比较具体的工作。Boost主要包含以下几个大类:字符串及文本处理、容器、迭代器(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。

    3. CUDA

    CUDA(Compute Unified Device Architecture,统一计算架构)是由NVIDIA所推出的一种集成技术,是NVIDIA推出的运算平台。CUDA是由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动。开发库是基于CUDA技术所提供的应用开发库。运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。

    4. BLAS

    BLAS(Basic Linear Algebra Subprograms,基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。在高性能计算领域,BLAS被广泛使用。Caffe推荐的BLAS(Basic Linear Algebra Subprograms)有三个选择ATLAS,Intel MKL,OpenBLAS。其中ATLAS是caffe是默认选择的,其开源免费,如果没有安装CUDA的不太推荐使用,因为对CPU多线程的支持不太好;Intel MKL是商业库要收费,学生可申请试用,贾扬清安装的是MKL,估计效果应该是最好的;OpenBLAS开源免费,支持CPU多线程。

    5. LevelDB

    LevelDB是一个由Google公司所研发的键/值对(Key/Value Pair)嵌入式数据库管理系统编程库,以开源的BSD许可证发布,是Caffe支持的数据格式之一。LevelDb有如下一些特点:

    • 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。

    • 其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数,LevleDb会按照用户定义的比较函数依序存储这些记录。

    • 再次,像大多数KV系统一样,LevelDb的操作接口很简单,基本操作包括写记录,读记录以及删除记录。也支持针对多条操作的原子批量操作。

    • 另外,LevelDb支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。

    6. LMDB

    LMDB是一种小型的键值对数据库,具有一些非常优异的特性:

    • 有序的映射接口(键一直是按字典排序的)

    • 读写事务:读不会锁住写,写也不会锁住读

    • 读取数据代价很低

    • 内存映射,允许零拷贝查找和迭代

    • 维护不需要外部进程或后台线程

    虽然LMDB的内存消耗是LevelDB的1.1倍,但是LMDB的速度比LevelDB快10%至15%,更重要的是LMDB允许多种训练模型同时读取同一组数据集。因此LMDB取代了LevelDB成为Caffe默认的数据集生成格式。

    7. GLog

    Google的Glog是一个应用程序的日志库。它提供基于C++风格的流的日志API,以及各种辅助的宏。打印日志只需以流的形式传给 LOG(level) 。

    8. GFlags

    GFlags是Google的一个开源的处理命令行参数的库,使用C++开发,具备Python接口,可以替代getopt。GFlags使用起来比getopt方便,但是不支持参数的简写。

    9. Protobuff

    Google Protocol Buffer(简称Protobuf) 是Google公司内部的混合语言数据标准,它提供了一种灵活、高效、自动序列化结构数据的机制,但是比XML更小、更快、更简单。仅需要自定义一次你所需的数据格式,然后用户就可以使用Protobuf编译器自动生成各种语言的源码,方便的读写用户自定义的格式化的数据。与语言无关,与平台无关,还可以在不破坏原数据格式的基础上,依据老的数据格式,更新现有的数据格式。它们用于RPC 系统和持续数据存储系统。Protobuf是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或RPC数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了C++、Java、Python三种语言的API。

    10. HDF5

    HDF(英语:Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF最早由NCSA开发,目前在非盈利组织HDF小组维护下继续发展。当前流行的版本是HDF5。 
    HDF5文件包含两种基本数据对象:

    • 群组(group):类似文件夹,可以包含多个数据集或下级群组。

    • 数据集(dataset):数据内容,可以是多维数组,也可以是更复杂的数据类型。

    群组和数据集都支持元数据,用户可以自定义其属性,提供附加信息。HDF现在被众多商业与非商业平台支持,包括Java,MATLAB/Scilab,Octave,IDL,Python和R。

    11. Snappy

    Snappy(以前称Zippy)是Google基于LZ77的思路用C++语言编写的快速数据压缩与解压程序库,并在2011年开源。它的目标并非最大压缩率或与其他压缩程序库的兼容性,而是非常高的速度和合理的压缩率。LevelDB需要Snappy的支持。

     



    Caffe的设计

    根据贾扬清的分享整理

    Caffe遵循了神经网络的一个假设:所有的计算都是以layer形式表示的,layer的作用就是根据输入数据,输出一些计算以后的结果。以卷积为例,就是输入一幅图像,然后与这一层的参数(filter)进行卷积运算,然后输出卷积的结果。每一个layer需要进行两种运算:1.forward,从输入计算输出;2.backward根据上面的梯度(gradient)来计算相对于输入的梯度。在每个layer都实现了这两个函数以后,我们可以将很多层连接成一个网络,这个网络做的事情就是输入我们的数据(图像或者语音或者whatever),然后来计算我们需要的输出(比如说识别的label)。在训练时,我们可以根据已有的label来计算loss和gradient,然后用gradient来update网络的参数。这个就是Caffe的一个基本流程!

    Caffe主要结构

    Caffe代码本身非常模块化,主要由4部分组成Blob,Layer,Net和Solver。

    • Blob

    Blob主要用来表示网络中的数据,包括训练数据,网络各层自身的参数,网络之间传递的数据都是通过Blob来实现的,同时Blob数据也支持在CPU与GPU上存储,能够在两者之间做同步。

    • Layer

    Layer是对神经网络中各种层的一个抽象,包括卷积层和下采样层,还有全连接层和各种激活函数层等等。同时每种Layer都实现了前向传播和反向传播,并通过Blob来传递数据。

    • Net

    Net是对整个神经网络的表示,由各种Layer前后连接组合而成,也是我们要构建的网络模型。

    • Solver

    Solver定义了针对Net网络模型的求解方法,记录神经网络的训练过程,保存神经网络模型参数,中断并恢复网络的训练过程。自定义Solver能够实现不同的神经网络求解方式。

    Caffe整体架构

    Caffe的架构与其它的深度学习框架稍微不同,它没有根据算法实现过程的方式来进行编码,而是以系统级的抽象作为整体架构,逐层的封装实现细节,使得上层的架构变得很清晰。Caffe的整体架构如下:

    1. SyncedMem

    这个类的主要功能是封装CPU和GPU的数据交互操作。一般来说,数据的流动形式都是:硬盘->CPU内存->GPU内存->CPU内存->(硬盘),所以在写代码的过程中经常会写CPU/GPU之间数据传输的代码,同时还要维护CPU和GPU两个处理端的内存指针。这些事情处理起来不会很难,但是会很繁琐。因此SyncedMem的出现就是把CPU/GPU的数据传输操作封装起来,只需要调用简单的接口就可以获得两个处理端同步后的数据。

    2. Blob

    Blob是用于存储数据的对象,在Caffe中各种数据(图像输入、模型参数)都是以Blob的形式在网络中传输的,Blob提供统一的存储操作接口,可用来保存训练数据、模型参数等,同时Blob还能在CPU和GPU之间进行同步以支持CPU/GPU的混合运算。 
    这个类做了两个封装:一个是操作数据的封装,使用Blob可以操纵高维的数据,快速访问其中的数据,变换数据的维度等;另一个是对原始数据和更新量的封装,每一个Blob中都有data和diff两个数据指针,data用于存储原始数据,diff用于存储反向传播(Backpropagation)的梯度更新值。Blob使用了SyncedMem,这样便于访问不同的处理端。Blob基本实现了整个Caffe数据结构部分的封装,在Net类中可以看到所有的前后向数据和参数都用Blob来表示就足够了。数据的抽象到这个就可以了,接下来作层级的抽象。神经网络的前后向计算可以做到层与层之间完全独立,只要每个层按照一定的接口规则实现,就可以确保整个网络的正确性。

    3. Layer

    Layer是网络Net的基本单元,也是Caffe中能在外部进行调整的最小网络结构单元,每个Layer都有输入Blob和输出Blob。Layer(层)是Caffe中最庞大最繁杂的模块,它是神经网络的基本计算单元。由于Caffe强调模块化设计,因此只允许每个layer完成一类特定的计算,例如convolution操作、pooling、非线性变换、内积运算,以及数据加载、归一化和损失计算等。Caffe中layer的种类有很多,具体的种类及功能请看官方文档。在创建一个Caffe模型的时候,也是以Layer为基础进行的。Layer是一个父类,它的下面还有各种实现特定功能的子类,例如data_layer,conv_layer,loss_layer等。Layer是通过LayFactory来创建的。

    4. Net

    Net是一个完整的深度网络,包含输入层、隐藏层、输出层,在Caffe中一般是一个卷积神经网络(Convolution Neural Networ,CNN)。通过定义不同类型的Layer,并用Blob将不同的Layer连接起来,就能产生一个Net。Net将数据Blob和层Layer组合起来做进一步的封装,对外提供了初始化和前后传播的接口,使得整体看上去和一个层的功能类似,但内部的组合可以是多种多样的。值得一提的是,每一层的输入输出数据统一保存在Net中,同时每个层内的参数指针也保存在Net中,不同的层可以通过WeightShare共享相同的参数,因此可以通过配置来实现多个神经网络层之间共享参数的功能。一个Net由多个Layer组成。一个典型的网络从data layer(从磁盘中载入数据)出发到loss layer结束。

    5. Solver

    有了Net就可以进行神经网络的前后向传播计算了,但是还缺少神经网络的训练和预测功能,Solver类进一步封装了训练和预测相关的一些功能。它还提供了两个接口:一个是更新参数的接口,继承Solver可以实现不同的参数更新方法,如Momentum,Nesterov,Adagrad等,因此可以使用不同的优化算法。另一个接口是训练过程中每一轮特定状态下的可注入的一些回调函数,在代码中这个回调点的直接使用者就是多GPU训练算法。Solver定义了针对Net网络模型的求解方法,记录网络的训练过程,保存网络模型参数,中断并恢复网络的训练过程。自定义Solver能够实现不同的神经网络求解方式。阅读Solver的代码可以了解网络的求解优化过程。Solver是一个父类,它下面还有实现不同优化方法的子类,例如sgd_solver,adagrad_sovler等,Solver是通过SolverFactory来创建的。

    6. Proto

    caffe.proto位于…/src/caffe/proto目录下,在这个文件夹下还有一个.pb.cc和一个.pb.h文件,这两个文件都是由caffe.proto编译而来的。 在caffe.proto中定义了很多结构化数据,包括: 
    BlobProto、Datum、FillerParameter、NetParameter、SolverParameter、SolverState、LayerParameter、ConcatParameter、ConvolutionParameter、DataParameter、DropoutParameter、HDF5DataParameter、HDF5OutputParameter、ImageDataParameter、InfogainLossParameter、InnerProductParameter、LRNParameter、MemoryDataParameter、PoolingParameter、PowerParameter、WindowDataParameter、V0LayerParameter。

    7. IO

    除了上面的东西之外,还需要输入数据和参数。DataReader和DataTransformer帮助准备输入数据,Filler对参数进行初始化,一些Snapshot方法可以对模型进行持久化。

    参考资料:

    1. https://zhuanlan.zhihu.com/p/21796890
    展开全文
  • Caffe的各个版本简介

    千次阅读 2019-06-03 17:47:35
    Tensorflow和Caffe是机器学习初学者常用的2种深度学习框架。相对于Tensorflow有简单的python pip一键安装包,Caffe的安装更考验开发者的计算机编译水平,需要自己下载源码编译。尽管caffe的配置教程网上很多,但是...
  • caffe入门学习

    万次阅读 多人点赞 2015-12-29 16:53:49
    转载自:深度学习(六)caffe入门学习 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/hjimce/article/details/48933813 本文主要讲解caffe的整个使用流程,适用于初级入门caffe,通过学习本...
  • 什么是caffe

    万次阅读 2017-08-20 19:24:56
    Caffe的全称应该是Convolutional Architecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,它是开源的,核心语言是C++,它支持命令行、Python和Matlab接口,它既可以在CPU上运行也可以在GPU上...
  • Caffe 框架

    2019-11-03 22:09:02
    Caffe 框架 都是C++写的,提供了Python 和 MATLAB 接口,效果好 Caffe 包含的部分 Blob:在卷积时把Data,label 放在这个模块里 layer:每个层都是一个layer Net:所有的层加起来就是Net 优点 不写代码可以把所有的事情...
  • Caffe 深度学习框架上手教程

    万次阅读 2016-01-04 11:09:12
    转载自: Caffe 深度学习框架上手教程 - OPEN 开发经验库 ... ...Caffe的优势Caffe的网络定义数据及其导数以blobs的形式在层间...Caffe的各层定义训练网络安装了CUDA之后,依次按照Caffe官网安装指南安装BLAS、OpenCV
  • 一文了解caffe框架

    千次阅读 多人点赞 2019-08-13 16:10:38
    caffe 框架介绍什么是caffeCafee的特点CNN框架:AlexNet数据层(data_layer)数据传递(blob)卷积层(convolution)受限线性单元(RELU)池化层(POOLING)局部响应归一化层(LRN)全连接层(INNER_PRODUCT)...
  • Caffe 框架介绍

    万次阅读 2016-09-20 14:24:00
    1.Caffe是一种开源软件框架,内部提供了一套基本的编程框架,或者说一个模板框架,用以实现GPU并行架构下的深度卷积神经网络,Deep Learning等算法,我们可以按照框架定义各种各样的卷积神经网络的结构,并且可以再...
  • 他把他之前安装和搭建caffe框架的过程全部记录下来了写成文档了,小菜是按照他caffe学习笔记一步一步安装的,让小菜少走了许多弯路,不过小菜在安装的额过程中也出现了许多错误,小菜参考了一个大牛的博客,是博客园...
  • 深度学习caffe框架

    2016-05-11 09:38:29
    深度学习caffe框架
  • Caffe框架初步理解

    万次阅读 2017-09-04 00:30:33
    当前最火无非就是深度学习了。搞了大半年的机器人相关视觉东西,用的最多的也是Caffe。...这么说吧!这里我们把Caffe比作一个汽车...那么有的人要问了这和深度学习框架Caffe有个毛的联系啊???!!!(ps:黑人问号脸)
  • 基于caffe框架复现yolov3目标检测

    万次阅读 多人点赞 2018-06-15 10:03:11
    或许是因为caffe框架逐渐没落了么?没办法,只要自己动手丰衣足食了!过程有点麻烦。。。。。。。。。。。。。。。。。   非常感谢大家的提问,最近很忙几乎没有回复,但是我把问题都总结了一下,我都更新到了...
  • Caffe框架-入门浅谈及碰到的坑

    千次阅读 2019-05-31 11:43:27
    Caffe学习主要围绕:数据、deploy.prototxt文件、***.caffemodel文件、solver.prototxt文件、训练脚本文件 数据 数据层有多种格式,可参考:https://www.cnblogs.com/denny402/p/5070928.html 目前我所使用的是...
  • Caffe 框架理解

    千次阅读 2019-04-24 11:52:24
    Caffe是开源的深度学习框架,理解Caffe源代码可以加深对深度学习训练、推理的理解。 Caffe的输入输出: 输入文件: Solver.txt 在solver.txt中定义了一系列的超参数:网络,学习率,momentum,权重衰减,iter...
  • Caffe框架

    千次阅读 2018-10-12 17:19:20
    一、Caffe是什么? 一个卷积神经网络框架,内部提供了一套基本编程框架,以实现GPU并行架构下的深度学习算法。存在缺陷:只能使用卷积网络,基于CNN模型上进行。与Tensorflow框架区别:可以支持更多DP算法。 二、...
  • caffe虽然已经安装了快一个月了,但是caffe使用进展比较缓慢,果然如刘老师说的那样,搭建起来caffe框架环境比较简单,但是完整的从数据准备->模型训练->调参数->合理结果需要一个比较长的过程,这个过程中你需要对...
  • 最近在研究caffe,前前后后差不多快一周了,论文看得比较少,直接上手来做的,期间遇到无数问题,大大小小的无数问题,不过通过上网,看别人的博客,几乎踩了很多大坑,这里给大家总结一下,希望后续同样做深度学习...
  • Yolov3转化Caffe框架详解

    万次阅读 多人点赞 2018-08-26 21:32:17
    前些日子因工程需求,需要将yolov3从基于darknet转化为基于Caffe框架,过程中踩了一些坑,特在此记录一下。 1.Yolov3的网络结构 想要转化为Caffe框架,就要先了解yolov3的网络结构,如下图。  如果有运行过...
  • 1、系统环境 系统:windows7 x64 gpu:quadro p620 cuda:9.0 cudnn:9.0-windows7-x64-v7 ...vs2015+cuda9.0+cudnn9.0+caffe+Anaconda3 3、安装步骤 cuda安装教程:https://blog.csdn.net/u011609063/...
  • 初次安装caffe,耗费苦心终于安装成功,下面总结一下自己遇到的问题以及解决的方法,小伙伴结合自己情况拿来参考。 前期准备:1,VS2013,2,Windows版caffe。无GPU的情况下不需要下载cuda和cudnn,配置过程中没有...
  • 1.目的:介绍caffemodel里面记录的信息。我们大概知道里面记录了模型的参数。 针对tensoeflow训练所得的结果,我们来看一下我们得到下面的文件         1.有一个checkpoint,这是一个训练结果的索引,...
  • caffe框架搭建:win10+matlab2015a+VS2013

    千次阅读 2016-11-30 15:26:49
    caffe框架搭建:win10+matlab2015a+VS2013 1、安装过程参考如下: http://doc.okbase.net/hlwfirst/archive/193429.html http://www.cnblogs.com/alcohol/p/caffe-windows.html2、在配置CommonSettings.props属性...
  • 基于Caffe框架扩展自定义层

    千次阅读 2018-07-20 23:57:35
    caffe 自定义层/添加自己的损失函数 Developing new layers
  • tensorflow caffe框架对比总结

    千次阅读 2019-04-15 17:02:11
    支持语言 tensorflow: caffe: tensorflow: caffe: tensorflow: caffe
  • Caffe框架window上编译 本次主要是在windows10++vs2015+python3.5+cuda8.0下安装caffe框架,默认已经安装好了以上的软件。(一定要先安装好这些软件,如:python不在这之前安装,编译时就会发生找到不匹配的python...
  • 在之前的Caffe框架使用中,只是单纯的会把别人deploy.prototxt, train.prototxt,solver.prototxt拿来用,制作数据集跑一跑,稍微有一点变化,例如有的网络github上只给一个deploy.prototxt文件,或者是像这样还给...

空空如也

1 2 3 4 5 ... 20
收藏数 75,119
精华内容 30,047
关键字:

caffe