cannot load model anymore as weights_only
error occurs when using inference demo
Traceback (most recent call last):
File "/FastSAM/Inference.py", line 122, in weights_only argument in torch.load from False to True. Re-running torch.load with weights_only set to False will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source.
(2) Alternatively, to load with weights_only=True please check the recommended steps in the following error message.
WeightsUnpickler error: Unsupported global: GLOBAL ultralytics.nn.tasks.SegmentationModel was not an allowed global by default. Please use torch.serialization.add_safe_globals([ultralytics.nn.tasks.SegmentationModel]) or the torch.serialization.safe_globals([ultralytics.nn.tasks.SegmentationModel]) context manager to allowlist this global if you trust this class/function.
Check the documentation of torch.load to learn more about types accepted by default with weights_only https://pytorch.org/docs/stable/generated/torch.load.html.
Even if using argument as 'weights_only=False' when load checkpoint cannot resolve this problem
I am facing the same issue, Did you find any solution??
Hey, the following issue can be easily solved with downgrading the torch to 1 version. For example, I have used: pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
As well as, update the numpy to make it work again: pip install numpy==1.24.3
Hey, the following issue can be easily solved with downgrading the torch to 1 version. For example, I have used: pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
As well as, update the numpy to make it work again: pip install numpy==1.24.3
And by this solution your python version could only be 3.9 or 3.10
@astral-fi
I was able to get this working with python-3.13, torch-2.7.1 and numpy-2.2.6 by following the advice in the error messages and adding a bunch of torch.serialization.add_safe_globals calls before loading the model.
from fastsam import FastSAM, FastSAMPrompt
import torch, ultralytics
torch.serialization.add_safe_globals([ultralytics.nn.tasks.SegmentationModel])
torch.serialization.add_safe_globals([torch.nn.modules.container.Sequential])
torch.serialization.add_safe_globals([ultralytics.nn.modules.conv.Conv])
torch.serialization.add_safe_globals([torch.nn.modules.conv.Conv2d])
torch.serialization.add_safe_globals([torch.nn.modules.batchnorm.BatchNorm2d])
torch.serialization.add_safe_globals([torch.nn.modules.activation.SiLU])
torch.serialization.add_safe_globals([ultralytics.nn.modules.block.C2f])
torch.serialization.add_safe_globals([torch.nn.modules.container.ModuleList])
torch.serialization.add_safe_globals([ultralytics.nn.modules.block.Bottleneck])
torch.serialization.add_safe_globals([ultralytics.nn.modules.block.SPPF])
torch.serialization.add_safe_globals([torch.nn.modules.pooling.MaxPool2d])
torch.serialization.add_safe_globals([torch.nn.modules.upsampling.Upsample])
torch.serialization.add_safe_globals([ultralytics.nn.modules.conv.Concat])
torch.serialization.add_safe_globals([ultralytics.nn.modules.head.Segment])
torch.serialization.add_safe_globals([ultralytics.nn.modules.block.DFL])
torch.serialization.add_safe_globals([ultralytics.nn.modules.block.Proto])
torch.serialization.add_safe_globals([torch.nn.modules.conv.ConvTranspose2d])
torch.serialization.add_safe_globals([getattr])
torch.serialization.add_safe_globals([ultralytics.nn.modules.head.Detect])
torch.serialization.add_safe_globals([ultralytics.yolo.utils.IterableSimpleNamespace])
IMAGE_PATH = 'input.png'
DEVICE = 'cpu'
model = FastSAM('weights/FastSAM-x.pt')
everything_results = model(IMAGE_PATH, device=DEVICE, retina_masks=True, imgsz=1024, conf=0.4, iou=0.9,)
prompt_process = FastSAMPrompt(IMAGE_PATH, everything_results, device=DEVICE)
ann = prompt_process.everything_prompt()
prompt_process.plot(annotations=ann,output_path='output.jpg',)