首 页
手机版

Caffe Windows

caffe全称Convolutional Architecture for Fast Feature Embedding,由伯克利视觉和学习中心 (BVLC) 及社区贡献者共同开发,是一个清晰,可读性高,快速的深度学习框架,可为学术研究项目、新创公司原型和大规模行业应用程序提供强大的视觉、语音和多媒体支持。

Caffe的核心程序是用C++实现的,并提供了Python和Matlab的接口,也就是说你可以在python和matlab中调用caffe训练好的模型。并且caffe支持cpu和gpu的无缝切换,这一点在现在的大数据时代显得尤为重要。目前搞深度学习的人大部分都是在gpu上跑程序的,一个ImageNet数据集有上千万张图片,加上深度学习使用的模型层数又比较多,跑一个程序所花费的时间都是以天为单位计算的,若在cpu上跑,可能需要一周的时间,但在gpu上可能只需两三天就好了。

但是对于我们这些正常人来说,如果让我们在gpu上进行编程,恐怕都要傻眼了,这时caffe就提供了一个便捷的方式,可以让你忽略cpu和gpu的差别,仅仅一个参数就可以让你的模型在cpu和gpu之间自由切换,大大提升了各位童鞋‘发论文’的速度。(还有一个python工具包也可以让你方便的在cpu和gpu之间进行切换,那就是Theano了,本人最初正是因为只有python工具包才有支持gpu编程的功能,所以才弃matlab从python的) 

功能特色:

Caffe的设计考虑了以下几个方面:

1、表示:模型和优化以纯文本的模式定义,而不是以代码模式;

2、速度:运算速度对于最先进模型和海量数据是至关重要的;

3、模块化:新的任务和配置要求框架具有灵活性和扩展性;

4、开放性:科研和应用过程需要公共的代码、可参考的模型和可再现性;

5、社区:通过共同讨论和具体协议共同开发这个项目,学术研究、起步阶段的原型和工业应用可以共享各自的力量。

拥有以上诸多优势,经过两年多的版本迭代,Caffe框架已经在学术界和工业界得到了广泛的认可。

那么是什么原因促使caffe的运行速度比其它深度学习框架的运行速度快呢?个人认为有以下几点: 

1、数据存储: 

Caffe生成的数据分为2种格式:Lmdb和Leveldb 

它们都是键/值对嵌入式数据库管理系统编程库。 

虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。 

因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。(这点得吐槽下了,没空的自行跳过此段。之前用的是实验室服务器上安装的老版本的caffe,在运行MNIST和CIFAR-10的例子时,caffe官网教程上的还是生成*_leveldb格式的数据,但当我几天后跑ImageNet实例时,提示我找不到$CAFFE_ROOT/build/tools/目录下的caffe文件,后来还是通过和网友的tools目录下的文件对比才发现,编译后生成的老版本的caffe比新版的少了一堆东西,只好重新编译新版本,编译过程中发现缺少lmdb,查资料才发现,caffe已经用lmdb取代了leveldb,而返回去看之前的MNIST和CIFAR-10实例教程,发现教程上也已经将leveldb的部分改成lmdb了。唉~,这更新速度也忒快了吧,还是提醒各位及时升级,有问题多看几遍官网教程) 

2、数据传输 

当数据在前向后向传输时,caffe采用blobs的形式对数据进行传递或处理,它是该框架采用的标准的存储接口。下面是百度百科上对blob的一段解释:BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库,caffe中的lmdb或leveldb) 

在caffe中,blob是一个四位数组,不过在不同的场合,各维表示的意义不同 

对于数据:Number*Channel*Height*Width 

对于卷积权重:Output*Input*Height*Width 

对于卷积偏置:Output*1*1*1 

3、其它 

c++的运行效率就不用多说了,暂时这些吧,如有新内容再补充了,也欢迎大家来补充……

介绍完caffe了,接下来就该安装caffe跑跑实例看看效果了 

不过先说明下,本系列caffe学习笔记中,不涉及caffe的安装部分,如有此需求请移步他处。我用的是实验室的服务器,caffe是别人装的,本人没有root权限没有实际安装过,所以安装部分就无从奉告了~

CAFFE系统配置:

1、硬件配置

参数规格

CPU 架构x86_64

系统内存8-32GB

CPU1

GPU 型号NVIDIA TITAN X

GPU1-2

2、服务器

参数规格

CPU 架构x86_64

系统内存32 GB

每节点的 CPU 数目1-2

GPU 型号

Tesla M40

Tesla P100

每节点的 GPU 数目1-4

3、软件配置

参数版本

操作系统Ubuntu 14.04

GPU 驱动程序367.27 或更新版本

CUDA 工具包8.0

cuDNN 库v5.1

如何下载并安装Caffe

Caffe在更新的 NVIDIA Pascal GPU 上运行的速度最高可提高65%,并能够跨单个节点中的多个 GPU 进行扩展。如今,您训练模型的时间可以从几天缩短到几个小时。

第1步:安装 CUDA

要结合使用 Caffe 和 NVIDIA GPU,步要安装CUDA 工具包。

第2步:安装 cuDNN

安装 CUDA 工具包后,下载适用于 Linux 的cuDNN v5.1 库(请注意,您将需要注册加速计算开发人员计划)。

下载后,解压缩文件并将其复制到 CUDA 工具包目录(此处假设在 /usr/local/cuda/ 中):

$ sudo tar -xvf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local

第 3 步:安装依赖项

Caffe依赖于多个库,您应该从您系统的数据包管理器获得这些库。

在 Ubuntu 14.04 中,将使用以下命令安装必要的库:

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev git

$ sudo apt-get install --no-install-recommends libboost-all-dev

第4步:安装 NCCL

在多个 GPU 上运行 Caffe 需要使用 NVIDIA NCCL。可使用以下命令安装 NCCL:

$ git clone

$ cd nccl

$ sudo make install -j4

NCCL 库和文件头将安装在 /usr/local/lib 和 /usr/local/include 中。

第5步:安装 Caffe

我们建议安装 NVIDIA 发布的新版 Caffe,请访问获取新版本。截至发稿时,超级新版本为 0.15.9。

$ wget 

$ tar -zxf v0.15.9.tar.gz

$ cd caffe-0.15.9

$ cp Makefile.config.example Makefile.config

在文本编辑器中打开新创建的 Makefile.config,然后进行以下更改:

取消对行 USE_CUDNN := 1 的注释。这可以启用 cuDNN 加速。

取消对行 USE_NCCL := 1 的注释。这可以启用在多个 GPU 上运行 Caffe 所需的 NCCL。

保存并关闭文件。现在,您可以编译 Caffe 了。

$ make all -j4

完成此命令后,您会在 build/tools/caffe 中获得 Caffe 二进制文件。

准备图像数据库

测试 Caffe 的训练性能需要使用图像数据库作为输入资源。Caffe 自带多个模型,可使用来自 ILSVRC12 挑战赛(“ImageNet”)的图像。原始图像文件可从 下载(您将需要开通帐户并同意其条款)。下载原始图像文件并解压到您的系统中后,请继续执行以下步骤。假设原始图像以如下方式存储在您的磁盘中:

/path/to/imagenet/train/n01440764/n01440764_10026.JPEG

/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG

第 6 步:下载辅助数据

$ ./data/ilsvrc12/get_ilsvrc_aux.sh

第 7 步:创建数据库

在文本编辑器中打开文件 examples/imagenet/create_imagenet.sh,然后进行以下更改:

将变量 TRAIN_DATA_ROOT 和 VAL_DATA_ROOT 更改为您解压原始图像的路径。

设置 RESIZE=true 以便在将图像添加到数据库之前将其调整到适当大小。

保存并关闭文件。现在,您可以使用以下命令创建图像数据库了:

$ ./examples/imagenet/create_imagenet.sh

然后,使用以下命令创建所需的图像均值文件:

$ ./examples/imagenet/make_imagenet_mean.sh

收起介绍展开介绍
  • 下载地址

发表评论

0条评论