caffe学习:利用已训练的ceffemodel进行分类(单个图片)

caffe学习:利用已训练的ceffemodel进行分类(单个图片)

主要参考了以下链接:https://blog.csdn.net/jnulzl/article/details/52077915

在得到训练好了的ceffemodel后, 希望对任意一张图片进行分类/测试. 但不管用C++接口还是pyton接口来实现, 也不论是自己训练得到的caffemodel还是从其他地方获取的,都应该准备好三个文件: caffemodel、均值文件、synset_words.txt文件。

这里以官方提供的ceffemodel来说明,如果是自己训练得到的caffemodel那么关注下面的接口实现方法即可。

1、caffemodel文件

可通过脚本文件下载

sudo ./scripts/download_model_binary.py models/bvlc_reference_caffenet

可直接通过url下载

目前公开的caffemodel
Model Zoo

Caffe model index

下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel

文件名称:bvlc_refernce_caffenet.caffemodel, 约230M左右, 为了代码的统一,将这个caffemodel文件下载到caffe根目录下的models/bvlc_reference_caffenet/ 文件夹下面

2、均值文件

在测试阶段,需要把测试数据减去均值。该文件通过脚本下载, 在ceffe根目录下执行:

sudo sh ./data/lisvrc12/get_lisvrc_aux.sh

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

如果是自己的数据集,则可通过图片数据的均值计算得到均值文件

3、synset_words.txt文件

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

python接口

4、编写一个py文件,保存在/caffe/python目录下,命名为py-classify.py

#coding=utf-8
#加载必要的库
import numpy as np

import sys,os

#设置当前目录
caffe_root = '/home/lxw/caffe/' 
sys.path.insert(0, caffe_root + 'python')
import caffe
os.chdir(caffe_root)

net_file=caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt' 
caffe_model=caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'

mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy'


net = caffe.Net(net_file,caffe_model,caffe.TEST) 
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1)) 
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1)) 
transformer.set_raw_scale('data', 255) 
transformer.set_channel_swap('data', (2,1,0))


im=caffe.io.load_image(caffe_root+'examples/images/cat.jpg') 
net.blobs['data'].data[...] = transformer.preprocess('data',im) 
out = net.forward()


imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'
labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')


top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
    print top_k[i], labels[top_k[i]]

5、执行这个文件,在python目录下

sudo python py-classify.py

可能会出现的问题

在这里插入图片描述

解决方法:

sudo apt-get install python-tk

在这里插入图片描述

输出:

281 n02123045 tabby, tabby cat
282 n02123159 tiger cat
285 n02124075 Egyptian cat
277 n02119022 red fox, Vulpes vulpes
287 n02127052 lynx, catamount

猜你喜欢

转载自blog.csdn.net/qq_38784979/article/details/83268860