python与caffe改变通道顺序的方法


Posted in Python onAugust 04, 2018

把通道放在前面:

image = cv2.imread(path + file)

image = cv2.resize(image, (48, 48), interpolation=cv2.INTER_CUBIC) aaaa= np.transpose(image,(2, 0, 1)) print(aaaa)

图像原来shape:(48, 48, 3),改之后shape:(3,48,48)

注意:reshape不能解决通道转换问题

pycaffe做识别时通道转换问题:

要注意一点的就是:Caffe中彩色图像的通道是BGR格式,图像存储是【0,255】

1.caffe.io.load_image方式 view plai cop

image = caffe.io.load_image(image_file) #加载图片

使用caffe.io.load_image()读进来的是RGB格式和0~1(float)

所以在进行识别之前要在transformer中设置transformer.set_raw_scale('data',255)(缩放至0~255)

以及transformer.set_channel_swap('data',(2,1,0)(将RGB变换到BGR)

# python中将图片存储为[0, 1],而caffe中将图片存储为[0, 255],所以需要一个转换 
transformer.set_raw_scale('data', 255)  # 缩放到[0,255]之间 
transformer.set_channel_swap('data', (2,1,0)) #交换通道,将图片由RGB变为BGR(caffe中图片是BGR格式,而原始格式是RGB,所以要转化)

2.使用cv2.imread()来读取图片

cv2.imread()接口读图像,读进来直接是BGR 格式and 0~255

所以不需要再缩放到【0,255】和通道变换【2,1,0】,不需要transformer.set_raw_scale('data',255)和transformer.set_channel_swap('data',(2,1,0))

3.使用PIL来读取图片

对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”。所以需要转换格式,但不需要缩放到[0,255]

data = np.array(Image.open(self.dataRoot+img_list)) 
data = np.transpose(data,(2,0,1))#转换通道 
data[[0,2],...] = data[[2,0],...] #RGB→BGR

4.对于matlab来说

Caffe中的blobs格式是N*C*H*W,分别是数量Number,通道数Channel,以及宽度Height和宽度Width

而matlab中是先宽后高,即[w,h],图像的通道是RGB

所以需要进行相应的转换:

im_data = im (:,:,[3,2,1]) ; %RGB to BGR

im_data = permute(im_data, [2,1,3]); %旋转高度和宽度

最后,分享一个Caffe的典型python识别代码:

# -*- coding: utf-8 -*- 
""" 
Created on Sun May 28 16:00:47 2017 
@author: fancp,#windows下CPU模式 
""" 
import numpy as np 
import caffe 
import sys 
caffe_root = 'F:/Caffe' #########你自己的Caffe路径 
sys.path.insert(0, caffe_root + '/python') 
 
size = 227 #训练的图片尺寸 
image_file = 'F:/.../.../nihao.jpg'#图片路径 
model_def = 'F:/.../.../deploy.prototxt'#deploy模型文件位置 
model_weights = 'F:/.../.../_iter_20000.caffemodel'#训练完的模型位置 
net = caffe.Net(model_def, model_weights, caffe.TEST)  
 
# 加载均值文件 
mu = np.load(caffe_root + '/python/caffe/imagenet/ilsvrc_2012_mean.npy') ###caffe 自带的文件 
mu = mu.mean(1).mean(1) # average over pixels to obtain the mean (BGR) pixel values 
###########################下面这5句等同与上面两句,选择其一################# 
#blob = caffe.proto.caffe_pb2.BlobProto() 
#mean_data = open( 'mean.binaryproto' , 'rb' ).read() 
#blob.ParseFromString(mean_data) 
#mu = np.array(caffe.io.blobproto_to_array(blob)) 
#mu = mu.mean(1).mean(1).mean(1) 
############################################################################## 
#图片预处理 
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) ##设定图片的shape格式(1,3,227,227),大小由deploy 文件指定 
# python读取的图片文件格式为H×W×K,需转化为K×H×W 
transformer.set_transpose('data', (2,0,1)) #改变维度的顺序,由原始图片(227,227,3)变为(3,227,227) 
transformer.set_mean('data', mu)   # 每个通道减去均值 
 
# python中将图片存储为[0, 1],而caffe中将图片存储为[0, 255],所以需要一个转换 
transformer.set_raw_scale('data', 255)  # 缩放到【0,255】之间 
transformer.set_channel_swap('data', (2,1,0)) #交换通道,将图片由RGB变为BGR(caffe中图片是BGR格式,而原始格式是RGB,所以要转化) 
net.blobs['data'].reshape(1,3,size, size) # 将输入图片格式转化为合适格式(与deploy文件相同) 
#上面这句,第一参数:图片数量 第二个参数 :通道数 第三个参数:图片高度 第四个参数:图片宽度 
 
image = caffe.io.load_image(image_file) #加载图片 
# 用上面的transformer.preprocess来处理刚刚加载图片 
net.blobs['data'].data[...] = transformer.preprocess('data', image)  
 
### perform classification 
caffe.set_mode_cpu() 
output = net.forward() 
#print output 
output_prob = output['prob'][0].argmax() # 给出概率最高的是第几类,需要自己对应到我们约定的类别去

以上这篇python与caffe改变通道顺序的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现网站的模拟登录
Jan 04 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python随机数分布random测试
Aug 27 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
Python何时应该使用Lambda函数
Jul 02 Python
Python APScheduler执行使用方法详解
Dec 10 Python
如何用Django处理gzip数据流
Jan 29 Python
python - asyncio异步编程
Apr 06 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 #Python
python list转矩阵的实例讲解
Aug 04 #Python
Python 生成 -1~1 之间的随机数矩阵方法
Aug 04 #Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 #Python
Python中矩阵创建和矩阵运算方法
Aug 04 #Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 #Python
python生成1行四列全2矩阵的方法
Aug 04 #Python
You might like
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
python计算最小优先级队列代码分享
2013/12/18 Python
学生信息管理系统python版
2018/10/17 Python
Python的互斥锁与信号量详解
2019/09/12 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
市场营销调查计划书
2014/05/02 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS