您的位置:首页 > Web前端

Caffe学习:pycaffe利用caffemodel进行分类

2015-09-10 14:17 513 查看

使用pycaffe定义网络使用pycaffe进行网络训练与测试之后得到
caffemodel
文件,下面利用
caffemodel
进行分类:

导入相关库

import caffe


配置

# caffemodel文件
MODEL_FILE = 'model/_iter_10000.caffemodel'
# deploy文件,参考/caffe/models/bvlc_alexnet/deploy.prototxt
DEPLOY_FILE = 'deploy.prototxt'
# 测试图片存放文件夹
TEST_ROOT = 'datas/'


GPU模式测试

caffe.set_mode_gpu()
net = caffe.Net(DEPLOY_FILE, MODEL_FILE, caffe.TEST)


数据输入预处理

# 'data'对应于deploy文件:
# input: "data"
# input_dim: 1
# input_dim: 3
# input_dim: 32
# input_dim: 96
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
# python读取的图片文件格式为H×W×K,需转化为K×H×W
transformer.set_transpose('data', (2, 0, 1))
# python中将图片存储为[0, 1],而caffe中将图片存储为[0, 255],
# 所以需要一个转换
transformer.set_raw_scale('data', 255)
# caffe中图片是BGR格式,而原始格式是RGB,所以要转化
transformer.set_channel_swap('data', (2, 1, 0))
# 将输入图片格式转化为合适格式(与deploy文件相同)
net.blobs['data'].reshape(1, 3, 32, 96)


读取图片

# 详见/caffe/python/caffe/io.py
img = caffe.io.load_image('temp.jpg')
# 读取的图片文件格式为H×W×K,需转化


进行分类

# 数据输入、预处理
net.blobs['data'].data[...] = transformer.preprocess('data', img)
# 前向迭代,即分类
out = net.forward()
# 输出结果为各个可能分类的概率分布
pridects = out['prob']
# 上述'prob'来源于deploy文件:
# layer {
#   name: "prob"
#   type: "Softmax"
#   bottom: "ip2"
#   top: "prob"
# }


最可能分类

pridect = pridects.argmax()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: