欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

程序员文章站 2022-05-30 21:20:05
...



简介

网站链接:CIFAR-10
CIFAR-10数据集包括由10个类别的事物,每个事物各有6000张彩色图像,每张图片的大小是32*32。
整个数据集被分成了5个训练集和1个测试集,各有10000张图片,即50000张图片用于训练,10000张图片用于测试(交叉验证)。
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

下载数据

注意:默认用$CAFFE_ROOT表示caffe的根目录。
输入指令:

cd $CAFFE_ROOT
./data/cifar10/get_cifar10.sh
  • 1
  • 2

随后,会自动下载数据。
如果嫌下载速度慢,可以自己手动下载,再进行自己解压放到对应目录下。
从get_cifar10.sh文件中可以找到url:
http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz

打开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."
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

下载完成后,$CAFFE_ROOT/data/cifar10下多出了一些文件:
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

训练集:
这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

caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

图片格式转换

输入指令:

cd $CAFFE_ROOT
./examples/cifar10/create_cifar10.sh
  • 1
  • 2

之后会在目录下生成三个文件:

cifar10_test_lmdb:测试集的lmdb文件
cifar10_train_lmdb:训练集的lmdb文件
mean.binaryproto:整个数据集所有图片的均值文件

训练数据集

输入指令:

cd $CAFFE_ROOT
./examples/cifar10/train_quick.sh
  • 1
  • 2

随后就会开始训练。
先打开train_quick.sh看看

#!/usr/bin/env sh
set -e

TOOLS=./build/tools

$TOOLS/caffe train \
  --solver=examples/cifar10/cifar10_quick_solver.prototxt aaa@qq.com

# reduce learning rate by factor of 10 after 8 epochs
$TOOLS/caffe train \
  --solver=examples/cifar10/cifar10_quick_solver_lr1.prototxt \
  --snapshot=examples/cifar10/cifar10_quick_iter_4000.solverstate aaa@qq.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如果使用的是cpu模式,需要到文件中提到的所有prototxt文件中修改solver_mode为cpu;如果使用的是gpu,则不需要更改,默认就已经是gpu模式了。
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

使用gpu模式很快就训练好了。
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)
最后训练完时的准确率是75%左右,效果并不是很好。

测试模型

测试时用到了caffe的python接口,所以一定要先编译并配置好了好了pycaffe。如果没有配置好,请先配置好。我以前的博客有讲过如何linux下搭建caffe,最后讲了如何安装pycaffe。(打开链接

我们不自己从头写python代码了,使用caffe提供的$CAFFE_ROOT/python/classify.py文件。
参考自:http://blog.csdn.net/asukasmallriver/article/details/73089944
打开classify.py:
在图中所示位置添加一行代码,目的是修改均值计算错误 :

mean=mean.mean(1).mean(1) 
  • 1

caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

将预测的结果打印出来:

# 自己添加
print("Predictions:%s" % predictions)
  • 1
  • 2

caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

将结果排序,并找到对应的是什么:
添加如下代码到最后:

# 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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

修改完就可以来测试了,caffe在$CAFFE_ROOT/examples/images下有一些图片。
输入指令:

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/cat.jpg foo
  • 1

载入的图片是cat.jpg,预测结果如下:
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

我另外从百度随便下了几张图片来测试:
输入指令(根据自己的图片的文件名改下就可以了):

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/cat2.jpg foo
  • 1
  • 2


caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

哈士奇居然被识别成猫了,但是我承认这张图片的哈士奇的确不太像“狗”。
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)


caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

汽车
caffe学习:cifar-10数据集训练及测试(Ubuntu16.04)

cifar数据集训练的结果识别效果不是很好,准确率较低,这里仅做学习实验用。

本博客转载自:https://blog.csdn.net/hongbin_xu/article/details/76407581

相关标签: caffe