【发布时间】:2020-08-21 18:15:06
【问题描述】:
CNN 模型将大小为(112x112) 的图像张量作为输入,并给出(1x512) 大小的张量作为输出。
使用 Opencv 函数 cv2.resize() 或在 pytorch 中使用 Transform.resize 将输入调整为 (112x112) 会得到不同的输出。
这是什么原因? (我知道opencv调整大小与torch调整大小的底层实现的差异可能是造成这种情况的原因,但我想详细了解一下)
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 张量具有不同的值。
【问题讨论】: