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

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

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

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

Python 3.x

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

Q&A

1回答

4228閲覧

torch.hub.loadについて

reiya_123

総合スコア57

PyTorch

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

Python 3.x

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

0グッド

0クリップ

投稿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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/05/20 09:25

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

2022/05/20 10:24

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

回答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
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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.
退会済みユーザー

退会済みユーザー

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/) この場合でもバージョンを上げても大丈夫そうでしょうか。 無茶な質問をしているのは承知しておりますが、ご教示いただけないでしょうか。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2022/05/24 09:39

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問