用训练好的caffemodel对单个/批量图片进行分类
一、单个图片进行分类
这个比较简单,在*.bat文件中输入以下代码:
@echo off
set BIN_DIR=D:\caffe\caffe-windows\Build\x64\Release
set DEPLOY_DIR=D:\gaokun\caffe_train_test_tool
set CAFFEMODEL_DIR=D:\ChineseCharacterdata\caffemodel\HCL_1_800_HWDB_Train_3232
set MEAN_DIR=D:\ChineseCharacterdata\HCL_1_800_HWDB_Train_3232
set LABEL_DIR=D:\gaokun\caffe_train_test_tool
set IMG_DIR=D:\gaokun\testImg\Img
echo "run classification caffe ... !"
%BIN_DIR%/classification.exe %DEPLOY_DIR%\*.prototxt %CAFFEMODEL_DIR%\*.caffemodel %MEAN_DIR%\mean.binaryproto %LABEL_DIR%\synset_words.txt %IMG_DIR%\*.png
设置好相关路径后,双击*.bat文件即可运行。
二、批量对图片进行分类
在对单个图片进行分类就想知道如何批量对图片进行分类。自己搜索了一些资料,发现需要调用python,使用python文件实现目的。
下面是批量对图片进行分类的代码(自己修改):
#coding=utf-8
#作用:可以用来批处理图片进行分类 import os
import caffe
import numpy as np root='C:/Users/Administrator/Desktop/' #根目录
deploy=root+'11/alexnet.prototxt' #deploy文件的路径
caffe_model=root+'11/HCL_1_800_HWDB_Train_3232_iter_480000.caffemodel' #caffe_model的路径
mean_file=root+'11/mean.npy' #mean_file的路径--注意,在python中要将mean.binaryproto转换为mean.npy格式
labels_filename=root+'11/synset_words.txt' #sysset_words.txt的路径 #预读待分类的图片
import os
dir=root+'Img/'
filelist=[]
filenames=os.listdir(dir) #返回指定目录下的所有文件和目录名
for fn in filenames:
fullfilename=os.path.join(dir,fn) #os.path.join--拼接路径
filelist.append(fullfilename) #filelist里存储每个图片的路径 net=caffe.Net(deploy,caffe_model,caffe.TEST) #加载model和network #图片预处理设置
transformer=caffe.io.Transformer({'data':net.blobs['data'].data.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 #加载图片
for i in range(0,len(filelist)):
img=filelist[i] #获取当前图片的路径
print filenames[i] #打印当前图片的名称 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['prob'].data[0].flatten() #取出最后一层(prob)属于某个类标的概率值,'prob'为最后一层的名称 #print prob
index1=prob.argsort()[-1] #获取最大概率值对应的index
index2=prob.argsort()[-2] #获取第二大概率值对应的index
index3=prob.argsort()[-3] #获取第三大概率值对应的index
index4=prob.argsort()[-4] #获取第四大概率值对应的index print labels[index1],'--',prob[index1] #输出label--prob
print labels[index2],'--',prob[index2]
print labels[index3],'--',prob[index3]
print labels[index4],'--',prob[index4]
在这里需要注意是:
(1) "import caffe"的前提是需要编译了pycaffe,具体可以看我的caffe小问题汇总(持续更新)第5个问题
(2) 在这里均值文件mean.binaryproto需要转换为mean.npy文件,其python代码如下:
#!/usr/bin/env python--将mean.binaryproto文件转为python可以使用的mean.npy文件
import numpy as np
import sys,caffe root='C:/Users/Administrator/Desktop/11/' #设置根目录
mean_proto_path=root+'mean.binaryproto' #mean.binaryproto路径
mean_npy_path=root+'mean.npy' #mean.npy路径 blob=caffe.proto.caffe_pb2.BlobProto() #创建protobuf blob
data=open(mean_proto_path,'rb').read() #读入mean.binaryproto文件内容
blob.ParseFromString(data) #解析文件内容到blob array=np.array(caffe.io.blobproto_to_array(blob)) #将blob中的均值转换称numpy格式,array的shape(mean_number,channel,hight,width)
mean_npy=array[0] #一个array中可以有多组均值存在,故需要通过下标选择一组均值
np.save(mean_npy_path,mean_npy) #保存
如此,只要设定相关的路径,即可利用训练好的caffemodel对图片进行批量分类。
用训练好的caffemodel对单个/批量图片进行分类的更多相关文章
- Caffe学习系列(20):用训练好的caffemodel来进行分类
caffe程序自带有一张小猫图片,存放路径为caffe根目录下的 examples/images/cat.jpg, 如果我们想用一个训练好的caffemodel来对这张图片进行分类,那该怎么办呢? 如 ...
- 用训练好的caffemodel来进行分类
caffe程序自带有一张小猫图片,存放路径为caffe根目录下的 examples/images/cat.jpg, 如果我们想用一个训练好的caffemodel来对这张图片进行分类,那该怎么办呢? 如 ...
- 【神经网络与深度学习】用训练好的caffemodel来进行分类
现在我正在利用imagenet进行finetune训练,待训练好模型,下一步就是利用模型进行分类.故转载一些较有效的相关博客. 博客来源:http://www.cnblogs.com/denny402 ...
- 从零到一:caffe-windows(CPU)配置与利用mnist数据集训练第一个caffemodel
一.前言 本文会详细地阐述caffe-windows的配置教程.由于博主自己也只是个在校学生,目前也写不了太深入的东西,所以准备从最基础的开始一步步来.个人的计划是分成配置和运行官方教程,利用自己的数 ...
- caffe训练自己的图片进行分类预测--windows平台
caffe训练自己的图片进行分类预测 标签: caffe预测 2017-03-08 21:17 273人阅读 评论(0) 收藏 举报 分类: caffe之旅(4) 版权声明:本文为博主原创文章,未 ...
- 如何大批量的识别图片上的文字,批量图片文字识别OCR软件系统
软件不需要安装,直接双击打开就可以用,废话不多说直接上图好了,方便说明问题 批量图片OCR(批量名片识别.批量照片识别等)识别,然后就下来研究了一下,下面是成果 使用步骤:打开单个图片识别,导入文件夹 ...
- Python批量图片识别并翻译——我用python给女朋友翻译化妆品标签
Python批量图片识别并翻译--我用python给女朋友翻译化妆品标签 最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签.美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻 ...
- 用C#开发一个WinForm版的批量图片压缩工具
我们在实际项目开发过程中,曾经遇到过一个需求,就是要开发一个对大量图片进行整理(删除掉一些不符合要求的图片).归类(根据格式进行分类,比如jpg格式.bmp格式等).压缩(因为有的图片很大很占空间,看 ...
- Android批量图片载入经典系列——使用LruCache、AsyncTask缓存并异步载入图片
一.问题描写叙述 使用LruCache.AsyncTask实现批量图片的载入并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)载入图片,并放入缓存中 2.及时 ...
随机推荐
- IntelliJ IDEA 控制台中文乱码
1. 预热 刚刚接触IntelliJ IDEA几天,在易用性方面的确比Eclipse好很多,比较智能,各种插件.工具都已经集成,和Mac OS X类似——开箱即用. 但是还是老大难问题——中文乱码,让 ...
- jsp+servlet实现文件上传
上传(上传不能使用BaseServlet) 1. 上传对表单限制 * method="post" * enctype="multipart/form-data" ...
- lucene 查询
csdn blog - Lucene 3.0 的Query Parser(查询语法) ibm developerWorks - 使用 Apache Lucene 2.4.1 搜索文本 osch ...
- VB的第一个项目
前言-----本人也是刚刚接触VB,企业的VB代码基本能看的懂,但是自己开发,只能呵呵.一般在刚学习一门新的语言时,很容易发生一些自己相当然的认识错误,so,记下并分享开发学习的过程,望指正.--- ...
- Android布局中match_parent和fill_parent的差别
今天在做项目的一个新功能的时候,从网上查找资源,发现android2.2中出现的MATCH_PARENT感到不明确.过去仅仅有FILL_PARENT和WRAP_CONTENT那么match_paren ...
- sklearn-GBDT 调参
1. scikit-learn GBDT类库概述 在sacikit-learn中,GradientBoostingClassifier为GBDT的分类类, 而GradientBoostingRegre ...
- Sklearn 中的 CrossValidation 交叉验证
1. 交叉验证概述 进行模型验证的一个重要目的是要选出一个最合适的模型,对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果. 最先 ...
- Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?
Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题? 问题症状描述 Activity 在AndroidManifest.xml里设置andro ...
- android动画具体解释二 属性动画原理
property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字 ...
- Atitit eclipse新特性总结3.1---4.4 4.5
Atititeclipse新特性总结3.1---4.4 4.5 1. Eclipse 4.4 Luna正式发布了.1 1.1. 新版本的Eclipse默认对Java8提供支持1 1.2. 内存分析器 ...