GitHub代码地址:https://github.com/HandsomeHans/Use-Python-to-call-Caffe-module
mnist训练集是单通道的,所以有两个版本。有一些细节不同,但功能相同。思路是将图片丢进网络进行一次前向传播,通过最后softmax层得到对应每一类别的概率,取最大概率类。
caffe/python/classify.py 是调用caffe模块中Classifier类,其实这个类内容和上面方法思路是一样的。两种方法殊途同归。
还是要着重强调一件事:deploy.prototxt文件,强烈建议直接从train.prototxt改,最后一层名字是“prob”,输入维度是:1, 1, 28, 28
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 30 20:41:03 2017
@author: hans
"""
import caffe
import numpy as np
deploy='doc/deploy_lenet.prototxt' # 需要修改inout_dim: 1, 1, 28, 28
caffe_model='models/lenet_iter_10000.caffemodel'
img='doc/7.jpg'
labels_filename='doc/words.txt'
labels = np.loadtxt(labels_filename, str, delimiter='\t')
mean_file='doc/mnist_mean.npy'
net = caffe.Net(deploy, caffe_model, caffe.TEST)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #data blob 结构(n, k, h, w)
transformer.set_transpose('data', (2, 0, 1)) #改变图片维度顺序,(h, w, k) -> (k, h, w)
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data', 255) #将像素范围改成缩放到[0,1]
# transformer.set_channel_swap('data', (2, 1, 0)) # mnist单通道不需要转换
im = caffe.io.load_image(img) #加载图片
im = caffe.io.resize_image(im,(28,28,1)) # 修改图片尺寸维度
caffe_in = transformer.preprocess('data', im) #将处理好的数据放入caffe_in
out = net.forward(**{'data': caffe_in}) #将数据放入网络中进行一次前向传播
prob = out['prob'].reshape(10,) # 可以看出网络中blob都是以字典形式存储数据的。
# net.blobs['data'].data[...] = transformer.preprocess('data', im)#与上面功能相同
# net.forward()
# prob = net.blobs['prob'].data[0].flatten()
print prob
# print 'the class is:', labels[prob.argmax()], 'accuracy: ', prob[prob.argmax()] #跟下面两句话功能相同
order = prob.argsort()[-1]
print 'the class is:', labels[order], 'accuracy: ', prob[order]#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 30 20:41:03 2017
@author: hans
"""
import caffe
import numpy as np
deploy='.prototxt'
caffe_model='.caffemodel'
img='.jpg'
labels_filename='.txt'
mean_file='.npy'
net = caffe.Net(deploy, caffe_model, caffe.TEST)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #data blob 结构(n, k, w, h)
transformer.set_transpose('data', (2, 0, 1)) #改变图片维度顺序,(w, h, k) -> (k, w, h)
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data', 255)
transformer.set_channel_swap('data', (2, 1, 0)) # RGB -> BGR
im = caffe.io.load_image(img)
# 将处理好的数据放入网络中名为'data'的bolb内,就是放入net预分配的内存中。
net.blobs['data'].data[...] = transformer.preprocess('data', im)
out = net.forward() # 网络结构,模型和数据都已经准备好,无需加参数
labels = np.loadtxt(labels_filename, str, delimiter='\t')
prob = net.blobs['prob'].data[0].flatten()
print prob
# print 'the class is:', labels[prob.argmax()], 'accuracy: ', prob[prob.argmax()] #跟下面两句话功能相同
order = prob.argsort()[-1]
print 'the class is:', labels[order], 'accuracy: ', prob[order]本文转载自:https://www.cnblogs.com/denny402/p/5685909.html 用已经训练好的caffemodel模型,和deploy.prototxt文件,对一个新的图片进行分类预测。 我们从mnist数据集的test集中随便找一张图片,用来进行实验 ...
英文原文 https://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/pascal-multilabel-with-datalayer.ipynb 任务 Multilabel classification on PASCAL VOC using a Python data layer. ...
引言 记录学习官网的例程中的一些重要语句,遇到的问题等,内容分散,建议顺序查看。 主要是调用Caffe的Python接口 源文件就在{caffe_root}/examples中,安装sudo pip install jupyter打开即可运行,初学者最好是放在它指定的目录,如,否则要改很多路径。 注:eaxmples是用jupyter notebook写的,部分Cell中出现了一些特殊的用法: 1...
我的环境配置是python 3.6.2 + opencv 3.4.5。 下面是crowd counting计算人群密度图的代码。 dnn.blobFromImage(input_img,scalefactor, (width, height), mean, swapRB) mean和scalefactor是用来对图像做标准化的,先减均值,再乘以一个系数。images -= mean;images ...
1.首先需要搭配好caffe的运行环境,可参考我另一篇博客:http://blog.csdn.net/llwjason5555/article/details/62424085 2.打开codeblocks,建立工程,右击工程,选择Build options,Linker setting左边添加opencv动态库和/caffe/build/lib/libcaffe.so,右边添加 3.Search...
一个看似很简单的问题,折腾了我好久,今天恍然大悟,当然是自己太low,理解不够深入。 作为一个业余的小白,半年前配置了ubuntu 16.04 +CUDA8.0 +caffe+opencv 2.13 +CUDNN5.1环境,并顺利的跑通了SSD、FlowNet2....
https://blog.csdn.net/sinat_33718563/article/details/80245576 一个看似很简单的问题,折腾了我好久,今天恍然大悟,当然是自己太low,理解不够深入。 作为一个业余...
LeNet...
网上很多都是opencv写的,没办法gpu加速,我开始也用opencv写过,但是不加速运行很慢。没办法,亲自操刀写了一个利用caffe的python API进行caffe ssd模型预测的代码,代码在ubuntu16.04 caffe python2.7 cuda10.0+cudnn7.6.5运行成功。利用这个代码可以轻松扩展为摄像头。视频文件预测,代码写的有有点乱,嘿嘿,我故意的,请食用,祝您用...
常用的东西还是记下来,省的每次用的时候都要从头捋一遍。 本文是对用caffe做classification的inference流程的梳理。 做classification的主线: 从上面代码可看出做classification的主线是:构建网络→读入图像→Predict→输出结果。 做classification的类Classifier: Classifier构造函数...