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实现批量修改文件名实例
Jul 08 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
Python迭代和迭代器详解
Nov 10 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
浅析matlab中imadjust函数
Feb 27 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
python 闭包函数详细介绍
Apr 19 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中var_dump方法的使用详解
2013/06/24 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
python 多线程重启方法
2019/02/18 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
Python调用C语言的实现
2019/07/26 Python
Python3 合并二叉树的实现
2019/09/30 Python
Python3列表List入门知识附实例
2020/02/09 Python
如何基于python实现不邻接植花
2020/05/01 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
采购类个人求职的自我评价
2014/02/18 职场文书
教师演讲稿大全
2014/05/16 职场文书
环境卫生整治简报
2015/07/20 职场文书
大学生干部培训心得体会
2016/01/06 职场文书