将多分辨率图像送入神经网络

2024-04-27 16:57:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

skimage.transform.pyramid_gaussian

图像是二维的。现在我想把这些图像输入到神经网络。神经网络的结构不是固定的。但我不能这么做,因为图像大小不一样。有没有人能给我提供任何关于这是否可以做到的资源?你知道吗

谢谢


Tags: 图像pyramid分辨率transform神经网络资源gaussian结构
1条回答
网友
1楼 · 发布于 2024-04-27 16:57:13

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

第一类的好例子是完全卷积网络(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))

有关模型和用法的更多详细信息,请参阅PyTorchdocumentation

相关问题 更多 >