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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
和孩子一起学习python之变量命名规则
May 27 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
pytorch自定义二值化网络层方式
Jan 07 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
简单了解python列表和元组的区别
May 14 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
Python经典五人分鱼实例讲解
Jan 04 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
基于mysql的论坛(3)
2006/10/09 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
php实现的简单检验登陆类
2015/06/18 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python赋值操作方法分享
2013/03/23 Python
Django Highcharts制作图表
2016/08/27 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
大韩航空官方网站:Korean Air
2017/10/25 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
师范毕业生求职信
2014/07/11 职场文书
班主任开场白
2015/06/01 职场文书
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL