您的位置:首页 > 理论基础

计算机视觉caffe之路第三篇:CIFAR-10数据集训练及预测实例

2017-06-12 11:40 423 查看

1.简介

Cifar-10是由Hinton的两个大弟子Alex Krizhevsky、Ilya Sutskever收集的一个用于普适物体识别的数据集。Cifar是加拿大政府牵头投资的一个先进科学项目研究所。Cifar-10由60000张32*32的RGB彩色图片构成,共10个分类。50000张训练,10000张测试(交叉验证)。这个数据集最大的特点在于将识别迁移到了普适物体,而且应用于多分类,姊妹数据集Cifar-100达到100类,ILSVRC比赛则是1000类。



2.下载数据集

特别注意:以下所有操作指令均需在caffe根目录下运行,否则当前路径和代码中路径不统一,运行不能成功,最简单就按照步骤在根目录下操作。

1)下载

在终端运行以下指令:

./data/cifar10/get_cifar10.sh


查看get_cifar10.sh源码可知:

#!/usr/bin/env sh
# This scripts downloads the CIFAR10 (binary version) data and unzips it.

DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"

echo "Downloading..."

wget --no-check-certificate http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz 
echo "Unzipping..."

tar -xf cifar-10-binary.tar.gz && rm -f cifar-10-binary.tar.gz
mv cifar-10-batches-bin/* . && rm -rf cifar-10-batches-bin

# Creation is split out because leveldb sometimes causes segfault
# and needs to be re-created.

echo "Done."


代码对cifar-10-binary.tar.gz目标文件分别执行了:下载→解压→删除→移动→删除操,操作。如果在Linux下载慢的话,我们可以将下载部分屏蔽,改为手动下载,下载地址:https://www.cs.toronto.edu/~kriz/cifar.html,将下载好的cifar-10-binary.tar.gz拷贝到CAFFE_ROOT/data/cifar10目录下,再执行屏蔽了下载步骤的get_cifar10.sh,不嫌麻烦也可按照代码内容手动完成所有步骤。

2)结果

以上操作后在CAFFE_ROOT/data/cifar10目录下得到如下文件:

训练集原始图片:

data_batch_1.bin data_batch_2.bin data_batch_3.bin data_batch_4.bin data_batch_5.bin


在介绍Cifar-10数据集的时候已经说过,这五个文件就是那50000个训练集,每一个bin文件存放了1万张32*32的RGB彩色图片。

测试集原始图片:

test_batch.bin


同样的,这个bin文件就是存放了1万张32*32的RGB彩色图片,这些图片是用来测试的。

类别说明文件:

batches.meta.txt


2.图片格式转换和计算图片数据的均值

在CAFFE_ROOT下执行:

./examples/cifar10/create_cifar10.sh


生成了三个文件:

- cifar10_train_lmdb:用于Caffe训练的lmdb文件

- cifar10_test_lmdb:用于Caffe测试的lmdb文件

- mean.binaryproto:根据cifar10_train_lmdb计算出的图片数据均值

3.prototxt配置文件编写

可以直接使用
CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt


Caffe框架就是根据设置的prototxt文件,选择相应的模型进行训练的。此例程根据examples/cifar10/cifar10_quick_solver.prototxt这个配置文件建立模型。名为cifar10_quick_solver的CNN模型由卷基层(convolution)、池化层(pooling)、非线性ReLU层(rectified linear unit (ReLU) nonlinearities)和在顶端的局部对比归一化线性分类器组成(local contrast normalization with a linear classifier on top of it all)。

4.训练模型

在CAFFE_ROOT下执行:

./examples/cifar10/train_quick.sh


CPU和GPU硬件加速,只需要简单地更改所有’cifar*solver.prototxt’(*是通配符)文件中的第一行solver_mode即可,solver_mode: CPU就是用CPU进行训练,solver_mode:GPU就是用GPU进行训练。



训练生成的文件:

cifar10_quick_iter_5000.caffemodel.h5:迭代5000次训练出来的模型,后面就用这个模型来做分类

cifar10_quick_iter_5000.solverstate.h5:也是迭代5000次训练出来的模型,应该是用来中断后继续训练用的文件。

5.使用python接口应用模型预测

(1)caffe开发团队实际上也编写了一个Python版本的分类文件,路径为CAFFE_ROOT/python/classify.py,使用classify.py代码进行图像文件预测,该文件有两个问题:第一、均值计算错误。第二、预测结果保存至文件中看不到。

修改均值计算错误

在classify.py文件找到

mean = np.load(args.mean_file)


在下面加上一行:

mean = np.load(args.mean_file)
mean=mean.mean(1).mean(1)




添加结果显示

最简单的方法是,在CAFFE_ROOT/python/classify.py添加:

print("Predictions:%s" % predictions)




(2)准备测试图片,在CAFFE_ROOT/examples/images下有cat.jpg等图片,也可以自己添加其他类别,如狗、鸟等。



选择我自己添加的dog2.jpg为例,执行如下指令:

python python/classify.py --model_def examples/cifar10/cifar10_quick.prototxt --pretrained_model examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5  --center_only  examples/images/dog2.jpg foo


得到如下结果:

...
Loading file: examples/images/dog2.jpg
Classifying 1 inputs.
Done in 0.02 s.
Predictions:[[ 0.17054561  0.00093318  0.08521238  0.10496119  0.05348967  0.35711768  0.00478963  0.01122217  0.20208922  0.00963932]]
Saving results into foo


最大数值
0.35711768
下标5,在分类标签文件CAFFE_ROOT/data/clfar10/batches.meta.txt中对应‘dog’。



cifar10数据集预测结果准确率较低,此处只作为实验用。

参考文献:

CNN训练Cifar-10技巧

Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习

深度学习Caffe平台实例——CIFAR-10数据集在caffe平台上模型训练及实例使用模型进行预测
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐