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演示数型数据结构的教程
Apr 03 Python
python如何通过protobuf实现rpc
Mar 06 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
pandas 透视表中文字段排序方法
Nov 16 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
适合Python初学者的一些编程技巧
Feb 12 Python
python序列类型种类详解
Feb 26 Python
python操作toml文件的示例代码
Nov 27 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
如何用Python编写一个电子考勤系统
Feb 08 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数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
详解PyTorch批训练及优化器比较
2018/04/28 Python
用python处理MS Word的实例讲解
2018/05/08 Python
Python版名片管理系统
2018/11/30 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
Python中if有多个条件处理方法
2020/02/26 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
pandas实现导出数据的四种方式
2020/12/13 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
自荐信的两点禁忌
2013/10/30 职场文书
文案策划求职信
2014/03/18 职场文书
公司会议策划方案
2014/05/17 职场文书
2014年教育工作总结
2014/11/26 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
民事上诉状范文
2015/05/22 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
详解Redis主从复制实践
2021/05/19 Redis