简介

Caffe是一个清晰而高效的深度学习的框架,其作者是博士毕业于UC Berkeley的贾扬清,目前在Google工作。
Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU54直接无缝切换:

1
Caffe::set_mode(Caffe::GPU);

Caffe的优势

  • 上手快:模型与相应优化都是以文本形式而非代码形式给出。
  • Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。
  • 速度快:能够运行最棒的模型与海量的数据。
  • Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.
  • 模块化:方便扩展到新的任务和设置上。
  • 可以使用Caffe提供的各层类型来定义自己的模型。
  • 开放性:公开的代码和参考模型用于再现。
  • 社区好:可以通过BSD-2参与开发与讨论。

Caffe2 一个新的轻量级,模块化和可扩展的深度学习框架,由 NVIDIA和Facebook团队重新打造并在github上开源,Caffe2允许开发人员和研究人员创建大规模分布式训练场景和构建边缘设备机器学习应用。

入门篇

推荐先阅读一文读懂机器学习

前期入门主要根据自己的机器(nvidia显卡)完成Caffe 的安装,运行 Caffe官网github repo 上的例程

安装

安装请仔细阅读下面的中文教程,编译中遇到的错误请在 github issues用英文仔细查看错误原因。而且大部分都是环境依赖,路径错误

例程

配合官方文档 例如mnist 手写体识别,其文档在 $CAFFE_ROOT/examples/mnist/Readme.md ,运行并理解其流程。尤其以下面几个最为重要,当细细品味。

例程名 实现 学习意义
LeNet MNIST 手写数字识别 理解模型
CaffeNet C++ Classification example c++ 代码实现图片分类 理解如何用c++ 调用caffe
Fine-tuning for style recognition 根据自己数据集微调模型 迁移学习,构建自己数据集,微调模型
Web demo 基于web 网页的图片分类 如何构建 client /server

入门书籍

如果链接失效,可以访问 https://share.mindcont.com 获取。

答疑社区

进阶篇

这里推荐一个很好的实践入门教程,使用python 和 caffe 进行了一个完整的流程,内容详实,可谓理论与实践兼备,不可多得。

应用

视觉方向

视觉方面大致有针对图像的分类、分割(Segmentation)、理解(caption),超分辨,去噪去模糊,以及针对物体的目标识别、检测和追踪。还有就是对视频信息进行同样的工作追求实时和可用。

图片分类
ResNet-v3 https://github.com/terrychenism/ResNeXt
denseNet https://github.com/liuzhuang13/DenseNet
Deep Residual Networks https://github.com/KaimingHe/deep-residual-networks
Highway Networks https://github.com/flukeskywalker/highway-networks
Deep-Compression-AlexNet https://github.com/songhan/Deep-Compression-AlexNet
SqueezeNet https://github.com/DeepScale/SqueezeNet
GoogleNet-V2 https://github.com/lim0606/caffe-googlenet-bn
目标检测
PVANet https://github.com/sanghoon/pva-faster-rcnn
R-FCN https://github.com/Orpine/py-R-FCN
SSD: Single Shot MultiBox Detector https://github.com/weiliu89/caffe/tree/ssd
YOLO in caffe https://github.com/xingwangsfu/caffe-yolo
DeepBox https://github.com/weichengkuo/DeepBox
Faster R-CNN https://github.com/rbgirshick/py-faster-rcnn
Fast R-CNN https://github.com/rbgirshick/fast-rcnn

自然语言处理

将机器学习用于语音文本,词汇方面的工作,典型应用机器翻译。

语音

这里是指语言片段的识别,拼接,以及仿声合成,典型语音识别,也就是科大讯飞所作的工作。

更多访问 MichaelXin - Awesome-Caffe

CS231N 课程

有了前面的初步了解,认识了什么是深度学习,什么是caffe,怎么使用caffe,以及caffe能够干什么,想要进一步的学习还要了解卷积神经网络的前世今生。我推荐斯坦福大学的CS231N 课程作为卷积神经网络的系统学习。

数据集

机器学习有人工标注数据的监督学习也好,没有人工标注数据的无监督学习以及介于两者之间的半监督学习也好,归根结底离不开大量的数据,基于各种各样场景下的问题性质,大家构建了相应的人工标注的数据集,一部分用于网络训练,让机器进行学习,另一部分用来做测试评价学习效果的好坏。

鉴于各式各样的数据集种类繁多,此部分单独列为一个页面,请参考下面的链接。

标注工具

博客

推荐一些好的博客,工程方面能让你解决某个具体问题能有所启发,而学术方面则可以让你紧跟业界最新潮流,这其中又分为学者个人的博客和著名科研单位的博客。

工程方面

学术探索
个人

单位和组织

竞赛

微调网络

可视化

用反卷积的方法对自己的网络的各个卷积层进行可视化,能更好的理解你的网络每层学习到那些特征,思考到网络可能进入了哪些误区。

全卷积(FCN)

FCN将传统CNN中的全连接层转化成一个个的卷积层。在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。

扩展新layer

加入一个新的层,满足自己的实际需求,最常见的就是修改 数据输入层DataLayer,增加一个新的、特殊的数据类型,也对应你特殊的数据处理方式,例如对图像进行每隔几度进行旋转,resize、crop、使用光流图像等。也可以换种思路看看别人是如何增加一个新的Layer的,从中获得启发。

高级篇

调参

深度学习,卷积神经网络莫过于一个适应于数据集规模,能够反映问题本质的网络,剩下的就是调参的事情了,无外乎实践,实践,再实践。当然机器很重要,好的机器,好的显卡,意味着快速迭代!机器不够用也没关系,那就要把理论功夫做足,参考成熟的网络设计,再前人的工作基础之上fine-tuning,往往比你自己训练要好的多。使用image-net数据集训练得到的caffemodel 就是一个很好的权值初始化参数。

构造网络

转化

分布式计算

参考

作者:mindcont 2016-08-22 第一次编辑 2017-02-16 第二次编辑
转载注明出处 http://blog.mindcont.com/2016/08/22/caffe-guide-book/