web-dev-qa-db-fra.com

Existe-t-il un moyen de télécharger les modèles pré-formés disponibles dans PyTorch vers un chemin spécifique?

Je fais référence aux modèles qui peuvent être trouvés ici: https://pytorch.org/docs/stable/torchvision/models.html#torchvision-models

5
gopalkrizna

Comme, @ dennlinger mentionné dans son réponse : torch.utils.model_Zoo , est appelé en interne lorsque vous chargez un modèle pré-formé.

Plus précisément, la méthode: torch.utils.model_Zoo.load_url() est appelée chaque fois qu'un modèle pré-formé est chargé. La documentation pour le même, mentionne:

La valeur par défaut de model_dir Est $TORCH_HOME/models$TORCH_HOME Est par défaut ~/.torch.

Le répertoire par défaut peut être remplacé par la variable d'environnement $TORCH_MODEL_Zoo.

Cela peut être fait comme suit:

import torch 
import torchvision
import os

# Suppose you are trying to load pre-trained resnet model in directory- models\resnet

os.environ['TORCH_MODEL_Zoo'] = 'models\\resnet' #setting the environment variable
resnet = torchvision.models.resnet18(pretrained=True)

Je suis tombé sur la solution ci-dessus en soulevant un problème dans le référentiel GitHub de PyTorch: https://github.com/pytorch/vision/issues/616

Cela a conduit à une amélioration de la documentation, c'est-à-dire la solution mentionnée ci-dessus.

2
gopalkrizna

Oui, vous pouvez simplement copier les URL et utiliser wget pour les télécharger dans le chemin souhaité. Voici une illustration:

Pour AlexNet :

$ wget -c https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth

Pour Google Inception (v3) :

$ wget -c https://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth

Pour SqueezeNet :

$ wget -c https://download.pytorch.org/models/squeezenet1_1-f364aa15.pth

Si vous voulez le faire en Python, utilisez quelque chose comme:

In [11]: from six.moves import urllib

# resnet 101 Host url
In [12]: url = "https://download.pytorch.org/models/resnet101-5d3b4d8f.pth"

# download and rename the file to `resnet_101.pth`
In [13]: urllib.request.urlretrieve(url, "resnet_101.pth")
Out[13]: ('resnet_101.pth', <http.client.HTTPMessage at 0x7f7fd7f53438>)

P.S: Vous pouvez trouver toutes les URL de téléchargement dans les fichiers individuels python dans torchvision.models

3
kmario23

TL; DR: Non, ce n'est pas possible directement, mais vous pouvez facilement l'adapter.

Je pense que ce que vous voulez faire est de regarder torch.utils.model_Zoo , qui est appelé en interne lorsque vous chargez un modèle pré-formé:

Si nous regardons le code des modèles pré-formés, par exemple AlexNet ici , nous pouvons voir qu'il appelle simplement le model_Zoo, mais sans l'emplacement enregistré. Vous pouvez soit modifier la source PyTorch pour spécifier cela (ce serait en fait un excellent ajout à l'OMI, alors peut-être ouvrir une demande de tirage pour cela), ou bien simplement adopter le code dans le deuxième lien à votre guise (et l'enregistrer dans un emplacement personnalisé sous un nom différent), puis insérez manuellement l'emplacement approprié.

Si vous souhaitez mettre à jour régulièrement PyTorch, je recommanderais fortement la deuxième méthode, car elle n'implique pas de modifier directement la base de code de PyTorch et risque de générer des erreurs lors des mises à jour.

1
dennlinger