用训练好的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.及时 ...
随机推荐
- eclipse sun.net 下包无法导入问题
项目中用到了:sun.net.ConnectionResetException.但是sun.net包里的类,在eclipse里默认是不让用的. 解决办法是自定义access rules 工程上右键-& ...
- 在虚拟机安装 Linux Server (ubuntu-14.04-server)
在虚拟机安装 Linux Server (ubuntu-14.04-server) 过程 从下载開始到成功安装历时约1小时 还算快的啦 可能国庆假期间网速快点吧 1. 下载安装文件 watermar ...
- react-native-scrollable-tab-view 实现 TabBar
1.创建组件 src/components/CustomTabBar/index.js /** * 自定义选项卡 */ import React, {Component} from 'react'; ...
- 【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)
re.math()函数 从源字符串的起始位置匹配一个模式 语法:re.match(pattern, string, flag) 第一个参数代表对应的正则表达式,第二个参数代表对应的源字符,第三个参数是 ...
- rabbitMq视频教程
http://edu.51cto.com/index.php?do=lesson&id=83136
- Keep-Alive简介及在Tomcat中配置
Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接.市场上 的大部分Web服务器,包括iPlanet.IIS和 ...
- Android设置拍照或者上传本地图片
效果例如以下: 看代码: MainActivity类中: package com.example.ceshidemo; import java.io.ByteArrayOutputStream; im ...
- 华为AR路由器AR207-S配置pppoe拨号上网图解实例
- spring启动加载过程源码分析
我们知道启动spring容器两常见的两种方式(其实都是加载spring容器的xml配置文件时启动的): 1.在应用程序下加载 ApplicationContext ctx = new ClassPat ...
- spring实现定时任务
今天在项目里需要实现一个定时任务,每隔3个小时将过滤的广告通过邮件上报给运营一次.考虑了一下,从实现的技术上可以有三种做法: 1.Java自带的java.util.Timer类,这个类允许调度一个ja ...