首页 > 编程知识 正文

caffe框架详解,caffe框架主要用来做啥

时间:2023-05-05 22:37:47 阅读:187670 作者:1069

此时应该有一个吐血的表情和一个累的要死的表情(在电脑前坐了一个下午+一个晚上)

然鹅,事情并没有什么进展

在得知服务器已经装有caffe之后,要运行起来却还是没想象中的顺利

刚开始import caffe就出现了问题(救命啊!!!)

先post一个hmdmt的专栏吧,也挺详细的

https://www.cnblogs.com/denny402/tag/caffe/

首先我是在ubuntu上做的,可是遇到了好像是内存不足的情况>>>

这就是我转战服务器的原因。(不过我也有点怀疑,是不是哪个文件设置错了,因为之前找照这个代码训练别的模型内存都还是够的)

老师提供的服务器配置还是很强大的,用的是CentOS 6的系统。

虽然配置很好,但由于各种原因,所以装的软件一般都不是最新版,或者是没有更新。

这就导致了我在import caffe时遇到的第二个问题(第一个问题是找不到caffe model,在~./bashrc里增加一行

export PYTHONPATH=/home/zhengzhihuang/caffe/python:$PYTHONPATH

就解决了)

就是出现了奇怪的语法错误!(忘记截屏了,反正就是挺稀罕的错误,以至于我找遍了百度 必应都没有和我一样的问题)

但是通过遍历了网上热心网友po出的各种错误之后,忽然感觉应该就是python版本与caffe不兼容的问题

因为caffe的配置一般用的python2.7或python3,但我输入python指令后显示的当前版本是2.6

当我决定要更新一下python的版本后,忽然发现,系统里已经有python2.7版的了(嘻嘻)

只是不是默认的python版本,所以当我使用python2.7命令运行.py文件后,就跳过语法错误了(yeah)

虽然服务器配置强大,但训练模型还是活生生跑了3个小时。。。

模型训练好之后就可以开始测试其他不在测试集的图片

但在这之前得先生成一个deploy文件,需要注意的是需要根据你的图片的大小改一下他的输入dim的值。

不然就会出现以下的错误>>

Cannot copy param 0 weights from layer 'InnerProduct1'; shape mismatch.  Source param shape is 500 744200 (372100000); target param shape is 500 800 (400000). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer.

post一个批量测试文件(python)只是在denny的单张测试上做一些改动>>>

#coding=utf-8import cv2import osimport caffeimport numpy as nproot='/home/zhengzhihuang/' #根目录deploy=root + 'mnist/deploy.prototxt' #deploy文件caffe_model=root + 'mnist/lenet_iter_9380.caffemodel' #训练好的 caffemodel#img=root+'mnist/test/8/8(1).png' #随机找的一张待测图片rootdir = root+'mnist/test2/'#The pictures to be testlabels_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###list1 = os.listdir(rootdir)right = 0.0total = 0.0chance = 0.0for i in range(0,len(list1)):path = os.path.join(rootdir,list1[i])list2 = os.listdir(path)for j in range(0,len(list2)):imgdir = os.path.join(path,list2[j])img=cv2.imread(imgdir)GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret,img_binary=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY)cv2.imwrite(imgdir,img_binary)im=caffe.io.load_image(imgdir) #加载图片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 proborder=prob.argsort()[-1] #将概率值排序,取出最大值所在的序号 #print 'the class is:',labels[order] #将该序号转换成对应的类别名称,并打印if labels[order] == list1[i]:right = right+1else:print list2[j],labels[order]total = total+1chance = right/totalprint 'right is:',rightprint 'total is:',totalprint 'chance is:',chance

测试结果:

`````准确率才0.5,还是算了

可是。。。事情远远还没有结束

发现没有?错的都是把no target识别成target

而且当我把所有的图片都测过以后发现,它把所有图片都识别成target!!!

所以no target都是错的 emmmm

找了好多csdn上的博客,再加上对比mnist数字识别示例,才发现>>>

类别名只能用从0开始的数字啊!

解决这个问题之后

又分别出现了loss值稳定在87.33和0.69的情况

稳定在87.33减小初始学习率就变成了稳定在0.69····

就是说这个网络已经收敛不了了

只能找别的方法提高识别的准确率

 

《番外》

顺便记录一下使用CentOS6的坑

这个系统切换全角和半角并不是用shift就能搞定

以至于我为了打冒号、括号和美元符号都得去网上搜然后粘贴上去······

直到有一天我终于尝试出来真正的切换快捷键crtl+shift

拷贝ctrl+fn+c 粘贴ctrl+fn+v

爽多了!

可是现在我又发现,之所以平常指令搞不定这些常用指令的原因:

因为我的运行平台--Mac+Parallels Desktop Windows10+CentOS

其实在一般的Windows远程连接服务器,常用指令都是可以工作的

>>>exit

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。