我是这个领域的新手,如果我的问题很愚蠢,请原谅。 我使用
创建了一个多分辨率图像金字塔skimage.transform.pyramid_gaussian
图像为2D。现在,我想将这些图像提供给神经网络。神经网络的结构不是固定的。但是我不能这样做,因为图像的大小不一样。谁能指导我获取有关是否可以做到的任何资源?
谢谢
答案 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