Load a single image in a pretrained pytorch net

12,139

Solution 1

output = model(image) .

Note that the image should be a Variable object and that the output will be as well. If your image is, for example, a Numpy array, you can convert it like so:

var_image = Variable(torch.Tensor(image))

Solution 2

I provide with an example of ResNet152 pre-trained model.

def image_loader(loader, image_name):
    image = Image.open(image_name)
    image = loader(image).float()
    image = torch.tensor(image, requires_grad=True)
    image = image.unsqueeze(0)
    return image

data_transforms = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor()
])


model_ft = models.resnet152(pretrained=True)
model_ft.eval()

print( np.argmax(model_ft(image_loader(data_transforms, $FILENAME)).detach().numpy()))

$FILENAME is the path and name of your image to be loaded. I got necessary help from this post.

Share:
12,139
Jimbo
Author by

Jimbo

Il sapere non s'accresce se non condiviso.

Updated on June 14, 2022

Comments

  • Jimbo
    Jimbo almost 2 years

    Total newbie here, I'm using this pytorch SegNet implementation with a '.pth' file containing weights from a 50 epochs training. How can I load a single test image and see the net prediction? I know this may sound like a stupid question but I'm stuck. What I've got is:

    from segnet import SegNet
    import torch
    
    model = SegNet(2)
    model.load_state_dict(torch.load('./model_segnet_epoch50.pth'))
    

    How do I "use" the net on a single test picture?

  • Fábio Perez
    Fábio Perez over 5 years
    Note: Variable was deprecated in PyTorch 0.4.
  • joe hoeller
    joe hoeller over 4 years
    how do you do this with your own model you wrote?
  • Tengerye
    Tengerye over 4 years
    @joehoeller Not sure what you mean exactly. Couldn't you assign your model to model_ft?