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,是不合理且会失去很多图像信息的。)

你可能感兴趣的:(Pytorch框架学习,python,opencv,深度学习,计算机视觉,人工智能)