Bug when loading model

Hi,
I have the following piece of code :
import torch
import torchvision
import cv2
import argparse
from PIL import Image
from utils import draw_segmentation_map, get_outputs
from torchvision.transforms import transforms

initialize the model

model = torch.load(“model_folioles.pth”,map_location=torch.device(‘cpu’))

set the computation device

device = torch.device(‘cpu’)

load the modle on to the computation device and set to eval mode

model.to(device).eval()

and I have the following error :
Traceback (most recent call last):
File “demo.py”, line 14, in
model.to(device).eval()
AttributeError: ‘dict’ object has no attribute ‘to’

could you help me please ?
thank you
best regards

This doesn’t return the model but returns a dict which will contain a key like model_state_dict that contains the state_dict of your model. You’ll need to re-init your model and then load the state_model via something like,

model = ModelClass() 
state_dict = torch.load("file.pth")
model.load_state_dict(state_dict['model_state_dict'])

This is why you get dict has no to attribute because you’re expecting model to be a nn.Module object which it’s not, it’s currently a dict.

ok thank you I had find that earlier, but my model is maskrcnn 101 but I don’t find a torchvision.models.detection.maskrcnn_resnet101_fpn, it is not exists ?

From the documentation, you need access to the base nn.Module object in order to restore a given model from a pathfile. To quote the documentation,

“Notice that the load_state_dict() function takes a dictionary object, NOT a path to a saved object. This means that you must deserialize the saved state_dict before you pass it to the load_state_dict() function. For example, you CANNOT load using model.load_state_dict(PATH) .”

Wherever you got the .pt file from, you’ll need to find the corresponding model nn.Module object in order to restore the model using that .pt file. I don’t believe you can restore a model directly from a .pt file as stated in the documentation.