用训练好的caffe模型进行分类完整版

本文介绍如何使用Caffe框架和预训练模型对单张图片进行分类。内容包括所需文件配置、均值文件转换、分类代码实现及运行步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.基本材料:

                   ubuntu14.04;caffe环境;我的训练好的model:cifar_quick_iter_5000.caffemodel.h5;一张猫的图片cat.jpg。

二.文件配置:

                 需要文件清单:1.你的model  --我的是cifar10的model  : cifar_quick_iter_5000.caffemodel.h5    路径:~/data/cifar10/

                                         2.待测试图片 --cat.jpg        路径:~/examples/images/

                                         3.你的网络  *_deploy.prototxt 

                                         --注意不是用来训练和测试的那个文件(区别见http://blog.youkuaiyun.com/sunshine_in_moon/article/details/49472901)

                                         3.均值文件    --examples/cifar10/里面只有 mean.binaryproto这个二进制的,需要转换为npy文件!

                                         4.均值文件binaryproto转换为npy的代码(python实现)

                                         5.进行分类的classify.py文件  --这个文件在caffe/python/下,但是不好用会报错,因此换了个my_classify.py。

三.开始分类:

                  1.把二进制均值文件mean.binaryproto转换成mean.npy:建立一个switch.py如下:

                   

import sys,os
caffe_root ='/home/wangbo/caffe/' #开头三行是因为import caffe会报错
sys.path.insert(0,caffe_root + 'python')
import caffe
os.chdir(caffe_root)
import numpy as np


print "Usage: python convert_protomean.py proto.mean out.npy"
blob = caffe.proto.caffe_pb2.BlobProto()
BINARY_PROTO_FILE_NAME  ='mean.binaryproto' 
#二进制均值文件名称不必写地址你可以把它放到caffe根目录下
BINARY_PROTO_FILE_PATH  = os.path.join(os.getcwd(),BINARY_PROTO_FILE_NAME)
NPY_FILE_NAME  ='mean.npy'#转换后npy名称
NPY_FILE_PATH  = os.path.join(os.getcwd(),NPY_FILE_NAME)

data = open( BINARY_PROTO_FILE_PATH, 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( NPY_FILE_PATH , out )

   运行,注意注释部分,这样会在caffe根目录产生mean.npy文件。

2.在~/caffe/python/文件夹下建立,一个myclassify.py,用来分类单张图片,代码如下:

import numpy as np
#下面三行依然是为了不让import caffe报错,没有则忽略。
import sys,os
caffe_root ='/home/wangbo/caffe/'
sys.path.insert(0,caffe_root + 'python')
import caffe
os.chdir(caffe_root)

net_file = caffe_root +'examples/cifar10/cifar10_quick.prototxt'#这个是*_deploy.prototxt文件
caffe_model = caffe_root + 'data/cifar10/cifar10_quick_iter_5000.caffemodel.h5'#我的model
mean_file = caffe_root + 'examples/cifar10/mean.npy'#我们刚刚得到的均值文件,我把它放在examples

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()

#这个是类别的txt文件,自己制作的数据集和model的话这个也得自己制作,我采用的是cifar10里面现存的。
imagenet_labels_filename = caffe_root + 'data/cifar10/batches.meta.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]]  

拷贝的话注意文件路径,你都改成自己的就好。

3.我们打开终端,我们需要在python文件夹下运行my_classify.py,如果在caffe根目录,可以输入:

  cd python

  sudo python my_classify.py ./examples/images/cat,jpg   #注意更改你的带测图片位置。

四.输出效果:

   很正确啦,我这系统什么工具都没有,就不截图了。。。。。。。。不过没有输出概率,想要看每个类别概率的童鞋可自行查找代码。


                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值