PyTorch Hub에서 YOLOv5 로드하기
📚 This guide explains how to load YOLOv5 🚀 from PyTorch Hub at https://pytorch.org/hub/ultralytics_yolov5.
시작하기 전에
Install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8. Models and datasets download automatically from the latest YOLOv5 release.
pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txtultralytics/yolov5를 클로닝할 필요는 없습니다. PyTorch Hub가 코드를 자동으로 가져옵니다.
PyTorch Hub로 YOLOv5 로드하기
간단한 예제
이 예제는 사전 학습된 YOLOv5s 모델을 PyTorch Hub에서 model로 로드하고 추론을 위해 이미지를 전달합니다. 'yolov5s'는 가장 가볍고 빠른 YOLOv5 모델입니다. 사용 가능한 모든 모델에 대한 자세한 내용은 README를 참조하십시오.
import torch
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Image
im = "https://ultralytics.com/images/zidane.jpg"
# Inference
results = model(im)
results.pandas().xyxy[0]
# xmin ymin xmax ymax confidence class name
# 0 749.50 43.50 1148.0 704.5 0.874023 0 person
# 1 433.50 433.50 517.5 714.5 0.687988 27 tie
# 2 114.75 195.75 1095.0 708.0 0.624512 0 person
# 3 986.00 304.00 1028.0 420.0 0.286865 27 tie상세 예제
이 예제는 PIL 및 OpenCV 이미지 소스를 사용한 **배치 추론(batched inference)**을 보여줍니다. results는 콘솔에 출력하거나, runs/hub에 저장하거나, 지원되는 환경에서 화면에 표시하거나, 텐서 또는 pandas 데이터프레임으로 반환받을 수 있습니다.
import cv2
import torch
from PIL import Image
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Images
for f in "zidane.jpg", "bus.jpg":
torch.hub.download_url_to_file("https://ultralytics.com/images/" + f, f) # download 2 images
im1 = Image.open("zidane.jpg") # PIL image
im2 = cv2.imread("bus.jpg")[..., ::-1] # OpenCV image (BGR to RGB)
# Inference
results = model([im1, im2], size=640) # batch of images
# Results
results.print()
results.save() # or .show()
results.xyxy[0] # im1 predictions (tensor)
results.pandas().xyxy[0] # im1 predictions (pandas)
# xmin ymin xmax ymax confidence class name
# 0 749.50 43.50 1148.0 704.5 0.874023 0 person
# 1 433.50 433.50 517.5 714.5 0.687988 27 tie
# 2 114.75 195.75 1095.0 708.0 0.624512 0 person
# 3 986.00 304.00 1028.0 420.0 0.286865 27 tie
모든 추론 옵션은 YOLOv5 AutoShape() 포워드 메서드를 참조하십시오.
추론 설정
YOLOv5 모델에는 신뢰도 임계값(confidence threshold), IoU 임계값(IoU threshold) 등과 같이 다음을 통해 설정할 수 있는 다양한 추론 속성이 포함되어 있습니다:
model.conf = 0.25 # NMS confidence threshold
model.iou = 0.45 # NMS IoU threshold
model.agnostic = False # NMS class-agnostic
model.multi_label = False # NMS multiple labels per box
model.classes = None # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs
model.max_det = 1000 # maximum number of detections per image
model.amp = False # Automatic Mixed Precision (AMP) inference
results = model(im, size=320) # custom inference size디바이스
모델은 생성 후 임의의 디바이스로 전송할 수 있습니다:
model.cpu() # CPU
model.cuda() # GPU
model.to(device) # i.e. device=torch.device(0)모델을 임의의 device에서 직접 생성할 수도 있습니다:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # load on CPU입력 이미지는 추론 전에 올바른 모델 디바이스로 자동으로 전송됩니다.
출력 생략하기(Silence Outputs)
_verbose=False를 사용하여 모델을 조용히(silent) 로드할 수 있습니다:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # load silently입력 채널
기본값인 3 대신 4개의 입력 채널로 사전 학습된 YOLOv5s 모델을 로드하려면:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)이 경우 모델은 사전 학습된 입력 레이어와 더 이상 형상이 일치하지 않는 첫 번째 입력 레이어를 제외하고 사전 학습된 가중치로 구성됩니다. 입력 레이어는 무작위 가중치로 초기화된 상태로 유지됩니다.
클래스 수
기본값인 80 대신 10개의 출력 클래스로 사전 학습된 YOLOv5s 모델을 로드하려면:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)이 경우 모델은 출력 레이어를 제외하고 사전 학습된 가중치로 구성되며, 출력 레이어는 더 이상 사전 학습된 출력 레이어와 형상이 일치하지 않습니다. 출력 레이어는 무작위 가중치로 초기화된 상태로 유지됩니다.
강제 재로드
위 단계에서 문제가 발생하면 force_reload=True를 설정하여 기존 캐시를 폐기하고 PyTorch Hub에서 최신 YOLOv5 버전을 강제로 새로 다운로드하는 것이 도움이 될 수 있습니다. 캐시된 복사본은 ~/.cache/torch/hub에 저장되며, 해당 폴더를 삭제해도 동일한 효과를 얻을 수 있습니다.
model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # force reload스크린샷 추론
데스크톱 화면에서 추론을 실행하려면:
import torch
from PIL import ImageGrab
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Image
im = ImageGrab.grab() # take a screenshot
# Inference
results = model(im)멀티 GPU 추론
YOLOv5 모델은 스레드 추론을 사용하여 여러 GPU에 병렬로 로드할 수 있습니다:
import threading
import torch
def run(model, im):
"""Performs inference on an image using a given model and saves the output; model must support `.save()` method."""
results = model(im)
results.save()
# Models
model0 = torch.hub.load("ultralytics/yolov5", "yolov5s", device=0)
model1 = torch.hub.load("ultralytics/yolov5", "yolov5s", device=1)
# Inference
threading.Thread(target=run, args=[model0, "https://ultralytics.com/images/zidane.jpg"], daemon=True).start()
threading.Thread(target=run, args=[model1, "https://ultralytics.com/images/bus.jpg"], daemon=True).start()학습
추론 대신 학습을 위해 YOLOv5 모델을 로드하려면 autoshape=False로 설정하십시오. 무작위로 초기화된 가중치로 모델을 로드하려면(처음부터 학습하기 위해) pretrained=False를 사용하십시오. 이 경우 사용자가 직접 학습 스크립트를 제공해야 합니다. 또는 모델 학습에 대해서는 당사의 YOLOv5 사용자 정의 데이터 학습 튜토리얼을 참조하십시오.
import torch
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False) # load pretrained
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False) # load scratchBase64 결과
API 서비스와 함께 사용할 경우입니다. 자세한 내용은 Flask REST API 예제를 참조하십시오.
import base64
from io import BytesIO
from PIL import Image
results = model(im) # inference
results.ims # array of original images (as np array) passed to model for inference
results.render() # updates results.ims with boxes and labels
for im in results.ims:
buffered = BytesIO()
im_base64 = Image.fromarray(im)
im_base64.save(buffered, format="JPEG")
print(base64.b64encode(buffered.getvalue()).decode("utf-8")) # base64 encoded image with results잘라낸 결과(Cropped Results)
결과를 탐지 영역으로 잘라내어 반환하고 저장할 수 있습니다:
results = model(im) # inference
crops = results.crop(save=True) # cropped detections dictionaryPandas 결과
결과를 Pandas DataFrames 형식으로 반환받을 수 있습니다:
results = model(im) # inference
results.pandas().xyxy[0] # Pandas DataFramePandas Output (click to expand)
print(results.pandas().xyxy[0])
# xmin ymin xmax ymax confidence class name
# 0 749.50 43.50 1148.0 704.5 0.874023 0 person
# 1 433.50 433.50 517.5 714.5 0.687988 27 tie
# 2 114.75 195.75 1095.0 708.0 0.624512 0 person
# 3 986.00 304.00 1028.0 420.0 0.286865 27 tie정렬된 결과
결과를 열별로 정렬할 수 있습니다. 예를 들어 번호판 숫자 탐지 결과를 왼쪽에서 오른쪽(x축)으로 정렬하려면:
results = model(im) # inference
results.pandas().xyxy[0].sort_values("xmin") # sorted left-rightJSON 결과
.pandas() 데이터프레임으로 변환한 후 .to_json() 메서드를 사용하여 결과를 JSON 형식으로 반환할 수 있습니다. JSON 형식은 orient 인수를 사용하여 수정할 수 있습니다. 자세한 내용은 pandas .to_json() 문서를 참조하십시오.
results = model(ims) # inference
results.pandas().xyxy[0].to_json(orient="records") # JSON img1 predictionsJSON Output (click to expand)
[
{
"xmin": 749.5,
"ymin": 43.5,
"xmax": 1148.0,
"ymax": 704.5,
"confidence": 0.8740234375,
"class": 0,
"name": "person"
},
{
"xmin": 433.5,
"ymin": 433.5,
"xmax": 517.5,
"ymax": 714.5,
"confidence": 0.6879882812,
"class": 27,
"name": "tie"
},
{
"xmin": 115.25,
"ymin": 195.75,
"xmax": 1096.0,
"ymax": 708.0,
"confidence": 0.6254882812,
"class": 0,
"name": "person"
},
{
"xmin": 986.0,
"ymin": 304.0,
"xmax": 1028.0,
"ymax": 420.0,
"confidence": 0.2873535156,
"class": 27,
"name": "tie"
}
]사용자 정의 모델
이 예제는 PyTorch Hub를 사용하여 20개의 클래스로 VOC 학습된 사용자 정의 YOLOv5s 모델 'best.pt'를 로드합니다.
import torch
model = torch.hub.load("ultralytics/yolov5", "custom", path="path/to/best.pt") # local model
model = torch.hub.load("path/to/yolov5", "custom", path="path/to/best.pt", source="local") # local repoTensorRT, ONNX 및 OpenVINO 모델
PyTorch Hub는 사용자 정의 학습 모델을 포함하여 대부분의 YOLOv5 내보내기 형식에 대한 추론을 지원합니다. 모델 내보내기에 대한 자세한 내용은 TFLite, ONNX, CoreML, TensorRT 내보내기 튜토리얼을 참조하십시오.
import torch
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.pt") # PyTorch
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.torchscript") # TorchScript
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.onnx") # ONNX
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_openvino_model/") # OpenVINO
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.engine") # TensorRT
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.mlmodel") # CoreML (macOS-only)
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.tflite") # TFLite
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_paddle_model/") # PaddlePaddle지원되는 환경
Ultralytics는 프로젝트를 빠르게 시작할 수 있도록 CUDA, CUDNN, Python, PyTorch와 같은 필수 종속성이 미리 설치된 다양한 준비된 환경을 제공합니다.
- 무료 GPU 노트북:
- Google Cloud: GCP 퀵스타트 가이드
- Amazon: AWS 퀵스타트 가이드
- Azure: AzureML 퀵스타트 가이드
- Docker: Docker 퀵스타트 가이드
프로젝트 상태
이 배지는 모든 YOLOv5 GitHub Actions CI(지속적 통합) 테스트가 성공적으로 통과되었음을 나타냅니다. 이러한 CI 테스트는 학습, 검증, 추론, 내보내기 및 벤치마크를 포함한 YOLOv5의 다양한 핵심 기능과 성능을 엄격하게 점검합니다. 테스트는 24시간마다 그리고 새로운 커밋이 있을 때마다 수행되며, macOS, Windows 및 Ubuntu에서 일관되고 안정적인 운영을 보장합니다.