Caffe ImageNet官方文档中文版

文档大部分都是机翻,本人英语未过四级,所以凑合看吧

构建ImageNet
本指南旨在让您准备好根据自己的数据训练自己的模型。如果你只是想要一个ImageNet训练的网络,那么注意,由于训练需要很多电能,我们讨厌全球变暖,我们在model zoo提供如下所述训练的CaffeNet模型。

数据准备
该指南指定所有路径并假定所有命令都从根caffe目录执行。(即~/caffe)

通过“ImageNet”我们这里意味着ILSVRC12挑战,但你也可以轻松地训练整个ImageNet,只是需要更多的磁盘空间,和一个更长的训练时间。

我们假设您已经下载了ImageNet培训数据和验证数据,并且它们存储在您的磁盘上,如:

/path/to/imagenet/train/n01440764/n01440764_10026.JPEG
/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG
您将首先需要准备一些辅助数据进行培训。此数据可通过以下方式下载:(在caffe目录下直接执行即可)

./data/ilsvrc12/get_ilsvrc_aux.sh
训练数据和验证数据输入在文本中描述train.txt和val.txt列出所有文件及其标签。注意,我们使用不同于ILSVRC devkit的标签索引:我们按照ASCII顺序对synset名称进行排序,然后将它们从0标记到999.可以在synset_words.txt中看到 synset/name的映射关系。

您可能需要提前将图像调整为256x256。默认情况下,我们不鼓励这样做,因为在集群环境中,使用mapreduce并行方式调整图像大小获益。例如,扬清使用他的轻量的mincepie包。如果你宁愿事情更简单,你也可以使用shell命令,如:

for name in /path/to/imagenet/val/*.JPEG; do
convert -resize 256x256\! $name $name
done
看看examples/imagenet/create_imagenet.sh。根据需要设置训练和测试数据文件夹的路径,并设置“RESIZE = true”将所有图像调整为256x256,如果您没有提前调整图像大小现在只需使用 examples/imagenet/create_imagenet.sh创建leveldbs。请注意,examples/imagenet/ilsvrc12_train_leveldb而examples/imagenet/ilsvrc12_val_leveldb不应这种执行前就存在。它将由脚本创建。GLOG_logtostderr=1只是转储更多的信息供您检查,您可以安全地忽略它。

计算图像平均值
该模型要求我们从每个图像中减去图像平均值,因此我们必须计算平均值。tools/compute_image_mean.cpp实现它 - 它也是一个很好的例子,让您熟悉如何操作多个组件,如协议缓冲区,leveldbs和日志记录,如果你不熟悉他们。无论如何,平均计算可以用下面这个文件直接执行输出:

./examples/imagenet/make_imagenet_mean.sh
这将创建 data/ilsvrc12/imagenet_mean.binaryproto。

模型定义
我们将描述Krizhevsky,Sutskever和Hinton在他们的NIPS 2012论文中首先提出的方法的参考实现。

网络定义(models/bvlc_reference_caffenet/train_val.prototxt)遵循Krizhevsky et al。请注意,如果您偏离本指南中建议的文件路径,则需要调整.prototxt文件中的相关路径。

如果你仔细看models/bvlc_reference_caffenet/train_val.prototxt,你会注意到几个include部分指定phase: TRAIN或phase: TEST。这些部分允许我们在一个文件中定义两个密切相关的网络:用于训练的网络和用于测试的网络。这两个网络几乎相同,共享除了用include { phase: TRAIN }或标记的那些层之外的所有层include { phase: TEST }。在这种事件下,只有输入层和一个输出层不同。

输入层差异:训练网络的data输入层从examples/imagenet/ilsvrc12_train_leveldb输入图像中提取其数据并随机镜像。测试网络的data层从数据获取数据,examples/imagenet/ilsvrc12_val_leveldb不执行随机镜像。

输出层差异:两个网络都输出softmax_loss层,其在训练中用于计算损失函数和初始化反向传播,而在验证中这个损失被简单报告。测试网络还具有第二输出层,accuracy其用于报告测试集上的精度。在训练过程中,测试网络偶尔会在测试集上进行实例化和测试,生成类似Test score #0: xxx和Test score #1: xxx。在这种情况下,分数0是准确度(对于未经训练的网络,其将从1/1000 = 0.001开始),分数1是损失(对于未训练的网络,其将从7开始)。

我们还将布置一个用于运行解算器的协议缓冲区。让我们做几个计划:

我们将以256的批次运行,并运行总共450,000次迭代(约90个周期)。
对于每1000次迭代,我们使用验证数据测试学习网络。
我们将初始学习速率设置为0.01,并且每100,000次迭代(大约20个周期)减少它。
每20次迭代将显示信息。
网络将训练有动量0.9和0.0005的重量衰减。
对于每10,000次迭代,我们将保存当前状态的快照。
听起来不错?这是在中实现的models/bvlc_reference_caffenet/solver.prototxt。

训练ImageNet
准备好了吗?开始训练。

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt
坐下来享受吧!

在K40机器上,每20次迭代运行大约26.5秒(而在K20上这需要36秒),因此对于完全前向传播-反向传播过程,每个图像有效地大约5.2ms。大约2毫秒是前向的,其余的是反向的。如果你有兴趣剖析计算时间,你可以运行

./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt

继续训练?
我们都有电源断电的经历,或者我们奖励自己一点通过玩战地(有人还记得震撼?)。由于我们在训练期间快照中间结果,我们能够从快照中恢复。这可以做到很容易:

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
其中在脚本中caffenet_train_iter_10000.solverstate是解算器状态快照,其存储用于恢复精确解算器状态(包括参数,动量历史等)的所有必要信息。

分词
希望你喜欢这个方法!自ILSVRC 2012挑战以来,许多研究人员已经走得更远,改变了网络架构或微调网络中的各种参数,以满足新的数据和任务。 Caffe让你通过简单地编写不同的prototxt文件更容易探索不同的网络选择 - 那不是很令人兴奋吗?

现在你有一个训练有素的网络,看看如何使用它和Python接口分类ImageNet。

时间: 2024-12-21 22:32:03

Caffe ImageNet官方文档中文版的相关文章

caffe CIFAR-10官方文档中文版

我这20MB的网速都下不下来,我觉得你还是放弃这个模型训练吧,谈费劲,看看得了,我就直接机翻粘过来得了,懒得校对了. Alex的CIFAR-10教程,Caffe风格 Alex Krizhevsky的cuda-convnet详细介绍了模型定义,参数和培训程序,以便在CIFAR-10上获得良好的性能.这个例子再现了他在Caffe的结果. 我们将假设你已经成功编译了Caffe.如果没有,请参阅安装页面.在本教程中,我们假设您的caffe安装位于CAFFE_ROOT. 我们感谢@chyojn定义模型模式

2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等).当前2D Toolkit版本为2.4. 这是一篇系列教程,全文共13节(官方文档为4章,不过为了每节有明确目的,我根据官方文档的标题拆成了13节),下面是本系列教程的所有链接: 2DToolkit官方文档中文版打地鼠教程(一):初始设置 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合

这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等).当前2D Toolkit版本为2.4. 这是一篇系列教程,全文共13节(官方文档为4章,不过为了每节有明确目的,我根据官方文档的标题拆成了13节),下面是本系列教程的所有链接: 2DToolkit官方文档中文版打地鼠教程(一):初始设置 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

2DToolkit官方文档中文版打地鼠教程(一):初始设置

这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等).当前2D Toolkit版本为2.4. 这是一篇系列教程,全文共13节(官方文档为4章,不过为了每节有明确目的,我根据官方文档的标题拆成了13节),下面是本系列教程的所有链接: 2DToolkit官方文档中文版打地鼠教程(一):初始设置 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

【译】StackExchange.Redis官方文档-中文版(序)

StackExchange.Redis官方文档-中文版(序) Intro 最近想深入学习一些 Redis 相关的东西.于是看了看官方的项目,发现里面有一份文档,于是打算翻译成中文,方便大家学习参考,如果有什么翻译不准确的地方,欢迎大家指出. 翻译进度 文档还有一部分还未翻译完,我会争取在三月中旬前将剩下的部分翻译结束. 翻译进度详见:https://github.com/WeihanLi/StackExchange.Redis-docs-cn 文档地址: 原文文档地址: https://gith

TensorFlow 官方文档中文版

http://wiki.jikexueyuan.com/list/deep-learning/ TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远地影响着世界! 缘起 2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译. 机器学习作为人工智能的一种类型,可以让软件根据大量的数据来对未来的情况进行阐述或预判.如今,领先的科技巨头无不在机器学习下予以极大投入.Faceboo

TestNG官方文档中文版(2)-annotation(转)

1. 介绍    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的过程有三个典型步骤: * 编写测试的 业务逻辑并在代码中插入TestNG annotation    * 将测试信息添加到testng.xml文件或者build.xml中    * 运行TestNG 在欢迎页面上可以找到快速入门示例. 下面是这篇文档使用的概念: * suite由xml文件描述.它包

(三)Kafka0.8.2官方文档中文版系列-topic配置参数

前文链接: (一)Kafka0.8.2官方文档中文版系列-入门指南 (二)Kafka0.8.2官方文档中文版系列-API Topic-level configuration(主题级别的参数配置) 与主题相关的配置具有全局默认值(参考broker部分)和每个主题可选重写(broker部分有明确提示).如果主题没有重写这些配置,使用全局默认设置.可以使用--config添加一个或者多个自定义选项.下面这个例子创建了一个名为my-topic的主题,它自定义了最大消息大小和刷新速率: > bin/kaf

TensorFlow 官方文档中文版 --技术文档

1.文档预览 2.文档下载 TensorFlow官方文档中文版-v1.2.pdf 提取码:pt7p 原文地址:https://www.cnblogs.com/qikeyishu/p/10498789.html