You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
14 KiB
14 KiB
comments | description | keywords |
---|---|---|
true | YOLOv8 예측 모드를 사용하여 다양한 작업을 수행하는 방법을 알아보십시오. 이미지, 비디오 및 데이터 형식과 같은 다양한 추론 소스에 대해 자세히 알아봅니다. | Ultralytics, YOLOv8, 예측 모드, 추론 소스, 예측 작업, 스트리밍 모드, 이미지 처리, 비디오 처리, 머신 러닝, AI |
Ultralytics YOLO로 모델 예측
소개
머신 러닝 및 컴퓨터 비전의 세계에서 시각적 데이터를 해석하는 과정을 '추론' 또는 '예측'이라고 합니다. Ultralytics YOLOv8는 다양한 데이터 소스에서의 고성능, 실시간 추론을 위해 맞춤화된 강력한 기능인 예측 모드를 제공합니다.
시청: Ultralytics YOLOv8 모델에서 출력을 추출하여 맞춤 프로젝트에 사용하는 방법.
실제 응용 분야
제조업 | 스포츠 | 안전 |
---|---|---|
차량 예비 부품 탐지 | 축구 선수 탐지 | 사람 넘어짐 탐지 |
예측 인퍼런스를 위해 Ultralytics YOLO 사용하기
다음은 YOLOv8의 예측 모드를 다양한 추론 요구 사항에 사용해야 하는 이유입니다:
- 다양성: 이미지, 비디오, 심지어 실시간 스트림에 대한 추론을 수행할 수 있습니다.
- 성능: 정확성을 희생하지 않고 실시간, 고속 처리를 위해 설계되었습니다.
- 사용 편의성: 빠른 배포 및 테스트를 위한 직관적인 Python 및 CLI 인터페이스를 제공합니다.
- 고도의 사용자 정의: 특정 요구 사항에 맞게 모델의 추론 행동을 조율하기 위한 다양한 설정 및 매개변수를 제공합니다.
예측 모드의 주요 기능
YOLOv8의 예측 모드는 강력하고 다재다능하게 설계되었으며, 다음과 같은 특징을 갖고 있습니다:
- 다중 데이터 소스 호환성: 데이터가 개별 이미지, 이미지 컬렉션, 비디오 파일 또는 실시간 비디오 스트림의 형태로 존재하는지 여부에 관계없이 예측 모드가 지원합니다.
- 스트리밍 모드:
Results
객체의 메모리 효율적인 생성자로 스트리밍 기능을 사용합니다. 예측기의 호출 메서드에서stream=True
로 설정하여 활성화합니다. - 배치 처리: 단일 배치에서 여러 이미지 또는 비디오 프레임을 처리하는 기능을 통해 추론 시간을 더욱 단축합니다.
- 통합 친화적: 유연한 API 덕분에 기존 데이터 파이프라인 및 기타 소프트웨어 구성 요소와 쉽게 통합할 수 있습니다.
Ultralytics YOLO 모델은 Python Results
객체의 리스트를 반환하거나, 추론 중 stream=True
가 모델에 전달될 때 Results
객체의 메모리 효율적인 Python 생성자를 반환합니다:
!!! 예시 "예측"
=== "`stream=False`로 리스트 반환"
```python
from ultralytics import YOLO
# 모델 로드
model = YOLO('yolov8n.pt') # 사전 훈련된 YOLOv8n 모델
# 이미지 리스트에 대한 배치 추론 실행
results = model(['im1.jpg', 'im2.jpg']) # Results 객체의 리스트 반환
# 결과 리스트 처리
for result in results:
boxes = result.boxes # bbox 출력을 위한 Boxes 객체
masks = result.masks # 세그멘테이션 마스크 출력을 위한 Masks 객체
keypoints = result.keypoints # 자세 출력을 위한 Keypoints 객체
probs = result.probs # 분류 출력을 위한 Probs 객체
```
=== "`stream=True`로 생성자 반환"
```python
from ultralytics import YOLO
# 모델 로드
model = YOLO('yolov8n.pt') # 사전 훈련된 YOLOv8n 모델
# 이미지 리스트에 대한 배치 추론 실행
results = model(['im1.jpg', 'im2.jpg'], stream=True) # Results 객체의 생성자 반환
# 결과 생성자 처리
for result in results:
boxes = result.boxes # bbox 출력을 위한 Boxes 객체
masks = result.masks # 세그멘테이션 마스크 출력을 위한 Masks 객체
keypoints = result.keypoints # 자세 출력을 위한 Keypoints 객체
probs = result.probs # 분류 출력을 위한 Probs 객체
```
추론 소스
YOLOv8은 아래 표에 표시된 바와 같이 추론을 위한 다양한 유형의 입력 소스를 처리할 수 있습니다. 소스에는 정적 이미지, 비디오 스트림, 다양한 데이터 형식이 포함됩니다. 표는 또한 각 소스를 'stream=True' ✅와 함께 스트리밍 모드에서 사용할 수 있는지 여부를 나타냅니다. 스트리밍 모드는 비디오나 라이브 스트림을 처리할 때 결과를 메모리에 모두 로드하는 대신 결과의 생성자를 만들어 유용하게 사용됩니다.
!!! Tip "팁"
긴 비디오나 큰 데이터 세트를 처리할 때 'stream=True'를 사용하여 효율적으로 메모리를 관리합니다. 'stream=False'일 때는 모든 프레임 또는 데이터 포인트에 대한 결과가 메모리에 저장되어, 입력이 크면 메모리 부족 오류를 빠르게 유발할 수 있습니다. 반면에, 'stream=True'는 생성자를 사용하여 현재 프레임 또는 데이터 포인트의 결과만 메모리에 유지하여 메모리 소비를 크게 줄이고 메모리 부족 문제를 방지합니다.
소스 | 인수 | 유형 | 비고 |
---|---|---|---|
이미지 | 'image.jpg' |
str 또는 Path |
단일 이미지 파일. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
이미지 URL. |
스크린샷 | 'screen' |
str |
스크린샷을 캡처합니다. |
PIL | Image.open('im.jpg') |
PIL.Image |
HWC 형식으로 RGB 채널이 있습니다. |
OpenCV | cv2.imread('im.jpg') |
np.ndarray |
HWC 형식으로 BGR 채널이 있고 uint8 (0-255) 입니다. |
numpy | np.zeros((640,1280,3)) |
np.ndarray |
HWC 형식으로 BGR 채널이 있고 uint8 (0-255) 입니다. |
torch | torch.zeros(16,3,320,640) |
torch.Tensor |
BCHW 형식으로 RGB 채널이 있고 float32 (0.0-1.0) 입니다. |
CSV | 'sources.csv' |
str 또는 Path |
이미지, 비디오 또는 디렉토리 경로가 있는 CSV 파일. |
비디오 ✅ | 'video.mp4' |
str 또는 Path |
MP4, AVI 등과 같은 형식의 비디오 파일입니다. |
디렉토리 ✅ | 'path/' |
str 또는 Path |
이미지나 비디오가 있는 디렉토리 경로입니다. |
글로브 ✅ | 'path/*.jpg' |
str |
여러 파일에 일치하는 글로브 패턴입니다. '*' 문자를 와일드카드로 사용하세요. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
YouTube 비디오의 URL입니다. |
스트림 ✅ | 'rtsp://example.com/media.mp4' |
str |
RTSP, RTMP, TCP 또는 IP 주소와 같은 스트리밍 프로토콜의 URL입니다. |
멀티-스트림 ✅ | 'list.streams' |
str 또는 Path |
스트림 URL이 행당 하나씩 있는 *.streams 텍스트 파일이며, 예를 들어 8개의 스트림은 배치 크기 8에서 실행됩니다. |
아래는 각 유형의 소스를 사용하는 코드 예제입니다:
!!! 예시 "예측 소스"
=== "이미지"
이미지 파일에서 추론을 실행합니다.
```python
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# 이미지 파일 경로 정의
source = 'path/to/image.jpg'
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```
=== "스크린샷"
현재 스크린 콘텐츠를 스크린샷으로 추론을 실행합니다.
```python
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# 현재 스크린샷을 소스로 정의
source = 'screen'
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```
=== "URL"
URL을 통해 원격으로 호스팅되는 이미지나 비디오에서 추론을 실행합니다.
```python
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# 원격 이미지나 동영상 URL 정의
source = 'https://ultralytics.com/images/bus.jpg'
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```
=== "PIL"
Python Imaging Library (PIL)로 열린 이미지에서 추론을 실행합니다.
```python
from PIL import Image
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# PIL을 사용하여 이미지 열기
source = Image.open('path/to/image.jpg')
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```
=== "OpenCV"
OpenCV로 읽은 이미지에서 추론을 실행합니다.
```python
import cv2
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# OpenCV를 사용하여 이미지 읽기
source = cv2.imread('path/to/image.jpg')
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```
=== "numpy"
numpy 배열로 표현된 이미지에서 추론을 실행합니다.
```python
import numpy as np
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# 무작위 numpy 배열 생성, HWC 형태 (640, 640, 3), 값 범위 [0, 255], 타입 uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```
=== "torch"
PyTorch 텐서로 표현된 이미지에서 추론을 실행합니다.
```python
import torch
from ultralytics import YOLO
# 사전 훈련된 YOLOv8n 모델 로드
model = YOLO('yolov8n.pt')
# 무작위 torch 텐서 생성, BCHW 형태 (1, 3, 640, 640), 값 범위 [0, 1], 타입 float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
# 소스에서 추론 실행
results = model(source) # Results 객체의 리스트
```