将多分辨率图像馈送到神经网络 Pytorch



我是这方面的新手,所以如果我的问题看起来很愚蠢,请原谅。 我创建了一个多分辨率图像金字塔,使用

skimage.transform.pyramid_gaussian

图像是2D的。现在我想将这些图像提供给神经网络。神经网络的结构不是固定的。但我不能这样做,因为图像的大小不同。谁能指导我找到任何资源,关于是否可以做到这一点?

谢谢

有两种类型的神经网络:第一种可以处理可变输入大小,第二种需要固定的输入大小。

第一种很好的例子是全卷积网络(FCN(。它们广泛用于对象检测和语义分割。下一个代码片段是从 PyTorch 测试预先训练的 keypointrcnn 的最小示例。这是对以前最先进的面具R-CNN的改进

import torch
import torchvision
from PIL import Image
model_rcnn = torchvision.models.detection.keypointrcnn_resnet50_fpn(pretrained=True)
model_rcnn.eval()
image1 = Image.open('image122 × 430.jpg')
image2 = Image.open('image448 × 465.jpg')
image_tensor1 = torchvision.transforms.functional.to_tensor(image1)
image_tensor2 = torchvision.transforms.functional.to_tensor(image2)
output1 = model_rcnn([image_tensor1])
output2 = model_rcnn([image_tensor2])
print(output1, output2)

第二种神经网络需要固定大小的输入,例如ResNet。标准解决方案是在将图像馈送到网络之前使用调整大小转换。最小示例:

import torch
import torchvision
from torchvision import transforms
from PIL import Image
model_imagnet = torchvision.models.resnet50(pretrained=True)
model_imagnet.eval()
# don't forget to use the same normalization as in training, 
# if you are using pre-trained model
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
my_transforms = transforms.Compose([transforms.Resize(224), 
transforms.ToTensor(),
normalize])
image1 = Image.open('image122 × 430.jpg')
image2 = Image.open('image448 × 465.jpg')
image_tensor1 = my_transforms(image1)
image_tensor2 = my_transforms(image2)

output1 = model_imagnet(torch.unsqueeze(image_tensor1, 0))
output2 = model_imagnet(torch.unsqueeze(image_tensor2, 0))

有关模型和用法的更多详细信息,您可以参考 PyTorch 文档

最新更新