caffe-python

#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进去
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值