开发环境:ubuntu14.04+caffe(cpu)
参考博客: http://blog.youkuaiyun.com/hongbin_xu/article/details/76407581
1.简介
Cifar-10由60000张32*32的RGB彩色图片构成,共10个分类。50000张训练,10000张测试(交叉验证)。这个数据集最大的特点在于将识别迁移到了普适物体,而且应用于多分类(姊妹数据集Cifar-100达到100类,ILSVRC比赛则是1000类)。
2.下载数据
找到caffe根目录:输入./data/cifar10/get_cifar10.sh下载数据,时间有点长./data/cifar10/get_cifar10.sh
如果嫌下载速度慢,可以自己手动下载,再解压放到对应目录下。
从get_cifar10.sh文件中可以找到url:
http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
下载后:
训练集:
这5个文件就是分成了5份的那50000张图片。
data_batch_1.bin
data_batch_2.bin
data_batch_3.bin
data_batch_4.bin
data_batch_5.bin
测试集:
测试数据集,总共10000张图片。
test_batch.bin
类别说明:
说明了整个cifar-10数据集所包括的10个事物类别。
batches.meta.txt
3.图片格式转换
输入指令:cd $CAFFE_ROOT
./examples/cifar10/create_cifar10.sh
problem:
./build/examples/cifar10/convert_cifar_data.bin: not found
可能原因:没有编译caffe,接下来在caffe根目录下进行编译:
make all
再次运行就可以了
之后会在目录下生成三个文件:
cifar10_test_lmdb:测试集的lmdb文件
cifar10_train_lmdb:训练集的lmdb文件
mean.binaryproto:整个数据集所有图片的均值文件
4.训练数据集
gpu模式直接运行:
./examples/cifar10/train_quick.sh
cpu模式需要到train_quick.sh文件中提到的所有prototxt文件中修改solver_mode为cpu再运行。(用cpu训练在我的电脑上需要一小时的时间)
先用cifar10_quick_solver.prototxt迭代4000次,再用 cifar10_quick_solver_lr1.prototxt,在上一次训练的基础上再迭代1000次。其中 cifar10_quick_solver.prototxt的学习率为0.001,cifar10_quick_solver_lr1.prototxt的学习率为0.0001
在solver的设置中,每100次迭代会输出一次训练损失,测试是500次迭代输出一次
训练阶段,lr是学习率,loss是训练函数。测试阶段,score 0是准确率,score 1是损失函数。
训练完成后,准确度约为75%
5.测试模型
测试时用到了caffe的python接口,所以一定要先编译并配置好了好了pycaffe。caffe/python/classify.py文件,打开classify.py:
1.在图中所示位置添加一行代码,目的是修改均值计算错误 :
mean=mean.mean(1).mean(1)
2.将预测的结果打印出来:
print("Predictions:%s" % predictions) #在如图位置添加
3.添加如下代码到最后,目的是将结果排序,并找到对应的是什么:
# match the result
labelNums = len(predictions[0])
labels = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
for i in range(labelNums):
if i == 0:
maxPrediction = predictions[0][i]
maxIndex = i
else:
if maxPrediction < predictions[0][i]:
maxIndex = i
maxPrediction = predictions[0][i]
print(labels[maxIndex])
修改完就可以来测试了,caffe在$CAFFE_ROOT/examples/images下有一些图片:
python python/classify.py --model_def examples/cifar10/cifar10_quick.prototxt --pretrained_model examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 --center_only examples/images/cat.jpg foo
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/cropped_panda.jpg foo
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/dog3.jpg foo