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中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
Python中的with...as用法介绍
May 28 Python
python获取文件扩展名的方法
Jul 06 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Python微医挂号网医生数据抓取
Jan 24 Python
python 同时读取多个文件的例子
Jul 16 Python
python根据多个文件名批量查找文件
Aug 13 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
高考考python编程是真的吗
Jul 20 Python
Python读取ini配置文件传参的简单示例
Jan 05 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 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
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
python3中的md5加密实例
2018/05/29 Python
python中的二维列表实例详解
2018/06/19 Python
python装饰器常见使用方法分析
2019/06/26 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
挖掘机司机岗位职责
2014/02/12 职场文书
公司承诺书格式
2014/05/21 职场文书
火锅店的活动方案
2014/08/15 职场文书
环保项目建议书
2014/08/26 职场文书
新员工考核评语
2014/12/31 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
创业计划书之废品回收
2019/09/26 职场文书
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL