Cifar-10是由Hinton的两个大弟子Alex Krizhevsky、Ilya Sutskever收集的一个用于普适物体识别的数据集。Cifar是加拿大政府牵头投资的一个先进科学项目研究所。Cifar-10由60000张32*32的RGB彩色图片构成,共10个分类。50000张训练,10000张测试(交叉验证)。这个数据集最大的特点在于将识别迁移到了普适物体,而且应用于多分类,姊妹数据集Cifar-100达到100类,ILSVRC比赛则是1000类。
特别注意:以下所有操作指令均需在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
在CAFFE_ROOT下执行:
./examples/cifar10/create_cifar10.sh
生成了三个文件:
- cifar10_train_lmdb:用于Caffe训练的lmdb文件
- cifar10_test_lmdb:用于Caffe测试的lmdb文件
- mean.binaryproto:根据cifar10_train_lmdb计算出的图片数据均值
可以直接使用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)。
在CAFFE_ROOT下执行:
./examples/cifar10/train_quick.sh
CPU和GPU硬件加速,只需要简单地更改所有’cifar*solver.prototxt’(*是通配符)文件中的第一行solver_mode即可,solver_mode: CPU就是用CPU进行训练,solver_mode:GPU就是用GPU进行训练。
训练生成的文件:
(1)caffe开发团队实际上也编写了一个Python版本的分类文件,路径为CAFFE_ROOT/python/classify.py,使用classify.py代码进行图像文件预测,该文件有两个问题:第一、均值计算错误。第二、预测结果保存至文件中看不到。
mean = np.load(args.mean_file)
在下面加上一行:
mean = np.load(args.mean_file)
mean=mean.mean(1).mean(1)
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平台上模型训练及实例使用模型进行预测