yolov5 colab에서 학습한 best.pt를 웝캠으로 실행하는 방법 질문

anaconda3로 visual studio code를 실행하고 거기서 python을 다운받아서 실행하였고 YOLOv5 2024-5-24 Python-3.11.7 torch-2.3.0+cpu CPU

import torch
import cv2
from numpy import random

YOLOv5 모델 정의

model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')

cap = cv2.VideoCapture(0)

while cap.isOpened():
ret, frame = cap.read()
if ret:
# 프레임 크기 조정
frame = cv2.resize(frame, (640, 480))

    # 이미지를 모델에 입력
    results = model(frame)

    # 객체 감지 결과 얻기
    detections = results.pandas().xyxy[0]
    if not detections.empty:
        # 결과를 반복하며 객체 표시
        for _, detection in detections.iterrows():
            x1, y1, x2, y2 = detection[['xmin', 'ymin', 'xmax', 'ymax']].astype(int).values
            label = detection['name']
            conf = detection['confidence']

            # 박스와 라벨 표시
            color = [int(c) for c in random.choice(range(256), size=3)]
            cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2)
            cv2.putText(frame, f'{label} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

    # 프레임 표시
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

작동시키면
PS C:\Users\dlgus\OneDrive\Desktop\python_code> & C:/Users/dlgus/anaconda3/python.exe c:/Users/dlgus/OneDrive/Desktop/python_code/main1-2.py
Using cache found in C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master
YOLOv5 2024-5-24 Python-3.11.7 torch-2.3.0+cpu CPU

Traceback (most recent call last):
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", line 50, in _create
model = DetectMultiBackend(path, device=device, fuse=autoshape) # detection model
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\models\common.py", line 467, in init
model = attempt_load(weights if isinstance(weights, list) else w, device=device, inplace=True, fuse=fuse)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\models\experimental.py", line 98, in attempt_load
ckpt = torch.load(attempt_download(w), map_location="cpu") # load
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\site-packages\torch\serialization.py", line 1025, in load
return _load(opened_zipfile,
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\site-packages\torch\serialization.py", line 1446, in _load
result = unpickler.load()
^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\pathlib.py", line 873, in new
raise NotImplementedError("cannot instantiate %r on your system"
NotImplementedError: cannot instantiate 'PosixPath' on your system

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", line 65, in _create
model = attempt_load(path, device=device, fuse=False) # arbitrary model
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\models\experimental.py", line 98, in attempt_load
ckpt = torch.load(attempt_download(w), map_location="cpu") # load
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\site-packages\torch\serialization.py", line 1025, in load
return _load(opened_zipfile,
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\site-packages\torch\serialization.py", line 1446, in _load
result = unpickler.load()
^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\pathlib.py", line 873, in new
raise NotImplementedError("cannot instantiate %r on your system"
NotImplementedError: cannot instantiate 'PosixPath' on your system

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "c:\Users\dlgus\OneDrive\Desktop\python_code\main1-2.py", line 6, in
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\site-packages\torch\hub.py", line 568, in load
model = _load_local(repo_or_dir, model, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus\anaconda3\Lib\site-packages\torch\hub.py", line 597, in _load_local
model = entry(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", line 88, in custom
return _create(path, autoshape=autoshape, verbose=_verbose, device=device)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\dlgus/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", line 83, in _create
raise Exception(s) from e
Exception: cannot instantiate 'PosixPath' on your system. Cache may be out of date, try force_reload=True or see PyTorch Hub - Ultralytics YOLO Docs for help.

이런 형식으로 에러가 발생하는대 도움을 받을수 있을까요?

  • 아래 답변은 OpenAI의 GPT-4o 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! 질문해 주셔서 감사합니다. 웹캠을 이용해 YOLOv5 모델을 실행하려고 하시는군요. 현재 발생하는 문제는 PosixPath와 관련된 오류로 보입니다. 이 문제는 주로 Windows 시스템에서 발생하며, PyTorch가 경로를 처리하는 방식과 관련이 있습니다.

우선, 문제를 요약해보겠습니다:

  • Anaconda3와 Visual Studio Code를 사용하여 YOLOv5 모델을 실행하려고 합니다.
  • best.pt 파일을 로드하고 웹캠을 통해 실시간 객체 감지를 수행하려고 합니다.
  • 모델 로드 중 PosixPath 관련 오류가 발생합니다.

이 문제를 해결하기 위해 다음과 같은 방법을 시도해볼 수 있습니다:

  1. PyTorch Hub 캐시 강제 재로드:
    PyTorch Hub 캐시가 손상되었을 수 있으므로, force_reload=True 옵션을 사용하여 캐시를 강제 재로드해보세요.

  2. 경로 문제 해결:
    Windows 시스템에서 경로 문제를 해결하기 위해 pathlib 대신 일반 문자열 경로를 사용해보세요.

아래는 수정된 코드 예제입니다:

import torch
import cv2
from numpy import random

# YOLOv5 모델 로드
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)

# 웹캠 캡처 시작
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        # 프레임 크기 조정
        frame = cv2.resize(frame, (640, 480))

        # 이미지를 모델에 입력
        results = model(frame)

        # 객체 감지 결과 얻기
        detections = results.pandas().xyxy[0]
        if not detections.empty:
            # 결과를 반복하며 객체 표시
            for _, detection in detections.iterrows():
                x1, y1, x2, y2 = detection[['xmin', 'ymin', 'xmax', 'ymax']].astype(int).values
                label = detection['name']
                conf = detection['confidence']

                # 박스와 라벨 표시
                color = [int(c) for c in random.choice(range(256), size=3)]
                cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2)
                cv2.putText(frame, f'{label} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

        # 프레임 표시
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cap.release()
cv2.destroyAllWindows()

이 코드는 force_reload=True 옵션을 추가하여 PyTorch Hub 캐시를 강제 재로드합니다. 이 방법이 문제를 해결하지 못한다면, best.pt 파일의 경로를 절대 경로로 지정해보세요.

추가로, PyTorch Hub와 YOLOv5에 대한 더 자세한 정보는 다음 링크에서 확인할 수 있습니다:

문제가 해결되지 않거나 추가적인 도움이 필요하시면 언제든지 질문해 주세요. 제 답변이 틀릴 수도 있으니, 다른 방법도 시도해 보시길 권장합니다. 감사합니다!


  • 이 답변이 도움이 되셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4-Turbo 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! YOLOv5 모델을 Colab에서 학습한 후, 이를 로컬 환경에서 웹캠을 통해 실행하려는 과정에서 발생한 문제에 대해 도움을 요청하신 것으로 이해됩니다. 에러 메시지를 보면, 모델을 로드하는 과정에서 'PosixPath'를 인스턴스화할 수 없다는 내용이 나타나고 있네요. 이는 일반적으로 Windows 시스템에서 발생하는 경로 관련 문제일 가능성이 높습니다. 문제 해결을 위해 몇 가지 해결 방안을 제시해 드리겠습니다.

문제 해결 방안

  1. torch.hub.load 함수 사용 시 force_reload=True 옵션 추가하기

torch.hub.load 함수를 사용할 때, force_reload=True 옵션을 추가하여 캐시된 모델이 아닌 새로운 모델을 다운로드하도록 시도해 볼 수 있습니다. 이는 캐시 문제로 인한 오류를 해결할 수 있는 방법 중 하나입니다.

model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)
  1. 경로 문제 해결

Windows에서는 경로를 다룰 때 \를 사용하지만, Python 코드 내에서는 /를 사용하거나 \\를 사용하여 경로를 표현해야 합니다. 따라서, 모델 경로를 지정할 때 이를 확인해 보세요.

  1. 최신 버전의 PyTorch 및 YOLOv5 사용

시스템과 호환성 문제를 최소화하기 위해 PyTorch와 YOLOv5의 최신 버전을 사용하는 것이 좋습니다. 현재 사용 중인 버전에서 문제가 발생한다면, 라이브러리를 업데이트해 보세요.

pip install torch torchvision --upgrade
pip install -U yolov5  # YOLOv5의 경우 GitHub 리포지토리를 참조하여 최신 버전으로 업데이트
  1. 환경 변수 설정

Windows에서 PosixPath 관련 문제가 발생하는 경우, 환경 변수를 설정하여 Python이 올바른 경로 형식을 사용하도록 할 수 있습니다. 이는 보다 복잡한 해결 방안이 될 수 있으며, 일반적으로는 위의 방법들로 문제가 해결됩니다.

참고 자료

PyTorch 공식 문서 및 YOLOv5 관련 문서는 다음 링크에서 더 많은 정보를 얻을 수 있습니다.

위의 해결 방안을 시도해 보시고, 여전히 문제가 해결되지 않는다면, 추가적인 정보와 함께 질문을 업데이트해 주세요. 제가 제공한 해결책이 정확하지 않을 수도 있으니, 이 점 양해 부탁드립니다. 문제 해결을 위해 최선을 다하겠습니다!


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 Anthropic의 Claude-3 Opus 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! YOLOv5 모델을 사용하면서 겪는 문제에 대해 질문해 주셔서 감사합니다. 에러 메시지를 보니 'PosixPath'를 시스템에서 인스턴스화할 수 없다는 내용이 나오네요. 이는 모델 파일이 다른 운영 체제에서 저장된 경로 정보를 포함하고 있어서 발생하는 문제로 보입니다.

이 문제를 해결하기 위해 다음과 같이 시도해 볼 수 있습니다:

  1. 최신 버전의 YOLOv5 저장소를 사용하세요. 아래 명령어로 최신 버전을 클론할 수 있습니다:
git clone https://github.com/ultralytics/yolov5.git
  1. 최신 버전의 PyTorch와 torchvision을 설치하세요. 아래 명령어로 설치할 수 있습니다:
pip install torch torchvision --upgrade
  1. torch.hub.load() 함수에 force_reload=True 인자를 추가하여 캐시를 무시하고 모델을 새로 다운로드하도록 설정하세요:
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)
  1. 학습된 모델 파일인 best.pt가 현재 작업 디렉토리에 있는지 확인하세요.

위의 방법들을 시도해 보시고, 여전히 문제가 해결되지 않는다면 추가 정보를 제공해 주시면 더 자세히 살펴볼 수 있습니다.

PyTorch 공식 튜토리얼 중 "YOLOv5 모델 로딩하기" 문서를 참고하시면 도움이 될 것 같습니다.

제 답변이 문제 해결에 도움이 되길 바랍니다. 하지만 추가 정보가 필요하거나 제가 놓친 부분이 있다면 말씀해 주세요. 또한 제 답변이 틀리거나 부정확할 수 있다는 점 양해 부탁드립니다. 감사합니다!


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 Google의 Gemini Pro 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

테샤님, 안녕하세요. 질문을拝見했습니다. Visual Studio Code에서 Anaconda3를 통해 Python을 설치하고 실행하여 YOLOv5를 작업 중인 것으로 알고 있습니다. 그런데 "cannot instantiate 'PosixPath' on your system. Cache may be out of date, try force_reload=True or see PyTorch Hub - Ultralytics YOLO Docs for help"라는 오류가 발생하고 계시다는 것을 알 수 있네요. 다음과 같이 문제를 해결해 보시기 바랍니다.

  1. 캐시 업데이트: 오류 메시지에 나와 있듯이 캐시가 오래되었을 수 있습니다. 이를 확인하기 위해 다음 코드를 실행하세요.
import shutil
shutil.rmtree("./.cache/torch/hub/ultralytics_yolov5_master")

이렇게 하면 캐시가 삭제되고 모델이 다시 다운로드됩니다. 그런 다음 다음 코드를 실행하여 모델을 다시 로드하세요.

model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)
  1. Pillow 설치: 오류 메시지에서 'PosixPath'라는 단어가 보이므로 Pillow 라이브러리가 올바르게 설치되어 있지 않을 수 있습니다. 다음 명령어를 실행하여 Pillow를 설치하세요.
pip install --upgrade Pillow
  1. Python 업데이트: Pillow 설치 후에도 문제가 해결되지 않으면 Python 버전이 최신인지 확인하세요. 다음 코드를 실행하여 Python 버전을 확인하세요.
python --version

Python 버전이 최신이 아니라면 최신 버전으로 업데이트하세요.

  1. YOLOv5 업데이트: YOLOv5 모델을 최신 버전으로 업데이트해 보세요. 다음 명령어를 실행하면 업데이트됩니다.
pip install --upgrade ultralytics

다음은 관련 문서 링크입니다. 참고하시기 바랍니다.

이렇게 해도 문제가 해결되지 않으면 YOLOv5 GitHub 저장소의 문제 추적기에서 유사한 문제를 검색하거나 새로운 문제를 제기해 보시기 바랍니다.

제가 드린 답변이 도움이 되셨으면 좋겠습니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!