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脚本来实现最简单的FTP下载的教程
May 04 Python
用Python设计一个经典小游戏
May 15 Python
使用requests库制作Python爬虫
Mar 25 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Django学习笔记之为Model添加Action
Apr 30 Python
python日期与时间戳的各种转换示例
Feb 12 Python
python super函数使用方法详解
Feb 14 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
python实现门限回归方式
Feb 29 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php中static和const关键字用法分析
2016/12/07 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
python实现红包裂变算法
2016/02/16 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
python 实现list或string按指定分段
2019/12/25 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
生物技术专业毕业生求职信范文
2013/12/14 职场文书
报到证丢失证明
2014/01/11 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
实习报告评语
2014/04/26 职场文书
家长学校工作方案
2014/05/07 职场文书
公司会议策划方案
2014/05/17 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
幼师自荐信范文
2015/03/06 职场文书
房租涨价通知
2015/04/23 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书