caffe学习笔记(5)-------用python写测试单张图片并保存的程序

这两天真是泪千行。。。

训练网络成功后,为了看下效果,想要测试一下看看。

师兄说写个简单程序就好了。。。结果我几天还没弄出来--

找了无数教程,最后还是用的denny的代码终于跑出来了

1.首先第一天压根儿不知道测试程序里的prototxt是deploy,还傻乎乎的用train的程序。。。第二天才偶然发现。。然后就到处搜资料看deploy怎么写。。。师姐给了两个博客,讲的算比较清楚的

http://www.cnblogs.com/carle-09/p/5779304.html   以及   http://blog.csdn.net/fx409494616/article/details/53008971。。。

但是关于第一个层。。。第二个博客把我坑了。。。应该是

input: "data" input_dim: 1 input_dim: 3 input_dim: 32 input_dim: 32

这个样子的。第一个应该是数量,第二个是通道数,第三个和第四个是高度和宽度。。。。

2.然后刚开始我的程序是这样的

然而一直出错。。。于是我又改 啊改啊。。。复制粘贴了denny的程序:

#coding=utf-8

import caffe
import numpy as np
root='/home/xxx/'   #根目录
deploy=root + 'mnist/deploy.prototxt'    #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel'   #训练好的 caffemodel
img=root+'mnist/test/5/00008.png'    #随机找的一张待测图片
labels_filename = root + 'mnist/test/labels.txt'  #类别名称文件,将数字标签转换回类别名称

net = caffe.Net(deploy,caffe_model,caffe.TEST)   #加载model和network

#图片预处理设置
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})  #设定图片的shape格式(1,3,28,28)
transformer.set_transpose('data', (2,0,1))    #改变维度的顺序,由原始图片(28,28,3)变为(3,28,28)
#transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))    #减去均值,前面训练模型时没有减均值,这儿就不用
transformer.set_raw_scale('data', 255)    # 缩放到【0,255】之间
transformer.set_channel_swap('data', (2,1,0))   #交换通道,将图片由RGB变为BGR

im=caffe.io.load_image(img)                   #加载图片
net.blobs['data'].data[...] = transformer.preprocess('data',im)      #执行上面设置的图片预处理操作,并将图片载入到blob中

#执行测试
out = net.forward()

labels = np.loadtxt(labels_filename, str, delimiter='\t')   #读取类别名称文件
prob= net.blobs['Softmax1'].data[0].flatten() #取出最后一层(Softmax)属于某个类别的概率值,并打印
print prob
order=prob.argsort()[-1]  #将概率值排序,取出最大值所在的序号 
print 'the class is:',labels[order]   #将该序号转换成对应的类别名称,并打印

由于我的不是分类,做了一些改动。

再次运行:错误如下:由于我服务器里没有中文输入法,只能这样windows下截屏来记录。。

最开始我没仔细看报错(心里太着急,摔)我又直接去百度方法。。。然后改了一天也没什么进展。。。

晚饭时师兄跟我说建议我不要每次遇到问题就乱试各种乱七八糟的解决办法,而是先找出问题在哪儿,再去解决,可能我都可以解决了,就不会困在原地。。。。

我觉得说的很对,我心情太急躁了。。。吃完饭回来我仔细看报错。发现它的意思好像是说我有两个错误嘛,第一个就是要把net里的替换成它写的那样,然后我就替换了,

再次运行,果然只剩下第二个错误了:

这时候我已经很开心了哈哈哈!有种心静下来就会成功的感觉。。。。我接着看他说的错误,意思不就是说我deploy写的不对嘛。。。于是就像开头说的,我把deploy第一层由

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
}

  改为

input: "data"
 input_dim: 1
 input_dim: 3
 input_dim: 600
 input_dim: 800   #我的输入图片训练的时候就是600*800

  然后再次运行:又报错了,但是这次层都搭好了,就说我最后一层写错了,我是模仿第二个博主写的,因为我看他train.prototxt里面最后一层是SoftmaxWithLoss,但到了deploy就变成了下面这样

layer {
  name: "prob"
  type: "Softmax"
  bottom: "fc8"
  top: "prob"
}

  于是我 就自作聪明的把我最后一层原本是欧几里得loss中的"loss"去掉,只剩下欧几里得,它报错说没有这个函数,我又加上了"loss",然后再次运行

这时候实在百度也没答案,自己也看不懂就去问师姐了,,师姐过来帮我看了一下说这意思是说欧几里得损失函数是需要两个输入,我突然想起来它的定义就是两者之差的平方啊,我傻了。

训练的文件里一个输入是data另一个是label,这样计算两者差值,但现在我测试图片,没有label,就可以不要这一层,于是我删掉了最后一层,再跑,哈哈哈哈哈哈!跑通了!!!!

但是看不了结果。。。。所以我现在先把这些写好。。再去查怎么用python保存结果。。。弄好了再更哈哈哈哈哈。。好开森。。。连今天不能早睡我都没关系哈哈哈!

 

很抱歉。。最后我也没找到保存的方法。。只找到了可视化的方法。。

就是jupyter notebook

可视化也遇到了很多困难。。。当时没空写。。现在也懒得写了。。反正我毕设暂时不会用python了。。。

转战matlab

等我顺利毕业了再好好学!

转载于:https://www.cnblogs.com/echo741/p/6730803.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值