You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:39:19