pytorch 图像预处理之减去均值,除以方差的实例
Python  /  管理员 发布于 5年前   562
如下所示:
#coding=gbk'''GPU上面的环境变化太复杂,这里我直接给出在笔记本CPU上面的运行时间结果由于方式3需要将tensor转换到GPU上面,这一过程很消耗时间,大概需要十秒,故而果断抛弃这样的做法img (168, 300, 3)sub div in numpy,time 0.0110sub div in torch.tensor,time 0.0070sub div in torch.tensor with torchvision.transforms,time 0.0050tensor1=tensor2tensor2=tensor3img (1079, 1349, 3)sub div in numpy,time 0.1899sub div in torch.tensor,time 0.1469sub div in torch.tensor with torchvision.transforms,time 0.1109tensor1=tensor2tensor2=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 npimport timeimport torchimport torchvision.transforms as transformsimport 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 variancesPIXEL_STDS = (0.229, 0.224, 0.225)#输入文件路径,输出的应该是转换成torch.tensor的标准形式#方式一 在numpy中进行减去均值除以方差,最后转换成torch.tensorone_start=time.time()img=cv2.imread(img_path)img=img[:,:,::-1]img=img.astype(np.float32, copy=False)img/=255.0img-=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.0tensor2-=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 imgif 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 图像预处理之减去均值,除以方差的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号