caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

时间:2024-03-20 20:19:17

前言:

    前面介绍了在win10系统下搭建caffe的环境,其中也讲述了包括caffe对 python的接口支持,环境搭建成功后会在..\caffe-master\Build\x64\Release\下生成如下文件


caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

并且在pycaffe目录下有caffe文件,caffe文件里面是如下文件,那么caffe对python的接口就成功了。

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

上面caffe对python的接口,我会在后面的一个测试样例中用到。下面先介绍三个样例关于对生成的caffe工具的检测。

一、mnist手写数据集的测试

    MNIST数据库介绍:MNIST是一个手写数字数据库,它有60000个训练样本集和10000个测试样本集。它是NIST数据库的一个子集。

    首先要先下载该手写数据图片,..\..\caffe-master\data\mnist\目录下有个get_mnist.sh脚本,直接运行脚本即可在该目录下下载4个压缩包文件,解压后发现是二进制文件。脚本和文件如下所示:

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

因为数据分为训练数据和测试数据,并且caffe需要的数据是lmdb格式的,因此还需要讲二进制文件转变成lmdb格式的caffe可以使用的格式。在上图已经看到creat_mnist.bat脚本,里面使用了convert_mnist_data.exe(这个工具在编译caffe源码成功后就会生成,..\caffe-master\Build\x64\Release\目录下)工具。

    caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

在此脚本中,可以看到分别生成了mnist_train_lmdb和mnist_test_lmdb文件,这里面存放的就是caffe可以识别的数据格式。生成的目录放在example\mnist下面。因为mnist没有必要再求均值,因此下面就可以配置solver.prototxt和train_test.prototxt文件了,第一个而是参数配置文件,里面包含基础学习率、迭代次数等重要信息,第二个是网络配置文件,里面包含网络的层数以及每层的参数,不同的架构的网络配置文件是不同的。

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

数据和网络的配置文件都有了,接下来就是开始训练生成caffemodel了

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

最后双击运行,查看准确率。

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

可以看到跌倒了10000次,准确率0.991,生成的镜像保存在特定的目录下。

二、用图片训练自己的caffemodel

    上面的mnist测试最终迭代10000次生成了caffemodel,我们直接利用的是二进制文件生成的lmdb格式的数据,下面这个样例就是通过将图片转换成leveldb格式进而生成caffemodel。

1、准备图片,可以在该地址下载http://pan.baidu.com/s/1nuqlTnN 

2、下面需要为下载的图片生成一个列表,方便在生成lmdb的时候导入。

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

上面是对训练图片、测试图片生成了对应的列表文件,有了列表文件和实际的图片就可以将图片生成leveldb格式的数据。

..\..\Build\x64\Release\convert_imageset.exe --backend=leveldb --resize_width=256 --resize_height=256 E:\DeepLearn\example\caffe-master\data\re\ E:\DeepLearn\example\caffe-master\examples\myfile\train.txt E:\DeepLearn\example\caffe-master\examples\myfile\img_train_ldb
echo.
..\..\Build\x64\Release\convert_imageset.exe --backend=leveldb --resize_width=256 --resize_height=256 E:\DeepLearn\example\caffe-master\data\re\ E:\DeepLearn\example\caffe-master\examples\myfile\test.txt E:\DeepLearn\example\caffe-master\examples\myfile\img_test_ldb
pause

这两行代码分别是将训练数据和测试数据生产leveldb格式,用到的工具是convert_imageset.exe,数据格式是leveldb(leveldb和lmdb两种格式,leveldb更好点),图片的分辨率是256*256的,后面的三个参数分别是存放图片的路径以及图片对应的列表文件,最后一个是生成leveldb数据的存放路径。这个脚本如果运行报错,请检测脚本中是否有多余的空格。

现在生成了leveldb格式的数据,下面为了提高图片的鉴别准确率,还需要求出图片的均值文件。

..\..\Build\x64\Release\compute_image_mean.exe --backend=leveldb E:\DeepLearn\example\caffe-master\examples\myfile\img_train_ldb E:\DeepLearn\example\caffe-master\examples\myfile\train_mean.binaryproto
echo.
..\..\Build\x64\Release\compute_image_mean.exe --backend=leveldb E:\DeepLearn\example\caffe-master\examples\myfile\img_test_ldb E:\DeepLearn\example\caffe-master\examples\myfile\test_mean.binaryproto
pause

这两行代码分别是求出训练图片和测试图片的均值文件,生成的文件是二进制的格式,用到的工具是compute_image_mean.exe,数据的格式是leveldb格式的,后面两个参数一个是存放leveldb格式数据的路径另外一个是生成对应的二进制均值文件。这个均值文件是用在网络配置文件train_test.prototxt中的。

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

接下来的过程应该就熟悉了,配置文件和网络配置文件上面的例子中都提到过了,可以自己找想对应的网络框架生成对应的model,网络框架以及配置文件和网络配置文件可以参考..\..\caffe-master\models\下的几种框架,有alexnet、googlenet、caffenet等

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

最后就是选择上面的框架来配置自己的文件,最后写个bat脚本运行,代码为.\Build\x64\Release\caffe.exe train --solver=.\examples\myfile\solver.prototxt。

三、利用生成的model对图片进行分类

首先要先整理下对图片分类需要什么:

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

在该.py代码中需要的,上面或者上文都提到过。如何搭建pycaffe上篇文章已经提到过。

1、测试的网络配置文件  你在选择网络框架的时候里面会有deploy.prototxt文件

2、生成的caffemodel就是上个样例中你生成的model

3、图片的均值文件

4、npy文件  代码中用到的是npy文件,因此需要将图片的均值文件转换成npy文件

5、测试图片

6、标签文件 上面在生成训练和测试的时候生成的flag.txt就是标签文件

好了,到此也就结束了 python xx.py文件  就能在最后看到对你测试的图片的分类了

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

上面显示了5中可能行最大的种类,是按照可能性最大的往下排列的,也就是第一种的可能性最大。前面的数字表示的是标签文件的行号,nxxxx表示的是类别的号(自定义的) 最后的名字表示对自定义的类别号的解释。

好了,祝好运。