質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

受付中

torch.hub.loadについて

reiya_123
reiya_123

総合スコア55

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0グッド

0クリップ

2233閲覧

投稿2022/05/20 09:11

編集2022/05/20 10:29

前提・実現したいこと

ubuntu20.04
python3.8を使用しています。

現在、yolov5を動かしているのですが
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

yolov5sモデルが以下の階層にある場合
yolov5
|ー yolov5s
model = torch.hub.load('~/yolov5', 'yolov5s', pretrained=True)
このようなイメージでパスを通したいと考えていますが実行できていません。
どうすれば、このような方法で通すことができますでしょうか。
申し訳ございませんがご教示いただけないでしょうか。
よろしくお願い致します。

エラー

Traceback (most recent call last): File "~/yolov5/pytorch_detect_realsense.py", line 61, in <module> main() File "~/yolov5/pytorch_detect_realsense.py", line 58, in main Y5.yolov5() File "~/yolov5/pytorch_detect_realsense.py", line 11, in yolov5 model = torch.hub.load('/home/limlab/yolov5', 'yolov5s.pt', pretrained=True) File "~/.local/lib/python3.8/site-packages/torch/hub.py", line 397, in load repo_or_dir = _get_cache_or_reload(repo_or_dir, force_reload, verbose, skip_validation) File "~/.local/lib/python3.8/site-packages/torch/hub.py", line 165, in _get_cache_or_reload repo_owner, repo_name, branch = _parse_repo_info(github) File "~/.local/lib/python3.8/site-packages/torch/hub.py", line 112, in _parse_repo_info repo_owner, repo_name = repo_info.split('/') ValueError: too many values to unpack (expected 2)

該当のソースコード

import torch import sys import pyrealsense2 as rs import numpy as np import cv2 import random import pickle as pkl class YOLOV5: def yolov5(self): model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True) color = (255,0,0) # ストリーム(Color/Depth)の設定 config = rs.config() config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) # ストリーミング開始 pipeline = rs.pipeline() profile = pipeline.start(config) try: while True: # フレーム待ち frames = pipeline.wait_for_frames() #RGB RGB_frame = frames.get_color_frame() RGB_image = np.asanyarray(RGB_frame.get_data()) results = model(RGB_image) # 画像パスを設定し、物体検出を行う for *box, conf, cls in results.xyxy[0]: # xyxy, confidence, class #--- クラス名と信頼度を文字列変数に代入 #s = model.names[int(cls)]+":"+'{:.1f}'.format(float(conf)*100) s = model.names[int(cls)] if s == 'person': #--- 枠描画 cv2.rectangle(RGB_image,(int(box[0]), int(box[1])),(int(box[2]), int(box[3])),color,thickness=2,) #--- 文字枠と文字列描画 cv2.rectangle(RGB_image, (int(box[0]), int(box[1])-20), (int(box[0])+len(s)*10, int(box[1])), color, -1) cv2.putText(RGB_image, s, (int(box[0]), int(box[1])-5), cv2.FONT_HERSHEY_PLAIN, 1, [225,255,255], 1, cv2.LINE_AA) cv2.imshow('color',RGB_image) if cv2.waitKey(1) & 0xff == 27:#ESCで終了 cv2.destroyAllWindows() break finally: # ストリーミング停止 pipeline.stop() def main(): Y5 = YOLOV5() Y5.yolov5() if __name__ == '__main__': main()
def load(repo_or_dir, model, *args, source='github', force_reload=False, verbose=True, skip_validation=False, **kwargs): r""" Load a model from a github repo or a local directory. Note: Loading a model is the typical use case, but this can also be used to for loading other objects such as tokenizers, loss functions, etc. If ``source`` is 'github', ``repo_or_dir`` is expected to be of the form ``repo_owner/repo_name[:tag_name]`` with an optional tag/branch. If ``source`` is 'local', ``repo_or_dir`` is expected to be a path to a local directory. Args: repo_or_dir (string): If ``source`` is 'github', this should correspond to a github repo with format ``repo_owner/repo_name[:tag_name]`` with an optional tag/branch, for example 'pytorch/vision:0.10'. If ``tag_name`` is not specified, the default branch is assumed to be ``main`` if it exists, and otherwise ``master``. If ``source`` is 'local' then it should be a path to a local directory. model (string): the name of a callable (entrypoint) defined in the repo/dir's ``hubconf.py``. *args (optional): the corresponding args for callable ``model``. source (string, optional): 'github' or 'local'. Specifies how ``repo_or_dir`` is to be interpreted. Default is 'github'. force_reload (bool, optional): whether to force a fresh download of the github repo unconditionally. Does not have any effect if ``source = 'local'``. Default is ``False``. verbose (bool, optional): If ``False``, mute messages about hitting local caches. Note that the message about first download cannot be muted. Does not have any effect if ``source = 'local'``. Default is ``True``. skip_validation (bool, optional): if ``False``, torchhub will check that the branch or commit specified by the ``github`` argument properly belongs to the repo owner. This will make requests to the GitHub API; you can specify a non-default GitHub token by setting the ``GITHUB_TOKEN`` environment variable. Default is ``False``. **kwargs (optional): the corresponding kwargs for callable ``model``. Returns: The output of the ``model`` callable when called with the given ``*args`` and ``**kwargs``. Example: >>> # from a github repo >>> repo = 'pytorch/vision' >>> model = torch.hub.load(repo, 'resnet50', pretrained=True) >>> # from a local directory >>> path = '/some/local/path/pytorch/vision' >>> model = torch.hub.load(path, 'resnet50', pretrained=True) """ source = source.lower() if source not in ('github', 'local'): raise ValueError( f'Unknown source: "{source}". Allowed values: "github" | "local".') if source == 'github': repo_or_dir = _get_cache_or_reload(repo_or_dir, force_reload, verbose, skip_validation) model = _load_local(repo_or_dir, model, *args, **kwargs) return model

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jbpb0

2022/05/20 09:25

> 現在、yolov5を動かしているのですが 動かせる状態なのだから、 > このようなイメージでパスを通すことで実行できることは可能でしょうか。 実際やってみたら分かるのではないでしょうか
reiya_123

2022/05/20 10:24

ご返信ありがとうございます。 質問の仕方が悪く申し訳ございません。 質問を編集します。 質問したいことですが、実際にその方法ではダメでしたのでそのようなイメージでできるようにするにはどのようにすればよいのでしょうか。ということをお聞きしたかったです。 ご教示いただけないでしょうか。 よろしくお願い致します。

回答1

0

新しい回答

torch.hubのバージョン不整合の可能性が高いです。
インストールされているtorch.hubのバージョンを上げる必要がありそうです。

走らせていないので推測ですが、repo_owner, repo_name = repo_info.split('/')の部分でオーナーと名前の2つが返ってきてほしいのにrepo_infoで3つ以上の値が返ってきているのだと思います。

古い回答

二種類あるうちのどちらかでよいのではないでしょうか?

ローカルでモデルを読むときに条件をガチガチに固定したいのであれば、Samvandha Pathakさんの回答のように引数を根こそぎ固定すれば外れなさそうです。

投稿2022/05/20 21:36

編集2022/05/23 21:29
fourteenlength

総合スコア2727

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

reiya_123

2022/05/21 02:37

ご返信ありがとうございます。 既存モデルyolov5sではパスを通してできました。 ありがとうございます。 しかし、以下の自分で作成したモデルではエラーが出てしまっています。 申し訳ございませんがご教示いただけますでしょうか。 model_name='best.pt' model = torch.hub.load(os.getcwd()+'/yolov5/', 'custom', source='local', path = model_name, force_reload = True) <エラー> Exception: [Errno 2] No such file or directory: 'best.pt'. Cache may be out of date, try `force_reload=True` or see https://github.com/ultralytics/yolov5/issues/36 for help.
fourteenlength

2022/05/21 07:23

pytorchのモデルだと拡張子がpthだったと思いますが、ptであってますか?プログラムの問題ではなく、拡張子をご入力していただけーーという可能性があります。
reiya_123

2022/05/23 21:00

返信大変遅くなり申し訳ございません。 yolov5,bestともに拡張子は.ptとなっております。
reiya_123

2022/05/23 21:56

迅速なご対応ありがとうございます。 現在、tensorflow2.4を使用するためにcuda11.0、cuDNN8.6を使用しています。(https://www.tensorflow.org/install/source?hl=ja#gpu_support_2) この場合、pytorchはpytorch==1.7.1になるかと思いますがこれでは動作しなくstableのtorch 1.10.0+cu113を使用しています。 (https://pytorch.org/get-started/previous-versions/) (https://pytorch.org/get-started/locally/) この場合でもバージョンを上げても大丈夫そうでしょうか。 無茶な質問をしているのは承知しておりますが、ご教示いただけないでしょうか。 よろしくお願いいたします。
fourteenlength

2022/05/24 09:39

> この場合でもバージョンを上げても大丈夫そうでしょうか。 基本はやってみるしかないと思います。あと正攻法であるとすれば、調べて同じバージョンで使っている人がいるか調べてみるか、です。 抜け道として、pipのnodependenciesを使って、依存関係の更新はしない、という方法や、pipで入れるもののバージョンを下げる方法もあります。根気よく探せば、TFとTorchの両立ができるバージョンが見つかると思います(私はよくそういうやり方をします)。 CUDA関係はインストールが面倒なので、可能であればpip関係の更新のみでしのぎたいですね。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。