Caffe用训练好的caffemodel来进行分类

caffe程序自带有一张小猫图片,存放路径为 caffe根目录下的 examples/images/cat.jpg, 如果我们想用一个训练好的 caffemodel来对这张图片进行分类,那该怎么办呢? 如果不用这张小猫图片,换一张别的图片,又该怎么办呢?如果学会了小猫图片的分类,那么换成其它图片,程序实际上是一样的。

开发 caffe的贾大牛团队,利用 imagenet图片和 caffenet模型训练好了一个 caffemodel,供大家下载。要进行图片的分类,这个 caffemodel是最好不过的了。所以,不管是用 C++来进行分类,还是用 python接口来分类,我们都应该准备这样三个文件:

1. caffemodel文件

可以直接在浏览器里输入地址下载,也可以运行脚本文件下载。下载地址:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel

文件名称为: bvlc_reference_caffenet.caffemodel,文件大小为230M左右,为了代码的统一,将这个 caffemodel文件下载到 caffe根目录下的 models/bvlc_reference_caffenet/文件夹下面。也可以运行脚本文件进行下载:

2. 均值文件
有了 caffemodel文件,就需要对应的均值文件,在测试阶段,需要把测试数据减去均值。这个文件我们用脚本来下载,在caffe根目录下执行:

执行并下载后,均值文件放在 data/ilsvrc12/ 文件夹里。

3. synset_words.txt文件

在调用脚本文件下载均值的时候,这个文件也一并下载好了。里面放的是1000个类的名称。

数据准备好了,我们就可以开始分类了,我们给大家提供两个版本的分类方法:

一. C++方法

caffe根目录下的 examples/cpp-classification/文件夹下面,有个 classification.cpp文件,就是用来分类的。当然编译后,放在 /build/examples/cpp_classification/下面

我们就直接运行命令:

命令很长,用了很多的\符号来换行。可以看出,从第二行开始就是参数,每行一个,共需要4个参数

运行成功后,输出 top-5结果:

即有0.3134的概率为tabby cat, 有0.2380的概率为tiger cat ......

二. python方法

python接口可以使用 jupyter notebook来进行可视化操作,因此推荐使用这种方法。

在这里我就不用可视化了,编写一个 py文件,命名为 py-classify.py

对于 macOS Sierra (10.12.3)来说,需要设置 python环境,(参考源代码中的 python/requirements.txt),如下:

执行这个文件,输出:

caffe开发团队实际上也编写了一个python版本的分类文件,路径为 python/classify.py

运行这个文件必需两个参数,一个输入图片文件,一个输出结果文件。而且运行必须在 python目录下。假设当前目录是 caffe根目录,则运行:

分类的结果保存为当前目录下的result.npy文件里面,是看不见的。而且这个文件有错误,运行的时候,会提示

的错误。因此,要使用这个文件,我们还得进行修改:

1.修改均值计算:

定位到

这一行,在下面加上一行:

则可以解决报错的问题。

2.修改文件,使得结果显示在命令行下:

定位到

这个地方,在后面加上几行,如下所示:

就样就可以了。运行不会报错,而且结果会显示在命令行下面。

参考链接


Caffe学习系列(20):用训练好的caffemodel来进行分类