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实现定时同步本机与北京时间的方法
Mar 24 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
深入理解Python爬虫代理池服务
Feb 28 Python
Python输入二维数组方法
Apr 13 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
python3射线法判断点是否在多边形内
Jun 28 Python
django最快程序开发流程详解
Jul 19 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
python 基于wx实现音乐播放
Nov 24 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 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
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
Symfony查询方法实例小结
2017/06/28 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
一个可以显示阴历的JS代码
2007/03/05 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
对python生成业务报表的实例详解
2019/02/03 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
印度在线购物网站:Paytmmall
2019/07/24 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
Why we need EJB
2016/10/20 面试题
Ajax的优点和缺点
2014/11/21 面试题
工厂会计员职责
2014/02/06 职场文书
车间主任岗位职责
2014/03/16 职场文书
党建工作经验交流材料
2014/05/25 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
白酒代理协议书范本
2014/10/26 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
课外活动总结
2015/02/04 职场文书