yolov5 로컬에서 로드하기

토치로 yolov5모델을 로드하려고 하는데

model = torch.hub.load(‘ultralytics/yolov5’, ‘custom’, path=‘D:/best.pt’, force_reload=True)

hub가 아닌 로컬에서 하는 방법이 없을까요?ㅠㅠ

안녕하세요, @1112 님.

글에서 적어주신 코드는 PyTorch Hub를 사용(torch.hub.load())하여 불러오는 것을 말씀해주신 것 같은데요, 맞으실까요?
(yolov5의 아래 예시처럼 사용하시기 위해 가져오신 것처럼 보입니다. :slight_smile: )

import torch

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Image
img = 'https://ultralytics.com/images/zidane.jpg'

# Inference
results = model(img)

다만 질문해주신 것은 이해가 잘 안되었는데요,
로컬에서 가져오신다는 말씀은 위와 같이 가져온 yolov5 모델을 로컬에 저장하고 불러오는 방법이 궁금하신 것일까요?

혹시 torch.save() 등을 사용하여 일반적인 모델 저장 / 불러오기 방법을 사용하지 못하시는 상황이신지 궁금합니다.

https://tutorials.pytorch.kr/beginner/saving_loading_models.html

감사합니다~

네 맞습니다!! yolov5 모델을 로컬에 저장하고 불러오는 방법이 궁금합니다ㅠㅠ

네, PyTorch Hub에서 불러온 yolov5s 모델을 로컬에 저장한 뒤에,
일반적인 모델을 저장하고 불러오는 방법과 동일하게 모델을 저장하는 방식으로는 원하시는 것을 진행하시기 어려우신지 궁금했습니다. ^^;

일반적인 모델의 저장 / 불러오기는 torch.save() 문서와 아래 튜토리얼을 참고하시면 좋을 것 같습니다.

https://pytorch.org/docs/stable/generated/torch.save.html

아…토치에 대한 이해가 없었네요ㅠㅠ 감사합니다~!!!

1개의 좋아요

네, 혹시나 진행하시면서 다른 궁금하신게 있으시면 알려주세요 :slight_smile:

ModuleNotFoundError: No module named 'models

이라는 이슈가 발생했는데 YOLOv5는 .save를 사용하려면

.state_dict()를 사용해야 하나요??

pkl로 저장을 해야 하나요??

안녕하세요, @1112 님.

남겨주신 에러 메시지는 models라는 모듈이 없다는 것인데요, 어떤 코드를 사용하셨을까요?

저장하는 방식은 모델의 구조(YOLOv5 등)보다는 프레임워크에 따라서 달라지는 것이고,
PyTorch에서는 위 튜토리얼처럼 다양한 방식으로 모델을 저장하고 불러오는 방식을 제공하고 있습니다.

불러오기 단계가 아니라 저장하는 단계에서 위와 같은 에러를 보셨다면
사용하시는 코드의 오류를 먼저 살펴보시는 것이 좋을 것 같습니다. :slight_smile:

import torch

model = torch.hub.load(‘ultralytics/yolov5’, ‘custom’, path=’/content/drive/MyDrive/dataset2/best.pt’, force_reload=True)

yolov5모델을 커스텀 한후에

torch.save(model, ‘./best.pth’)
모델을 저장 후

model = torch.load(’/content/drive/MyDrive/tmp.pth’)
모델을 로드하려고 했을 때 발생한 문제였습니다ㅜㅜ

안녕하세요, @1112 님.
작성해주신 코드에는 models가 보이지 않는데요,
혹시 전체 에러 메시지도 함께 공유해주실 수 있으실까요?

yolov5 모델을 로컬로 저장한 뒤 같은 환경의 다른 노트북으로 옮기려면 어떻게 해야 하나요? 도움 부탁드립니다…

안녕하세요, @misoace 님.

학습한 모델을 다른 장치에서 불러오고 싶으시다는 말씀으로 이해했습니다. 맞으실까요?

모델을 저장하고 불러오는 것이 익숙하지 않으시다면, 먼저 아래 튜토리얼을 보시면 도움이 되실 것 같습니다.

https://tutorials.pytorch.kr/beginner/saving_loading_models.html

모델을 이동하시는 목적이 (1) 단순히 추론을 위해서인지, 아니면 (2) 추가적인 학습도 하기 위해서인지에 따라 저장을 어디까지 해야 하는지가 달라질 것 같습니다.

위 튜토리얼의 내용 중, 위 튜토리얼의 앞 부분과 함께, 아래 3개 섹션 정도를 읽어보시고 따라해보시면 이해가 되실 것 같습니다.

더불어, 새로운 질문은 덧글보다는 새 글로 남겨주시는 것이 다른 분들도 함께 보시고 답변해주시기 좋을 것 같습니다.

감사합니다. :smiley:

빠른 답변 감사합니다~ 저는 추론을 위해서 모델을 저장하고 불러오기가 필요합니다. 알려주신 내용 중에서 모델 초기화는 어떻게 해야 할지 도움 부탁드립니다. yolov5을 이용하고 있는데요…

위 튜토리얼의 모델 초기화는 사용하고 계신 yolov5 모델의 인스턴스를 만드는 것을 뜻합니다. 현재 장치에서 yolov5 모델 객체를 어떻게 생성하시고 학습하셨는지를 참고하시면 될 것 같습니다.

위 튜토리얼에 있는 아래와 같은 코드를 기준으로 말씀드리면, model 객체는 TheModelClass 클래스의 인스턴스입니다.

model = TheModelClass()

TheModelClass가 정의된 코드(class TheModelClass(nn.Module): ...와 같은)를 새로운 장치로 복사하신 뒤 동일하게 model 객체를 생성하시고, 기존에 저장하셨던 가중치 등(state_dict라고 불리는)을 불러오시면 될 것 같습니다.

(클래스, 객체에 대한 더 자세한 설명이 필요하시다면 아래 링크를 참고해주시면 좋을 것 같습니다.)

혹시 다른 초기화를 뜻하셨거나, 이해가 잘 안되시면 알려주세요~ :smiley:
현재 장치에서 사용하고 계신 코드(모델을 정의하거나 선언하는 부분) 또는 에러가 발생하셨다면 에러 메시지와 함께 이해가 잘 안되시는 부분을 알려주시면 도움이 될 것 같습니다.

감사합니다~ Model Class 찾아서 객체 생성하고 있네요. 아직 에러가 많지만^^ 해결하면서 특이한 내용있으면 또 여쭤볼께요. pytorch를 사용한 모델링에 대해 좋은 정보가 있나 자주 방문드리겠습니다. 다시 한번 감사드립니다.

2개의 좋아요

잘 되신다니 다행이네요. :smile:
축하드립니다~ :tada:

관련 해결 방법을 블로그에 정리 해보았습니다.

혹시나 이런 외부 링크를 첨부하여 답글을 다는 것이 금지되어 있다면 답변을 삭제하도록 하겠습니다.

3개의 좋아요