pytorch 图像预处理之减去均值,除以方差的实例


Posted in Python onJanuary 02, 2020

如下所示:

pytorch 图像预处理之减去均值,除以方差的实例

#coding=gbk
'''
GPU上面的环境变化太复杂,这里我直接给出在笔记本CPU上面的运行时间结果

由于方式3需要将tensor转换到GPU上面,这一过程很消耗时间,大概需要十秒,故而果断抛弃这样的做法

img (168, 300, 3)
sub div in numpy,time 0.0110
sub div in torch.tensor,time 0.0070
sub div in torch.tensor with torchvision.transforms,time 0.0050
tensor1=tensor2
tensor2=tensor3


img (1079, 1349, 3)
sub div in numpy,time 0.1899
sub div in torch.tensor,time 0.1469
sub div in torch.tensor with torchvision.transforms,time 0.1109
tensor1=tensor2
tensor2=tensor3


耗时最久的是numpy,其次是转换成torch.tensor,最快的是直接使用torchvision.transforms
我现在在GPU上面跑的程序GPU利用率特别低(大多数时间维持在2%左右,只有很少数的时间超过80%)
然后设置打印点调试程序时发现,getitem()输出一张图像的时间在0.1秒的数量级,这对于GPU而言是非常慢的
因为GPU计算速度很快,CPU加载图像和预处理图像的速度赶不上GPU的计算速度,就会导致显卡大量时间处于空闲状态
经过对于图像I/O部分代码的定位,发现是使用numpy减去图像均值除以方差这一操作浪费了太多时间,而且输入图像的分辨率越大,
所消耗的时间就会更多
原则上,图像预处理每个阶段的时间需要维持在0.01秒的数量级

所以,

'''

import numpy as np
import time
import torch
import torchvision.transforms as transforms
import cv2
# img_path='/ssddata2/wyx/detection/ead_stage12/stage12_img/WL_00387.jpg'
img_path='F:\\2\\00004.jpg'
PIXEL_MEANS =(0.485, 0.456, 0.406)  #RGB format mean and variances
PIXEL_STDS = (0.229, 0.224, 0.225)

#输入文件路径,输出的应该是转换成torch.tensor的标准形式

#方式一  在numpy中进行减去均值除以方差,最后转换成torch.tensor
one_start=time.time()
img=cv2.imread(img_path)
img=img[:,:,::-1]
img=img.astype(np.float32, copy=False)
img/=255.0
img-=np.array(PIXEL_MEANS)
img/=np.array(PIXEL_STDS)
tensor1=torch.from_numpy(img.copy())
tensor1=tensor1.permute(2,0,1)
one_end=time.time()
print('sub div in numpy,time {:.4f}'.format(one_end-one_start))

del img

#方式二 转换成torch.tensor,再减去均值除以方差
two_start=time.time()
img=cv2.imread(img_path)
img=img[:,:,::-1]
print('img',img.shape,np.min(img),np.min(img))
tensor2=torch.from_numpy(img.copy()).float()
tensor2/=255.0
tensor2-=torch.tensor(PIXEL_MEANS)
tensor2/=torch.tensor(PIXEL_STDS)
tensor2=tensor2.permute(2,0,1)
two_end=time.time()
print('sub div in torch.tensor,time {:.4f}'.format(two_end-two_start))

del img

#方式三 转换成torch.tensor,再放到GPU上面,最后减去均值除以方差
# three_start=time.time()
# img=cv2.imread(img_path)
# img=img[:,:,::-1]
# tensor3=torch.from_numpy(img.copy()).cuda().float()
# tensor3-=torch.tensor(PIXEL_MEANS).cuda()
# tensor3/=torch.tensor(PIXEL_STDS).cuda()
# three_end=time.time()
# print('sub div in torch.tensor on cuda,time {:.4f}'.format(three_end-three_start))

# del img

#方式四 转换成torch.tensor,使用transform方法减去均值除以方差
four_start=time.time()
img=cv2.imread(img_path)
img=img[:,:,::-1]
transform=transforms.Compose(
  [transforms.ToTensor(),transforms.Normalize(PIXEL_MEANS, PIXEL_STDS)]
)
tensor4=transform(img.copy())
four_end=time.time()
print('sub div in torch.tensor with torchvision.transforms,time {:.4f}'.format(four_end-four_start))

del img

if torch.sum(tensor1-tensor2)<=1e-3:
  print('tensor1=tensor2')
if torch.sum(tensor2-tensor4)==0:
  print('tensor2=tensor3')
# if tensor3==tensor4:
#   print('tensor3=tensor4')

以上这篇pytorch 图像预处理之减去均值,除以方差的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 抓取动态网页内容方案详解
Dec 25 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python列表(List)知识点总结
Feb 18 Python
详解python校验SQL脚本命名规则
Mar 22 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
python flask开发的简单基金查询工具
Jun 02 Python
Python实现科学占卜 让视频自动打码
Apr 09 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 #Python
pytorch实现focal loss的两种方式小结
Jan 02 #Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 #Python
基于torch.where和布尔索引的速度比较
Jan 02 #Python
Python魔法方法 容器部方法详解
Jan 02 #Python
python 图像的离散傅立叶变换实例
Jan 02 #Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 #Python
You might like
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
python 排序算法总结及实例详解
2016/09/28 Python
用Eclipse写python程序
2018/02/10 Python
解决python线程卡死的问题
2019/02/18 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
波兰购物网站:MALL.PL
2019/05/01 全球购物
我未来的职业规划范文
2014/01/11 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
高校教师个人总结
2015/02/10 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
python内置进制转换函数的操作
2021/06/02 Python