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使用socket进行简单网络连接的方法
Apr 29 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
详解python的数字类型变量与其方法
Nov 20 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
Python实现DDos攻击实例详解
Feb 02 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
python tkinter基本属性详解
Sep 16 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
python解释器安装教程的方法步骤
Jul 02 Python
浅析Python 条件控制语句
Jul 15 Python
如何用Python 加密文件
Sep 10 Python
手把手教你用Django执行原生SQL的方法
Feb 18 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、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
python操作文件的参数整理
2019/06/11 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
对Python _取log的几种方式小结
2019/07/25 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Python错误的处理方法
2020/06/23 Python
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
四下基层实施方案
2014/03/28 职场文书
平安工地建设方案
2014/05/06 职场文书
地方白酒代理协议书
2014/10/25 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android