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中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
Python部署web开发程序的几种方法
May 05 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
Python分类测试代码实例汇总
Jul 23 Python
Python实现数字的格式化输出
Aug 01 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
pyqt5打包成exe可执行文件的方法
May 14 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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
python下os模块强大的重命名方法renames详解
2017/03/07 Python
Python解惑之整数比较详解
2017/04/24 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
什么是python的函数体
2020/06/19 Python
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
统计员岗位职责
2013/11/14 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
总经理秘书工作职责
2013/12/26 职场文书
中学生运动会口号
2014/06/07 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
大专护理专业自荐信
2015/03/25 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
MySQL系列之三 基础篇
2021/07/02 MySQL
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js