用已有的caffemodel和python脚本进…

2月13日更新:
在使用python脚本之前,首先需要在根目录make pycaffe,同时确保环境变量PYTHONPATH是指向当前caffe/python这一子目录下的,如果指向其他版本caffe的python目录,可能导致程序无法运行

==========================================================

当已有caffemodel之后,整个学习过程并没有结束,还有最后一个步骤——预测。这个也就是常见的deploy.txt这个文件的用处,打开文件可以看到,没有data_layer,只有一个inputdim,这是因为,这个文件不能单独运行,必须配合python或者c++的脚本来预处理数据,把数据变成第一个conv层能接受的形式,再输入到网络中。

下面就是一个简单的python预测脚本。根据TSP网络,一次输入三张图片, 分别用transformer转变后,统一赋给blob里面的'data'数组,就能作为网络的输入。需要注意的是,原TSP网络的dim四1、3、224、224,第一维是1,也就是只能输入一张图片,要输入3张的话,需要手动把第一个dim改成3。

import caffe 
caffe_root='/home/hadoop/whx/tsncaffe/'
data_root='/home/hadoop/whx/dataset/ucf101/ucf_videoframedata_jpeg/'
model_root='/home/hadoop/whx/exp-result/'
import numpy as np  
import scipy
import sys
import os

def rgb_predict()
net = caffe.Net(caffe_root + 'mywork/ucf101/tsn_bn_inception_rgb_deploy.prototxt',model_root +'2017-1-7/ucf_rgb_bn_inception_iter_80000.caffemodel',caffe.TEST)

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})#设置transformer
transformer.set_transpose('data', (2,0,1))#本来是224*224*3,改成3*224*224
transformer.set_mean('data', np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1))#读取均值文件
transformer.set_raw_scale('data', 255) #本来的像素值是0-1,扩展为0-255
transformer.set_channel_swap('data', (2,1,0)) #caffe接收的图片彩色通道应该是BGR这样排列,而原图是RGB格式

image1=caffe.io.load_image(data_root + 'PlayingViolin/v_PlayingViolin_g01_c01/frame000001.jpg')
image2=caffe.io.load_image(data_root + 'PlayingViolin/v_PlayingViolin_g01_c01/frame000010.jpg')
image3=caffe.io.load_image(data_root + 'PlayingViolin/v_PlayingViolin_g01_c01/frame000020.jpg')

net.blobs['data'].reshape(3,3,224,224)
net.blobs['data'].data[...] = [transformer.preprocess('data', image1),transformer.preprocess('data', image2),transformer.preprocess('data', image3)] #transformer设置的是3维(即针对单个图片)而不是4维,因此需要先transformer,再把转换后的3张图拼接在一起。
net.forward()

out = net.blobs['pool_fc'].data[...]
out = out[0][0][0]#得到的data[...]是一个(1,1,1,101)的四维数组,因此取最后一维即可
print out.argmax()+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值