caffe学习:CIFAR-10

点击打开链接

使用数据库:CIFAR-10

60000张 32X32 彩色图像 10类,50000张训练,10000张测试

Caffe 深度学习框架上手教程

具体操作实现:

(1)获取数据库

[python]  view plain  copy
  1. #下面假定caffe的根目录是 CAFFE_ROOT,在终端输入命令下载数据集:  
  2. cd  $CAFFE_ROOT  
  3. ./data/cifar10/get_cifar10.sh  #该脚本会下载二进制的cifar,并解压,会在/data/cifar10中出现很多batch文件  
  4. ./examples/cifar10/create_cifar10.sh #运行后将会在examples中出现数据集./cifar10_xxx_lmdb和数据集图像均值./mean.binaryprot  

上边是比较笼统的数据下载过程,主要分为两步:下载与转换。但是,对于一个新手来说,这点提示完全不知道该怎么做,小编我就不明白,后来经过自己的不断尝试,终于搞定了。所以好多东西靠网上还是不靠谱的,还是要靠自己不断尝试。下面给出具体的步骤:

1)运行get_cifar10.sh 文件。

小编这里,该文件所在位置为  Downloads/caffe-master/data/cifar10

用 cd 命令定位到该文件所在处:

如:

[python]  view plain  copy
  1. sgg@ubuntu:~$ cd Downloads  
  2. sgg@ubuntu:~/Downloads$ cd caffe-master  #定位到根目录  
然后再执行: ./get_cifar10.sh  命令,下载数据

[python]  view plain  copy
  1. sgg@ubuntu:~/Downloads/caffe-master$ ./data/cifar10/get_cifar10.sh  
 
 
[python]  view plain  copy
  1. #该脚本会下载二进制的cifar,并解压,会在/data/cifar10中出现很多batch文件  

2)运行create_cifar10.sh 文件。

小编这里,该文件所在位置为  Downloads/caffe-master/examples/cifar10

由于create_cifar10.sh  文件只在根目录下运行,所以如果先将位置定位到create_cifar10 所在文件夹处,再运行 create_cifar10  是会报错误的。

报出如下错误:

./create_cifar10.sh: 13: ./create_cifar10.sh: ./build/examples/cifar10/convert_cifar_data.bin: not found


所以用如下语句执行 create_cifar10.sh 文件。 运行后将会在examples中出现数据集./cifar10_xxx_lmdb和数据集图像均值./mean.binaryproto

[python]  view plain  copy
  1. sgg@ubuntu:~$ cd Downloads  
  2. sgg@ubuntu:~/Downloads$ cd caffe-master  
  3. sgg@ubuntu:~/Downloads/caffe-master$ ./examples/cifar10/create_cifar10.sh  

create_cifar10.sh  所做的工作就是将图片库转成leveldb格式,并计算均值二进制文件

运行之后,将会在examples中出现数据库文件./cifar10-leveldb和数据库图像均值二进制文件./mean.binaryproto

[python]  view plain  copy
  1. 2)开始训练 #$CAFFE_ROOT为 caffe 的根目录  
  2. cd $CAFFE_ROOT  
  3. ./examples/cifar10/train_quick.sh  

具体操作如下:

[python]  view plain  copy
  1. sgg@ubuntu:~$ cd Downloads  
  2. sgg@ubuntu:~/Downloads$ cd caffe-master  
  3. sgg@ubuntu:~/Downloads/caffe-master$ ./examples/cifar10/train_quick.sh# ./train_quick.sh  命令,训练数据  

训练完成后我们会得到:

  cifar10_quick_iter_4000.caffemodel.h5

  cifar10_quick_iter_4000.solverstate.h5

  此时,我们就训练得到了模型,用于后面的分类

运行中出现的问题:

在执行训练语句后,出现提示问题:

[python]  view plain  copy
  1. sgg@ubuntu:~/Downloads/caffe-master$ ./examples/cifar10/train_quick.sh  
  2. I0802 17:42:26.469802  5520 caffe.cpp:217] Using GPUs 0  
  3. F0802 17:42:26.470361  5520 common.cpp:66] Cannot use GPU in CPU-only Caffe: check mode.  

在配置Makefile.config已经将其变为CPU-only 了,可还是出现这样的问题,这是由于在 cifar10_quick_solver.prototxt中未将其解决模式改为CPU。其他的找到相应的solver.prototxt进行更改。

(3)使用训练的模型来分类新数据

先直接用一下别人的模型分类试一下:(默认用的ImageNet的模型)

[python]  view plain  copy
  1. python python/classify.py examples/images/cat.jpg foo  

下面我们来指定自己的模型进行分类:

[python]  view plain  copy
  1. 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  

上面这句话的意思是,使用cifar10_quick.prototxt网络 + cifar10_quick_iter_4000.caffemodel.h5模型,对examples/images/cat.jpg图片进行分类。

默认的classify脚本不会直接输出结果,而是会把结果输入到foo文件里,不太直观,这里我在网上找了一个修改版,添加了一些参数,可以输出概率最高的分类。

替换python/classify.py,下载地址:http://download.csdn.net/detail/caisenchuan/9513196

这个脚本添加了两个参数,可以指定labels_file,然后可以直接把分类结果输出出来:

python python/classify.py --print_results --model_def examples/cifar10/cifar10_quick.prototxt --pretrained_model examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 --labels_file data/cifar10/cifar10_words.txt  --center_only  examples/images/cat.jpg foo

输出结果:

复制代码
Loading file: examples/images/cat.jpg
Classifying 1 inputs.
predict 3 inputs.
Done in 0.02 s.
Predictions : [[ 0.03903743  0.00722749  0.04582177  0.44352672  0.01203315  0.11832549
   0.02335102  0.25013766  0.03541689  0.02512246]]
python/classify.py:176: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)
  labels = labels_df.sort('synset_id')['name'].values
[('cat', '0.44353'), ('horse', '0.25014'), ('dog', '0.11833'), ('bird', '0.04582'), ('airplane', '0.03904')]
上面标明了各个分类的顺序和置信度
Saving results into foo
复制代码

 

Tips

最后,总结一下训练一个网络用到的相关文件:

cifar10_quick_solver.prototxt:方案配置,用于配置迭代次数等信息,训练时直接调用caffe train指定这个文件,就会开始训练

cifar10_quick_train_test.prototxt:训练网络配置,用来设置训练用的网络,这个文件的名字会在solver.prototxt里指定

cifar10_quick_iter_4000.caffemodel.h5:训练出来的模型,后面就用这个模型来做分类

cifar10_quick_iter_4000.solverstate.h5:也是训练出来的,应该是用来中断后继续训练用的文件

cifar10_quick.prototxt:分类用的网络


模型介绍

模型描述在examples/cifar10/cifar10_quick_solver.prototxt 和 examples/cifar10/cifar10_quick_train_test.prototxt 中。

模型训练是 执行 train_quick.sh

猜你喜欢

转载自blog.csdn.net/menglanzeng/article/details/80297833