Существует два типа нейронных сетей: первый, который может обрабатывать переменный входной размер, и второй, который требует фиксированного размера ввода.
Хорошим примером для первого вида является полностью сверточная сеть (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