torchvision中的resize对PIL.Image对象的处理速度要优于opencv近7千倍

Posted MarToony|名角

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了torchvision中的resize对PIL.Image对象的处理速度要优于opencv近7千倍相关的知识,希望对你有一定的参考价值。

图片数据集中的图片之间的大小存在差异;希望进行预resize处理,但是纠结于以下三者的处理效率差异:

  • 使用opencv中的resize;
  • torchvison中的resize;
  • tf.image.resize。

因此做了以下的实验,最终发现torchvision+PIL的方式似乎更胜一筹

from torchvision import transforms
import tensorflow as tf
import cv2
import time

imgpath = "/home/night/PycharmProjects/wangyan/wyhaha/train_dataset/original/Gramian Angular Field/Beef/test_data_0.png"

start = time.time()
img = cv2.imread(imgpath)
resized = cv2.resize(img, (512, 512))
print("time:{:.4}".format((time.time() - start) * 1000))

img = Image.open(imgpath).convert('RGB')
img = transforms.Resize([512, 512])(img)  # 输入必须要求时Image
start = time.time()
print("time:{:.4}".format((time.time() - start) * 1000))

img = Image.open(imgpath).convert('RGB')
img = tf.image.resize(img, [512, 512])
start = time.time()
print("time:{:.4}".format((time.time() - start) * 1000))

# ============================================
time:7.104
time:0.0009537
time:0.002623

容易看出,torchvision的方式要快opencv近7000倍;

(之所以没有等到在__getitem___中进行transform,是因为希望将这些图片统一shape以转化为张量数据;但是确实,实际应用场景中,不适合在读取之后就进行一次resize,是不合理且会失去很多图像信息的。)

以上是关于torchvision中的resize对PIL.Image对象的处理速度要优于opencv近7千倍的主要内容,如果未能解决你的问题,请参考以下文章

torch.transforms

极智AI | OpenCV and torchvision.transforms 实现图像等比例缩放方法

MNIST、torchvision 中的输出和广播形状不匹配

Torchvision:对数据进行操作

torchvision的理解和学习 加载常用数据集,对主流模型的调用.md

如何在 Pytorch 中使用 torchvision.transforms 对分割任务进行数据增强?