caffe教程翻译:在caffe上训练与测试数据

本文为caffe官网上ImageNet教程翻译,地址:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html


本教程旨在教我们用自己的数据训练模型。caffe官网的model zoo里已经提供了训练好的模型。

数据准备

本教程假定所有的命令都在caffe根目录下执行。
这里提到的”ImageNet”是指ILSVRC2012挑战赛中的数据库,当然也可以在整个ImageNet上训练,只是需要更大容量的硬盘和更长的时间。
现假定已经下载好了ImageNet训练数据和验证数据,它们存储的方式如下:

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

首先需要准备一些辅助数据来训练,用如下命令下载数据:

 ./data/ilsvrc12/get_ilsvrc_aux.sh

训练和验证输入作为文本文件存放在train.txtval.txt中,同时注明标签。注意这里所采用的标签索引与ILSVRC工具包有所不同,这里是按ASCII码表对类进行排序,然后标签依次为0~999。 你可能需要先将输入图片剪裁为256×256大小。Yangqing使用了他的micepie包。如果你希望简单点,也可以使用shell命令,比如:

for name in /path/to/imagenet/val/*.JPEG; do
    convert -resize 256x256\! $name $name
done

examples/imagenet/create_imagenet.sh文件中,按自己的需要设置训练和验证目录,如果事先没有剪裁图片可通过设置RESIZE=true来将图片切割为256×256大小。现在,便可以用examples/imagenet/create_imagenet.sh来创建leveldbs格式的数据库了。注意,
examples/imagenet/ilsvrc12_train_leveldbexamples/imagenet/ilsvrc12_val_leveldb在执行前是不能存在的,因为它们将通过脚本自动生成。GLOG_logtostderr=1是用来检查的转储信息,可忽略。

计算图像均值

模型需要从每张图像中减去图像均值,因此我们需要首先计算均值。 tools/compute_image_mean.cpp文件是一个非常好的例子使我们熟悉并使用众多组件,如proto buffer,leveldbs以及logging。计算图像均值可使用如下命令:

./examples/imagenet/make_imagenet_mean.sh

执行后将生成data/ilsvrc12/imagenet_mean.binaryproto文件。

模型定义

下面要介绍由Krizhevsky, Sutskever, 和Hinton三人在NIPS 2012 paper上的模型。
网络定义(models/bvlc_reference_caffenet/train_val.prototxt) 遵从AlexNet网络。注意如果想更改文件路径,那么必须和.prototxt文件中的路径相一致。
如果你仔细看过了models/bvlc_reference_caffenet/train_val.prototxt文件,将注意到在多个include部分有{phase:TRAIN}{phase:TEST}。这些使得我们可以在同一个文件中定义该网络是用来训练或用来测试。这两个网络几乎完全一样,除了标有{phase:TRAIN}{phase:TEST}的层不一样以外,其余的层完全一致。在这种情况下,只有输入层和输出层不同。
输入层区别:训练网络的data输入层从examples/imagenet/ilsvrc12_train_leveldb下载数据,并对随机对图像取镜像。测试网络的data输入层从examples/imagenet/ilsvrc12_val_leveldb下载数据,不对图像取镜像。
输出层区别:两个网络的输出层都是sofxmax_loss层,在训练中该层用来计算损失函数来初始化反向传播,在验证过程中仅将该损失值打印出来。在测试网络中同时还有第二个输出层:accuracy,该层用来显示在测试集上的准确率。在训练过程中,测试网络偶尔会在测试集上进行测试,产生两行类似Test score #0: xxxTest score #1: xxx这样的输出。在这里,score 0是准确率(对于未经训练的网络该值约从1/1000=0.001开始),score 1是损失值(对于未经训练的网络该值约从7开始)。
solver文件中的参数配置参考如下:

  • batch大小设为256,总共450,000次迭代;
  • 每1,000次迭代,在验证数据上测试一次学习网络;
  • 学习率初始值为0.01,每100,000次迭代递减;
  • 每20次迭代打印一次信息;
  • momentum初始值为0.9,权重递减值为0.0005;
  • 每10,000次迭代,对当前信息取一次快照
    这些参数均在models/bvlc_reference_caffenet/solver.prototxt文件中声明。

训练网络

执行如下命令开始训练网络:

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt

在K40机器上,每20次迭代大约花费26.5s(在K20上花费36s),因此对于一个完全的前-后向传播,每张图片需要消耗5.2s,其中2s用来前向传播,其余时间用来后向传播。如果想仔细了解计算时间,可执行命令:

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

恢复训练

由于之前我们及时的存储了训练过程中的相关进度,所以可以利用snapshots恢复训练,修改文件如下:

./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脚本中存储了所有需要的信息(包括参数、momentum历史值等等)。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值