IGNF/FLAIR-1

[BUG] Error loading model pth: Pickle unable to unpickle object.

Bencpr opened this issue · 8 comments

Bonjour,

Il m'est impossible de loader un modèle (via le .pth) à cause d'une erreur liée à la désérialisation pickle.

Env
Python 3.11.6
torch: '2.0.0+cu117' / '2.1.0'
torchvision: '0.15.1+cu117'

Script

from src.zone_detect.model import get_module
state_dict = get_module('FLAIR-INC_rgbi_15cl_resnet34-unet_weights.pth')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/jovyan/FLAIR-1/src/zone_detect/model.py", line 50, in get_module
    weights = torch.load(checkpoint, map_location='cpu')
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 815, in load
    return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 1033, in _legacy_load
    magic_number = pickle_module.load(f, **pickle_load_args)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_pickle.UnpicklingError: invalid load key, '<'.

Même erreur simplement avec un torch.load:

torch.load("FLAIR-INC_rgbi_15cl_resnet34-unet_weights.pth")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 815, in load
    return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/lib/python3.11/site-packages/torch/serialization.py", line 1033, in _legacy_load
    magic_number = pickle_module.load(f, **pickle_load_args)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_pickle.UnpicklingError: invalid load key, '<'.

Une idée?
Merci d'avance.

Benjamin

Bonjour @Bencpr , est-ce que l'erreur persiste en donnant le chemin complet vers le .pth ?

@agarioud Hello, sur le snippet j'ai mis le nom du modèle pour alléger, mais en réalité j'ai le path complet.

@Bencpr
Avec le même modèle (FLAIR-INC_rgbi) et les mêmes versions de torch/python, torch.load ne me donne pas d'erreur.
Est-ce possible de retélécharger le fichier depuis HF pour écarter la piste du fichier corrompu ?

@agarioud OK. Pour info j'ai récupéré deux modèles avec

wget https://huggingface.co/IGNF/FLAIR-INC_rgb_15cl_resnet34-unet/blob/main/FLAIR-INC_rgb_15cl_resnet34-unet_weights.pth

wget https://huggingface.co/IGNF/FLAIR-INC_rgbi_15cl_resnet34-unet/blob/main/FLAIR-INC_rgbi_15cl_resnet34-unet_weights.pth

Même problème pour les deux.

@Bencpr Effectivement, via wget j'arrive à reproduire l'erreur. Par téléchargement du fichier directement via les Files de la page HF, je n'ai pas l'erreur. Pourriez vous confirmer ?

@Bencpr, pas d'erreur non plus en utilisant la lib HF

from huggingface_hub import hf_hub_download
hf_hub_download(repo_id="IGNF/FLAIR-INC_rgb_15cl_resnet34-unet", 
                    filename="FLAIR-INC_rgb_15cl_resnet34-unet_weights.pth", 
                    local_dir='../', local_dir_use_symlinks=False,
                    )

state_dict = torch.load('../FLAIR-INC_rgb_15cl_resnet34-unet_weights.pth')

WGET ne télécharge en faite qu'un pointer vers le fichier (le .pth ne fait que 50Ko)

@agarioud mince effectivement, j'aurais du vérifier ! Merci problem solved ;)

@Bencpr
N'hésitez pas à nous partager vos usages ou vos suggestions !