PyTorch张量resize操作速度远慢于TensorFlow原因咨询
我对PyTorch与TensorFlow的resize操作开展性能对比测试,发现二者性能差距十分显著:针对同一张图像执行相同倍率的缩放操作时,PyTorch耗时约为TensorFlow的3倍,测试代码与结果如下:
首轮测试
PyTorch 测试代码与结果
import torchvision.transforms as T import torch.nn.functional as F IMAGE1 = '1647524904_19.jpg' img1 = Image.open(IMAGE1) img1 = T.Grayscale(num_output_channels=1)(img1) prev_time = datetime.datetime.now() k = 3 for i in range(5000): x = torch.from_numpy(np.array(img1)).permute(0, 1).unsqueeze(0).unsqueeze(0).float() img1r = F.interpolate(x, size=((int) (img1.size[1]/k), (int) (img1.size[0]/k))) if i % 1000 == 0: print(datetime.datetime.now() - prev_time) prev_time = datetime.datetime.now() # 0:00:01.075056 # 0:00:01.024509 # 0:00:00.979186 # 0:00:00.983568
TensorFlow 测试代码与结果
IMAGE1 = '1647524904_19.jpg' img1 = tf.image.decode_image(tf.io.read_file(IMAGE1)) img1 = tf.image.rgb_to_grayscale(img1) k = 3 prev_time = datetime.datetime.now() for i in range(5000): with tf.device('/cpu:0'): img1r = tf.image.resize(image1, [(int) (img1.shape[0]/k), (int) (image1.shape[1]/k)]) if i % 1000 == 0: print(datetime.datetime.now() - prev_time) prev_time = datetime.datetime.now() # 0:00:00.383906 # 0:00:00.287261 # 0:00:00.287848 # 0:00:00.286864
测试所用图像如下:
请问造成二者性能差距如此显著的原因是什么?
补充测试
若将图像读取、预处理等所有操作全部移入循环内部,排除循环外预处理的耗时干扰后,PyTorch性能仍低于TensorFlow,测试代码与结果如下:
PyTorch 测试代码与结果
import torchvision.transforms as T import torch.nn.functional as F IMAGE1 = '1647524904_19.jpg' prev_time = datetime.datetime.now() k = 3 for i in range(5000): img1 = Image.open(IMAGE1) img1 = T.Grayscale(num_output_channels=1)(img1) x = torch.from_numpy(np.array(img1)).permute(0, 1).unsqueeze(0).unsqueeze(0).float() img1r = F.interpolate(x, size=((int) (img1.size[1]/k), (int) (img1.size[0]/k))) if i % 1000 == 0: print(datetime.datetime.now() - prev_time) prev_time = datetime.datetime.now() # 0:00:04.559505 # 0:00:04.408138 # 0:00:04.259362 # 0:00:04.842845
TensorFlow 测试代码与结果
IMAGE1 = '1647524904_19.jpg' k = 3 prev_time = datetime.datetime.now() for i in range(5000): img1 = tf.image.decode_image(tf.io.read_file(IMAGE1)) img1 = tf.image.rgb_to_grayscale(img1) with tf.device('/cpu:0'): img1r = tf.image.resize(image1, [(int) (img1.shape[0]/k), (int) (image1.shape[1]/k)]) if i % 1000 == 0: print(datetime.datetime.now() - prev_time) prev_time = datetime.datetime.now() # 0:00:03.908698 # 0:00:03.914131 # 0:00:03.956090 # 0:00:03.893828
内容的提问来源于stack exchange,提问作者John M.
相关产品推荐
相关产品推荐

