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

时间:2019-10-16 22:39:23

标签: python image-processing neural-network pytorch scikit-image

我是这个领域的新手,如果我的问题很愚蠢,请原谅。 我使用

创建了一个多分辨率图像金字塔
  

skimage.transform.pyramid_gaussian

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

第一种很好的例子是完全卷积网络(FCN)。它们被广泛用于对象检测和语义分割。下一个代码片段是测试来自PyTorch的预训练keypointrcnn的最小示例。这是对现有技术Mask 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 documentation