Caffe 全称为 Convolutional Architecture for Fast Feature Embedding,是一个被广泛使用的开源深度学习框架(在 TensorFlow 出现之前一直是深度学习领域 GitHub star 最多的项目),目前由伯克利视觉学中心(Berkeley Vision and Learning Center,BVLC)进行维护。Caffe 的创始人是加州大学伯克利的 Ph.D.贾扬清,他同时也是TensorFlow的作者之一,曾工作于 MSRA、NEC 和 Google Brain,目前就职于 Facebook FAIR 实验室。Caffe 的主要优势包括如下几点。

  • 容易上手,网络结构都是以配置文件形式定义,不需要用代码设计网络。

  • 训练速度快,能够训练 state-of-the-art 的模型与大规模的数据。

  • 组件模块化,可以方便地拓展到新的模型和学习任务上。

Caffe 的核心概念是 Layer,每一个神经网络的模块都是一个 Layer。Layer 接收输入数据,同时经过内部计算产生输出数据。设计网络结构时,只需要把各个 Layer 拼接在一起构成完整的网络(通过写 protobuf 配置文件定义)。比如卷积的 Layer,它的输入就是图片的全部像素点,内部进行的操作是各种像素值与 Layer 参数的 convolution 操作,最后输出的是所有卷积核 filter 的结果。每一个 Layer 需要定义两种运算,一种是正向(forward)的运算,即从输入数据计算输出结果,也就是模型的预测过程;另一种是反向(backward)的运算,从输出端的 gradient 求解相对于输入的 gradient,即反向传播算法,这部分也就是模型的训练过程。实现新 Layer 时,需要将正向和反向两种计算过程的函数都实现,这部分计算需要用户自己写 C++或者 CUDA (当需要运行在 GPU 时)代码,对普通用户来说还是非常难上手的。正如它的名字 Convolutional Architecture for Fast Feature Embedding 所描述的,Caffe 最开始设计时的目标只针对于图像,没有考虑文本、语音或者时间序列的数据,因此 Caffe 对卷积神经网络的支持非常好,但对时间序列 RNN、LSTM 等支持得不是特别充分。同时,基于 Layer 的模式也对 RNN 不是非常友好,定义 RNN 结构时比较麻烦。在模型结构非常复杂时,可能需要写非常冗长的配置文件才能设计好网络,而且阅读时也比较费力。

  Caffe 的一大优势是拥有大量的训练好的经典模型(AlexNet、VGG、Inception)乃至其他 state-of-the-art (ResNet等)的模型,收藏在它的 Model Zoo (http://github.com/BVLC/ caffe/wiki/Model-Zoo)。因为知名度较高,Caffe 被广泛地应用于前沿的工业界和学术界,许多提供源码的深度学习的论文都是使用 Caffe 来实现其模型的。在计算机视觉领域 Caffe 应用尤其多,可以用来做人脸识别、图片分类、位置检测、目标追踪等。虽然 Caffe 主要是面向学术圈和研究者的,但它的程序运行非常稳定,代码质量比较高,所以也很适合对稳定性要求严格的生产环境,可以算是第一个主流的工业级深度学习框架。因为 Caffe 的底层是基于 C++的,因此可以在各种硬件环境编译并具有良好的移植性,支持 Linux、Mac 和 Windows 系统,也可以编译部署到移动设备系统如 Android 和 iOS 上。和其他主流深度学习库类似,Caffe 也提供了 Python 语言接口 pycaffe,在接触新任务,设计新网络时可以使用其 Python 接口简化操作。不过,通常用户还是使用 Protobuf 配置文件定义神经网络结构,再使用 command line 进行训练或者预测。Caffe 的配置文件是一个 JSON 类型的 .prototxt 文件,其中使用许多顺序连接的 Layer 来描述神经网络结构。Caffe 的二进制可执行程序会提取这些 .prototxt 文件并按其定义来训练神经网络。理论上,Caffe 的用户可以完全不写代码,只是定义网络结构就可以完成模型训练了。Caffe 完成训练之后,用户可以把模型文件打包制作成简单易用的接口,比如可以封装成 Python 或 MATLAB 的 API 。不过在 .prototxt 文件内部设计网络节构可能会比较受限,没有像 TensorFlow 或者 Keras 那样在 Python 中设计网络结构方便、自由。更重要的是,Caffe 的配置文件不能用编程的方式调整超参数,也没有提供像 Scikit-learn 那样好用的 estimator 可以方便地进行交叉验证、超参数的 Grid Search 等操作。

  Caffe 在 GPU 上训练的性能很好(使用单块 GTX 1080 训练 AlexNet 时一天可以训练上百万张图片),但是目前仅支持单机多 GPU 的训练,没有原生支持分布式的训练。庆幸的是,现在有很多第三方的支持,比如雅虎开源的 CaffeOnSpark,可以借助 Spark 的分布式框架实现 Caffe 的大规模分布式训练。

官方网址:http://caffe.berkeleyvision.org/

GitHub:http://github.com/BVLC/caffe

开源深度学习架构Caffe的更多相关文章

  1. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...

  2. GitHub 上 57 款最流行的开源深度学习项目

    转载:https://www.oschina.net/news/79500/57-most-popular-deep-learning-project-at-github GitHub 上 57 款最 ...

  3. GitHub 上 57 款最流行的开源深度学习项目【转】

    GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...

  4. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  5. 推荐GitHub上10 个开源深度学习框架

    推荐GitHub上10 个开源深度学习框架   日前,Google 开源了 TensorFlow(GitHub),此举在深度学习领域影响巨大,因为 Google 在人工智能领域的研发成绩斐然,有着雄厚 ...

  6. Computational Network Toolkit (CNTK) 是微软出品的开源深度学习工具包

    Computational Network Toolkit (CNTK) 是微软出品的开源深度学习工具包 用 CNTK 搞深度学习 (一) 入门 Computational Network Toolk ...

  7. 常用深度学习框——Caffe/ TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/ TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tenso ...

  8. 深度学习框架Caffe的编译安装

    深度学习框架caffe特点,富有表达性.快速.模块化.下面介绍caffe如何在Ubuntu上编译安装. 1. 前提条件 安装依赖的软件包: CUDA 用来使用GPU模式计算. 建议使用 7.0 以上最 ...

  9. 深度学习框架-caffe安装-环境[Mac OSX 10.12]

    深度学习框架-caffe安装 [Mac OSX 10.12] [参考资源] 1.英文原文:(使用GPU) [http://hoondy.com/2015/04/03/how-to-install-ca ...

随机推荐

  1. 解决Kettle与Kerberos集成问题

    本文目的:记录Kerberos环境下,通过Kettle将MySQL数据清洗到HDFS过程解决的2个问题,希望对大家有所帮助. Kettle版本:pdi-ce-7.1.0.0-12 1.在Kerbero ...

  2. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

  3. 微信小程序 - 曲线图

    最近要做微信小程序,项目中需要曲线图显示数据,所以在网上看了一下找了很久都没有找到一个,不知道是我查找的姿势不对,还是什么的.所以就自己做了一个曲线图,现在分享给大家. wxml代码: <can ...

  4. 获取window.location.href中传的值,并且转换成json数据使用

    做个记录保存一下,以免以后再次用到忘记了. function locVal(){ var url=window.location.href; if (url.indexOf('?')==-1)retu ...

  5. linux系统下部署DNS正向解析

    DNS服务概述: DNS(Domain Name System)域名系统,能够提供域名与IP地址的解析服务. 正向解析 正向解析是指域名到IP 地址的解析过程. 部署DNS正向解析 DNS服务的三个配 ...

  6. css3用到知识点小结

    属性 默认值 属性值及其描述 animation-name 默认值:none 规定需要绑定到选择器的 keyframe 名称. keyframename 规定需要绑定到选择器的 keyframe 的名 ...

  7. Toggle组件切换开关,控制开关图片显示与隐藏

    UGUI_Image 组件简单笔记 Rect Transform:用于控制 UI 物体的基本属性 Image 基本使用 1.Image 组件是用于显示图片资源的.使用方式有两种:1.显示纯粹的颜色:2 ...

  8. php面试题--并列排名问题

    给定一个二维数组: <?php $data = [ ['name' =>'j1', 'score' => '80'], ['name' =>'j2', 'score' => ...

  9. python之路(七)-递归算法

    递归 特点 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1) 递归就是在 ...

  10. RabbitMq相关

    RabbitMq 通过通过IP,Port等参数创建connection对象,然后实际上通信用的是channel,channel的建立基于connection RPC 调用: RPCClient通过ch ...