gpt4 book ai didi

python - torch transform.resize() 与 cv2.resize()

转载 作者:行者123 更新时间:2023-12-05 02:50:44 26 4
gpt4 key购买 nike

CNN 模型将大小为 (112x112) 的图像张量作为输入,并给出 (1x512) 大小的张量作为输出。

使用 Opencv 函数 cv2.resize() 或在 pytorch 中使用 Transform.resize 将输入调整为 (112x112) 给出不同的输出.

这是什么原因? (我知道 opencv resizing 与 torch resizing 的底层实现的差异可能是造成这种情况的原因,但我想对此有一个详细的了解)

import cv2
import numpy as np
from PIL import image
import torch
import torchvision
from torchvision import transforms as trans


# device for pytorch
device = torch.device('cuda:0')

torch.set_default_tensor_type('torch.cuda.FloatTensor')

model = torch.jit.load("traced_facelearner_model_new.pt")
model.eval()

# read the example image used for tracing
image=cv2.imread("videos/example.jpg")

test_transform = trans.Compose([
trans.ToTensor(),
trans.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])
test_transform2 = trans.Compose([
trans.Resize([int(112), int(112)]),
trans.ToTensor(),
trans.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])

resized_image = cv2.resize(image, (112, 112))

tensor1 = test_transform(resized_image).to(device).unsqueeze(0)
tensor2 = test_transform2(Image.fromarray(image)).to(device).unsqueeze(0)
output1 = model(tensor1)
output2 = model(tensor2)

output1 和 output2 张量有不同的值。

最佳答案

基本上 torchvision.transforms.Resize() 默认使用 PIL.Image.BILINEAR 插值。

而在您的代码中,您只需使用 cv2.resize,它不使用任何插值。

例如

import cv2
from PIL import Image
import numpy as np

a = cv2.imread('videos/example.jpg')
b = cv2.resize(a, (112, 112))
c = np.array(Image.fromarray(a).resize((112, 112), Image.BILINEAR))

您会看到 bc 略有不同。

编辑:

实际上 opencv 文档说

INTER_LINEAR - a bilinear interpolation (used by default)

但是,是的,它不会给出与 PIL 相同的结果。

编辑 2:

这也在文档中

To shrink an image, it will generally look best with INTER_AREA interpolation

显然

d = cv2.resize(a, (112, 112), interpolation=cv2.INTER_AREA)

给出与 c 几乎相同的结果。但不幸的是,这些并没有回答这个问题。

关于python - torch transform.resize() 与 cv2.resize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63519965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com