#coding=utf-8
import caffe
import numpy as np
import os,sys
root='D:\caffe-master' #根目录
sys.path.insert(0,root+'\python')
os.chdir(root)
model_weights=root + '\models\_iter_30000.caffemodel' #训练好的 caffemodel
#model_weights='D:\lenet.caffemodel' #训练好的 caffemodel
if os.path.isfile(model_weights):
print 'CaffeNet found.'
else:
print 'Not FOUND CAFFE'
img='F:\pip\zzzz.jpg' #一张待测图片
im=caffe.io.load_image(img) #加载图片
labels_filename = root + '\models\synset_words1.txt' #类别名称文件,将数字标签转换回类别名称
caffe.set_mode_cpu() #设置caffe为cpu模式
#model_def=root + '\models\deploy.prototxt' #deploy文件
model_def= 'D:\mydeploy.prototxt' #deploy文件
net = caffe.Net(model_def,model_weights,caffe.TEST) #加载model和network
# 对输入数据进行变换
# caffe.io.transformer是一个类,实体化的时候构造函数__init__(self, inputs)给一个初值
# 其中net.blobs本身是一个字典,每一个key对应每一层的名字,#net.blobs['data'].data.shape计算结果为(10, 3, 227, 227)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #设定图片shape格式,有deploy文件指定
# 以下都是caffe.io.transformer类的函数方法
#caffe.io.transformer的类定义放在io.py文件中,也可用help函数查看说明
transformer.set_transpose('data', (2,0,1)) # 将图像通道数设置为outermost的维数 channel weight high
#transformer.set_mean('data', mu) # 每个通道减去均值
#transformer.set_raw_scale('data', 255) # 像素值从[0,1]变换为[0,255]
#transformer.set_channel_swap('data', (2,1,0)) # 交换通道,RGB->BGR
#net.blobs['data'].reshape(1,1,28,28) # 将输入图片格式转化为合适格式(与deploy文件相同)
#上面这句,第一参数:图片数量 第二个参数 :通道数 第三个参数:图片高度 第四个参数:图片宽度
im=caffe.io.load_image(img,False) #加载图片
#net.blobs['data'].data[...] = transformer.preprocess('data',im) #执行上面设置的图片预处理操作,并将图片载入到blob中
newImg = transformer.preprocess('data',im) #执行上面设置的图片预处理操作,并将图片载入到blob中
net.blobs['data'].reshape(1,1,28,28)
net.blobs['data'].data[...] = newImg #让网络模型的数据层获取预处理好的图像,要传入多张图像,参考numpy的教程,将图像堆叠成多维矩阵(图像数x通道x高x宽)。
#执行测试
out = net.forward()
遇到的问题,我的deploy文件shape是1 1 28 28 所以在加载图片的时候会有错,通过查看caffe.io的源码得知,我们加载灰度图,可以直接传入false进去
caffe-python
最新推荐文章于 2024-01-25 16:02:13 发布