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的异常处理
Jun 19 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
Python 线程池用法简单示例
Oct 02 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
python3 删除所有自定义变量的操作
Apr 08 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中PDO基础教程 入门级
2011/09/04 PHP
yii中widget的用法
2014/12/03 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Python判断telnet通不通的实例
2019/01/26 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
python下载库的步骤方法
2019/10/12 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
大众服装店创业计划书范文
2014/01/01 职场文书
室内设计专业自荐信
2014/05/31 职场文书
学校工会工作总结2015
2015/05/19 职场文书
2016年感恩节寄语
2015/12/07 职场文书
如何拟写通知正文?
2019/04/02 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python