caffe框架训练完成之后编写代码测试

deploy.prototxt文件与训练的文件的数据层不一样,没有数据源。
利用deploy.prototxt文件和caffemodel去做分类或者回归任务。
编写test_model.py进行测试模型,如下

#!/usr/bin/env python
#coding=utf-8
#因为需要sudo权限,只能作如下处理,自己添加caffe的位置,编译之后,然后用sudo权限运行该.py程序
import sys
caffe_root='/home/yourname/caffe/'
sys.path.insert(0, caffe_root+'python')
import caffe
import numpy as np
'''
这个测试模型可以帮助自己测试自己训练出来的模型效果如何
'''
caffe.set_mode_cpu()
# caffe.set_device(0)
 
#deploy文件就是用来测试训练好的网络的,给其输入,自己写测试来输出类别
model_def = '/home/dyh/caffe/caffe/models/bvlc_reference_caffenet/deploy.prototxt'
# model_def = '/home/dyh/caffe-workspace/face_detect/deploy_full_conv.prototxt'
model_weights = '/home/dyh/caffe-workspace/caffe_case/caffe_case模板/bvlc_reference_caffenet.caffemodel'
# model_weights = '/home/dyh/caffe-workspace/face_detect/model/solver_iter_25000.caffemodel'
 
net = caffe.Net(model_def, #测试的模型,caffe已经给出了,照着用
                model_weights,#训练好的参数
                caffe.TEST) #使用的模式
#加载均值文件,这个具有普遍性
mu = np.load('/home/dyh/caffe/caffe/python/caffe/imagenet/ilsvrc_2012_mean.npy')
mu = mu.mean(1).mean(1)
print 'mean-substracted values',zip('BGR',mu)

#接下来对输入图像进行一系列的预处理操作,因为在训练时的操作,在测试也应该进行相同的预处理操作
#建立transformer对图像进行操作,只对data层进行预处理操作
transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape})
#图像维度变换[h,w,c]->[c,h,w]
transformer.set_transpose('data', [2,0,1])
transformer.set_mean('data', mu) #减均值
transformer.set_raw_scale('data', 255)#变换到[0-1]
transformer.set_channel_swap('data', [2,1,0])#RGB->BGR
 
#按照caffe的输入格式reshape输入
net.blobs['data'].reshape(1, #batch,想一张的测试
                          3, #channel
                          227, #height
                          227) #weight
#读入图像 
img = caffe.io.load_image('/home/yourname/caffe/caffe/examples/images/cat.jpg')
# img = caffe.io.load_image('/home/yourname/caffe-workspace/face_detect/train/1/4_nonface_0image54477.jpg')
#将输入进行预处理达到ceffe的输入格式要求,也就是执行前面的设置
transformer_img = transformer.preprocess('data',img)
#让deploy里面的数据层接收到输入的图片
net.blobs['data'].data[...] = transformer_img
#前向传播一次就行
output = net.forward()
#在网络的最后一个层是输出的每个类别的概率,prob是层的名字,也可以输出其它层的参数
output_pro = output['prob'][0]
#概率最大的就是
print 'predict class is:',output_pro.argmax()
 
lables_path = '/home/dyh/caffe/caffe/data/ilsvrc12/synset_words.txt'
lables = np.loadtxt(lables_path, str,delimiter= '\t')#一行一行的读取并转换为ndarray
print lables[output_pro.argmax()]#第xx行是类别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值