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中数字以及算数运算符的相关使用
Oct 12 Python
python 容器总结整理
Apr 04 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
浅谈Django的缓存机制
Aug 23 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Python Flask框架扩展操作示例
May 03 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
Python OrderedDict字典排序方法详解
May 21 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
python中添加模块导入路径的方法
Feb 03 Python
python中urllib包的网络请求教程
Apr 19 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
FleaPHP的安全设置方法
2008/09/15 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
取得传值的函数
2006/10/27 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
python绘图方法实例入门
2015/05/19 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
python编写俄罗斯方块
2020/03/13 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
机械设计专业应届生求职信
2013/11/21 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
2014年信访工作总结
2014/11/17 职场文书
党小组推荐意见
2015/06/02 职场文书
初中政教处工作总结
2015/08/12 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
MySQL之select、distinct、limit的使用
2021/11/11 MySQL