Подача изображений с несколькими разрешениями в нейронную сеть Pytorch - PullRequest
0 голосов
/ 17 октября 2019

Я новичок в этой области, так что извините, если мой вопрос кажется глупым. Я создал многоразрешающую пирамиду изображений, используя

skimage.transform.pyramid_gaussian

Изображения 2D. Теперь я хочу передать эти изображения в нейронную сеть. Структура нейронной сети не фиксирована. Но я не могу этого сделать, поскольку изображения не одного размера. Кто-нибудь может направить меня к любому ресурсу относительно того, можно ли это сделать?

Спасибо

1 Ответ

0 голосов
/ 20 октября 2019

Существует два типа нейронных сетей: первый, который может обрабатывать переменный входной размер, и второй, который требует фиксированного размера ввода.

Хорошим примером для первого вида является полностью сверточная сеть (FCN). Они широко используются для обнаружения объектов и семантической сегментации. Следующий фрагмент кода является минимальным примером тестирования предварительно обученного keypointrcnn из PyTorch. Это улучшение предыдущего уровня техники Маска 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...