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根据出生日期返回年龄的方法
Mar 26 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
python 性能提升的几种方法
Jul 15 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
pyqt5简介及安装方法介绍
Jan 31 Python
Python遍历numpy数组的实例
Apr 04 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
python pygame实现挡板弹球游戏
Nov 25 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
python 三边测量定位的实现代码
Apr 22 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
建立动态的WML站点(一)
2006/10/09 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
Python 文件重命名工具代码
2009/07/26 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
python实现kNN算法
2017/12/20 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
幼儿园校车司机的岗位职责
2014/01/30 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
会计专业求职信范文
2014/03/16 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
自主招生教师推荐信
2014/05/10 职场文书
和睦家庭事迹
2014/05/14 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android