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异常处理总结
Aug 15 Python
Python中用max()方法求最大值的介绍
May 15 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python中的线程threading.Thread()使用详解
Dec 17 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
使用K.function()调试keras操作
Jun 17 Python
python函数超时自动退出的实操方法
Dec 28 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
PDO::commit讲解
2019/01/27 PHP
javascript高级学习笔记整理
2011/08/14 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
速记Python布尔值
2017/11/09 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
商业房地产广告语
2014/03/13 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
运动员入场词
2015/07/18 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js