pytorch图像预处理之减去均值,除以方差的实例

  

<>强如下所示:

  

 pytorch图像预处理之减去均值,除以方差的实例

        #编码=gbk   “‘   GPU上面的环境变化太复杂,这里我直接给出在笔记本CPU上面的运行时间结果      由于方式3需要将张量转换到GPU上面,这一过程很消耗时间,大概需要十秒,故而果断抛弃这样的做法      img (168、300、3)   子在numpy div,时间0.0110   子在火炬div。张量,时间0.0070   子在火炬div。与torchvision张量。变换,时间0.0050   tensor1=tensor2   tensor2=tensor3         img (1079、1349、3)   子在numpy div,时间0.1899   子在火炬div。张量,时间0.1469   子在火炬div。与torchvision张量。变换,时间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秒的数量级      所以,      “‘      进口numpy np   导入的时间   进口火炬   进口torchvision。变换,变换   进口cv2   # img_path='/ssddata2 wyx/检测/ead_stage12/stage12_img/WL_00387.jpg '   img_path=' F: \ \ 2 \ \ 00004. jpg   PIXEL_MEANS=(0.485, 0.456, 0.406) # RGB格式均值和方差   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,复制=False)   img/=255.0   img -=np.array (PIXEL_MEANS)   img/=np.array (PIXEL_STDS)   tensor1=torch.from_numpy (img.copy ())   tensor1=tensor1.permute (0,1)   one_end=time.time ()   打印(“子numpy div,时间{:.4f} .format (one_end-one_start))      德尔img      #方式二转换成torch.tensor,再减去均值除以方差   two_start=time.time ()   img=cv2.imread (img_path)   img=img (::,:: 1)   打印(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 (0,1)   two_end=time.time ()   print(子div的火炬。张量,时间{:.4f} .format (two_end-two_start))      德尔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 ()   #打印(子div的火炬。张量在cuda时间{:.4f} .format (three_end-three_start))      # del img      #方式四转换成torch.tensor,使用变换方法减去均值除以方差   four_start=time.time ()   img=cv2.imread (img_path)   img=img (::,:: 1)   变换=transforms.Compose (   [transforms.ToTensor(),变换。正常化(PIXEL_MEANS PIXEL_STDS)]   )   tensor4=变换(img.copy ())   four_end=time.time ()   print(子div的火炬。与torchvision张量。变换,时间{:.4f} .format (four_end-four_start))      德尔img      如果torch.sum (tensor1-tensor2) & lt;=1 e - 3:   打印(' tensor1=tensor2 ')   如果torch.sum (tensor2-tensor4)==0:   打印(' tensor2=tensor3 ')   #如果tensor3==tensor4:   #打印(“tensor3=tensor4”)   之前      

以上这篇pytorch图像预处理之减去均值,除以方差的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

pytorch图像预处理之减去均值,除以方差的实例