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 相关文章推荐
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
python实现一组典型数据格式转换
Dec 15 Python
python实现求特征选择的信息增益
Dec 18 Python
python3使用QQ邮箱发送邮件
May 20 Python
django 类视图的使用方法详解
Jul 24 Python
python函数不定长参数使用方法解析
Dec 14 Python
Python中os模块功能与用法详解
Feb 26 Python
python ETL工具 pyetl
Jun 07 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
python实现excel公式格式化的示例代码
Dec 23 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
python文件与路径操作神器 pathlib
Apr 01 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中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
PHP中使用curl入门教程
2015/07/02 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
js实现密码强度检验
2017/01/15 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
python opencv实现运动检测
2018/07/10 Python
Python多继承原理与用法示例
2018/08/23 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
Linux操作面试题
2015/02/11 面试题
前厅部经理岗位职责范文
2014/02/04 职场文书
学生请假条格式
2014/04/11 职场文书
施工协议书范本
2014/04/22 职场文书
财政局个人年终总结
2015/03/03 职场文书
党组织结对共建协议书
2016/03/23 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
Python测试框架pytest高阶用法全面详解
2022/06/01 Python