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

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平台上模型训练及实例使用模型进行预测

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值