caffe入门----pycaffe图片分类
来源:互联网 发布:做淘宝刷客的被骗经历 编辑:程序博客网 时间:2024/04/29 13:00
Blob
Blob是caffe用于存储和交换数据的基本单元。Blob在内存中,为[num_,channels_,height_,width_],可以想成视频流,width_和height_是图像的宽和高,channels_表示颜色通道RGB,num_表示第几帧。
Blob对象四个方法: data_(), diff_(), count_(),Update()
分别为获取数据,梯度,计算size,跟新(data=data-diff)。
propotxt
定义网络结构,训练或者测试的时候,先加载propotxt进行网络的构建。可以随机化初始参数,也可以用已经训练好的网络模型进行初始化(caffemodel)。要求用的caffemodel的网络layer命名和当前的propotxt一样,不一样的不会被按模型初始化。即初始化是“按名索参”
import numpy as npimport sys,oscaffe_root = '/home/yui/code/caffe/'sys.path.insert(0,caffe_root+'python')#目录转到python才能import caffeimport caffeos.chdir(caffe_root)net_file=caffe_root+'models/bvlc_reference_caffenet/deploy.prototxt' caffe_model=caffe_root+'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel' mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy' net = caffe.Net(net_file,caffe_model,caffe.TEST) # 得到data的形状,这里的图片是默认matplotlib底层加载的 transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) # matplotlib加载的image是像素[0-1],图片的数据格式[weight,high,channels],RGB # caffe加载的图片需要的是[0-255]像素,数据格式[channels,weight,high],BGR,那么就需要转换 # channel 放到前面 transformer.set_transpose('data', (2,0,1)) transformer.set_mean('data', np.load(mean_file).mean(1).mean(1)) # 图片像素放大到[0-255] transformer.set_raw_scale('data', 255) # RGB-->BGR 转换 transformer.set_channel_swap('data', (2,1,0)) #加载图片 im=caffe.io.load_image(caffe_root+'examples/images/cat.jpg') #处理并且输入net.blobs['data'].data[...] = transformer.preprocess('data',im) #正向传播output = net.forward() #获取输出信息output_prob = output['prob'][0] print 'predicted class is:', output_prob.argmax() # 也可以找出前五名的概率 top_inds = output_prob.argsort()[::-1][:5] print 'probabilities and labels:' imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt' labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t') zip(output_prob[top_inds], labels[top_inds]) top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1] for i in np.arange(top_k.size): print top_k[i], labels[top_k[i]]
解读
net = caffe.Net(net_file,caffe_model,caffe.TEST)
这里是初始化网络,指定图纸(propotxt),训练好的模型,初始化方法(test)。这里指定test是因为有的网络训练的时候和test的时候是不一样的网络结构。
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
这里调用了caffe.io.Tansformer类,参数为网络‘data’的形状。我们看propotxt里有:
layer { name: "data" type: "Input" top: "data" input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }}
运行之后:
(Pdb) p transformer.inputs{'data': (10, 3, 227, 227)}
把channel放到前面:
transformer.set_transpose('data', (2,0,1))
运行之后:
(Pdb) p transformer.transpose{'data': (2, 0, 1)}
获取正向传播的softmax分类信息:
output_prob = output['prob'][0]
在propotxt里,prob为:(Pdb) n
predicted class is: 281
layer { name: "prob" type: "Softmax" bottom: "fc8" top: "prob"}
prob为1000维的数组,我们看最大的是那个分类:
predicted class is: 281
参考:
http://blog.csdn.net/liyaohhh/article/details/50932430
0 0
- caffe入门----pycaffe图片分类
- Caffe学习:pycaffe利用caffemodel进行分类=>裁剪图片
- Caffe学习:pycaffe利用caffemodel进行分类=>裁剪图片
- Caffe学习:pycaffe利用caffemodel进行分类
- Caffe学习:pycaffe利用caffemodel进行分类
- caffe学习入门:pycaffe的使用
- caffe学习入门:pycaffe的使用
- caffe-pycaffe
- pycaffe预测非图片数据分类
- Caffe学习:pycaffe利用caffemodel进行分类(2)
- Caffe学习:pycaffe利用caffemodel进行分类=>批处理
- Caffe学习:pycaffe利用caffemodel进行分类=>批处理
- Caffe学习:pycaffe利用caffemodel进行分类(2)
- Caffe图片分类
- Caffe&&pycaffe安装笔记
- caffe:pycaffe的使用
- caffe之pycaffe接口
- 使用Caffe进行图片分类
- Android开发 adb命令提示:Permission denied
- 用户管理系统网站框架改进之MVC模式
- Oracle PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功)
- 2017/4/3 ACM会场安排问题
- CCF NOI1010 邮寄包裹
- caffe入门----pycaffe图片分类
- Ubuntu创建快捷方式具体步骤
- JMS之—— ActiveMQ中使用mysql做持久化报错:Cannot execute statement: impossible to write to binary log since BINL
- 二叉树 C实现
- HDU 4995 暴力
- [LeetCode] Unique Binary Search Trees n结点二叉搜索树的数目
- 单词变换
- C#选择文件、选择文件路径
- Ubuntu创建Android Studio快捷方式