web-dev-qa-db-ja.com

PyTorchで利用可能な事前トレーニング済みモデルを特定のパスにダウンロードする方法はありますか?

私はここで見つけることができるモデルを参照しています: https://pytorch.org/docs/stable/torchvision/models.html#torchvision-models

5
gopalkrizna

@ dennlingeranswer_torch.utils.model_Zoo_ で言及されているように、事前にトレーニングされたモデルをロードすると、内部的に呼び出されます。

より具体的には、メソッド:torch.utils.model_Zoo.load_url()は、事前トレーニング済みモデルが読み込まれるたびに呼び出されます。同じのためのドキュメントは、言及します:

_model_dir_のデフォルト値は_$TORCH_HOME/models_で、_$TORCH_HOME_のデフォルトは_~/.torch_です。

デフォルトのディレクトリは、_$TORCH_MODEL_Zoo_環境変数で上書きできます。

これは次のように実行できます。

_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)
_

PyTorchのGitHubリポジトリで問題を提起することで上記の解決策に遭遇しました: https://github.com/pytorch/vision/issues/616

これにより、ドキュメント、つまり上記のソリューションが改善されました。

2
gopalkrizna

はい、URLをコピーし、wgetを使用して目的のパスにダウンロードできます。これがイラストです:

AlexNetの場合:

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

Google Inception(v3)の場合:

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

SqueezeNetの場合:

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

Pythonで実行する場合は、次のようにします。

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>)

PS:すべてのダウンロードURLは、個々のpython torchvision.models

3
kmario23

TL; DR:いいえ、直接は不可能ですが、簡単に変更できます。

あなたがしたいことは、事前訓練されたモデルをロードするときに内部的に呼び出される torch.utils.model_Zoo を見ることだと思います:

たとえば、AlexNet here などの事前トレーニング済みモデルのコードを見ると、前述のmodel_Zoo関数を呼び出しているだけで、保存されている場所がないことがわかります。これを指定するようにPyTorchソースを変更するか(これは実際にはすばらしい追加IMOであるため、そのためのプルリクエストを開くことができます)、または2番目のリンクのコードを好みに合わせて採用する(そしてそれを別の名前でカスタムの場所)を作成し、手動で関連する場所をそこに挿入します。

PyTorchを定期的に更新する場合は、PyTorchのコードベースを直接変更する必要がなく、更新中にエラーが発生する可能性があるため、2番目の方法を強くお勧めします。

1
dennlinger