pytorch 图像预处理之减去均值,除以方差的实例
更新时间:2020年5月2日 10:15 点击:2216
如下所示:
#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 图像预处理之减去均值,除以方差的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持猪先飞。
相关文章
pytorch nn.Conv2d()中的padding以及输出大小方式
今天小编就为大家分享一篇pytorch nn.Conv2d()中的padding以及输出大小方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27- 这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
Linux安装Pytorch1.8GPU(CUDA11.1)的实现
这篇文章主要介绍了Linux安装Pytorch1.8GPU(CUDA11.1)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-25- 这篇文章主要介绍了Pytorch之扩充tensor的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-05
- 今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-06
- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 这篇文章主要介绍了解决pytorch 交叉熵损失输出为负数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-08
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
今天小编就为大家分享一篇pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02- 这篇文章主要介绍了pytorch 实现冻结部分参数训练另一部分,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-27
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
这篇文章主要介绍了基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-08从Pytorch模型pth文件中读取参数成numpy矩阵的操作
这篇文章主要介绍了从Pytorch模型pth文件中读取参数成numpy矩阵的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-04Pytorch 的损失函数Loss function使用详解
今天小编就为大家分享一篇Pytorch 的损失函数Loss function使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 今天小编就为大家分享一篇pytorch中的上采样以及各种反操作,求逆操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-30
- 这篇文章主要介绍了基于Pytorch版yolov5的滑块验证码破解思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
今天小编就为大家分享一篇pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02- 这篇文章主要介绍了pytorch深度学习中对softmax实现进行了详细解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...2021-09-30
- 今天小编就为大家分享一篇Pytorch 计算误判率,计算准确率,计算召回率的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 今天小编就为大家分享一篇Pytorch实现LSTM和GRU示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 这篇文章主要介绍了Pytorch如何切换 cpu和gpu的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-01