콘텐츠로 건너뛰기

다음을 사용한 모델 예측 Ultralytics YOLO

Ultralytics YOLO 에코시스템 및 통합

소개

머신러닝과 컴퓨터 비전의 세계에서 시각적 데이터에서 의미를 찾아내는 과정을 '추론' 또는 '예측'이라고 합니다. Ultralytics YOLOv8 은 광범위한 데이터 소스에서 고성능 실시간 추론을 위해 맞춤화된 예측 모드라는 강력한 기능을 제공합니다.



Watch: Ultralytics YOLOv8 모델에서 출력을 추출하는 방법 사용자 지정 프로젝트용 모델.

실제 애플리케이션

제조 스포츠 안전
차량 예비 부품 감지 축구 선수 감지 사람 낙상 감지
차량 예비 부품 감지 축구 선수 감지 사람 낙상 감지

추론에 Ultralytics YOLO 을 사용하는 이유는 무엇인가요?

다양한 추론 요구에 맞는 YOLOv8 의 예측 모드를 고려해야 하는 이유는 다음과 같습니다:

  • 다목적성: 이미지, 동영상, 라이브 스트림까지 추론할 수 있습니다.
  • 성능: 정확도 저하 없이 실시간 고속 처리를 위해 설계되었습니다.
  • 사용 편의성: 신속한 배포 및 테스트를 위한 직관적인 Python 및 CLI 인터페이스.
  • 고도로 사용자 정의 가능: 특정 요구 사항에 따라 모델의 추론 동작을 조정할 수 있는 다양한 설정 및 매개변수.

예측 모드의 주요 기능

YOLOv8의 예측 모드는 강력하고 다용도로 사용할 수 있도록 설계되었습니다:

  • 다양한 데이터 소스 호환성: 데이터가 개별 이미지, 이미지 모음, 동영상 파일, 실시간 동영상 스트림 등 어떤 형태이든 예측 모드가 지원합니다.
  • 스트리밍 모드: 스트리밍 기능을 사용하여 다음과 같은 메모리 효율적인 제너레이터를 생성합니다. Results 객체를 사용할 수 있습니다. 설정하여 이 기능을 사용하도록 설정합니다. stream=True 를 예측자의 호출 메서드에 추가합니다.
  • 일괄 처리: 여러 이미지 또는 비디오 프레임을 한 번에 일괄 처리하여 추론 시간을 더욱 단축할 수 있는 기능입니다.
  • 통합 친화적: 유연한 API 덕분에 기존 데이터 파이프라인 및 기타 소프트웨어 구성 요소와 쉽게 통합할 수 있습니다.

Ultralytics YOLO 모델은 Python 목록 중 하나를 반환합니다. Results 객체 또는 메모리 효율적인 Python 생성기의 Results 객체를 stream=True 는 추론 중에 모델에 전달됩니다:

예측

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(['im1.jpg', 'im2.jpg'])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename='result.jpg')  # save to disk
from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(['im1.jpg', 'im2.jpg'], stream=True)  # return a generator of Results objects

# Process results generator
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename='result.jpg')  # save to disk

추론 소스

YOLOv8 는 아래 표와 같이 다양한 유형의 입력 소스를 처리하여 추론할 수 있습니다. 소스에는 정적 이미지, 비디오 스트림 및 다양한 데이터 형식이 포함됩니다. 이 표는 또한 각 소스를 스트리밍 모드에서 사용할 수 있는지 여부를 인수 stream=True ✅. 스트리밍 모드는 모든 프레임을 메모리에 로드하는 대신 결과 생성기를 생성하므로 동영상이나 라이브 스트림을 처리하는 데 유용합니다.

사용 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 RGB 채널이 있는 HWC 형식입니다.
OpenCV cv2.imread('im.jpg') np.ndarray BGR 채널이 포함된 HWC 형식 uint8 (0-255).
numpy np.zeros((640,1280,3)) np.ndarray BGR 채널이 포함된 HWC 형식 uint8 (0-255).
torch torch.zeros(16,3,320,640) torch.Tensor RGB 채널이 있는 BCHW 포맷 float32 (0.0-1.0).
CSV 'sources.csv' str 또는 Path 이미지, 동영상 또는 디렉터리 경로가 포함된 CSV 파일입니다.
동영상 ✅ 'video.mp4' str 또는 Path MP4, AVI 등의 형식의 동영상 파일입니다.
디렉토리 ✅ 'path/' str 또는 Path 이미지 또는 동영상이 포함된 디렉토리의 경로입니다.
glob ✅ '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 *.streams 텍스트 파일에 행당 하나의 스트림 URL, 즉 8개의 스트림이 배치 크기 8로 실행됩니다.

다음은 각 소스 유형을 사용하는 코드 예제입니다:

예측 소스

이미지 파일에서 추론을 실행합니다.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to the image file
source = 'path/to/image.jpg'

# Run inference on the source
results = model(source)  # list of Results objects

현재 화면 콘텐츠에 대한 추론을 스크린샷으로 실행합니다.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define current screenshot as source
source = 'screen'

# Run inference on the source
results = model(source)  # list of Results objects

URL을 통해 원격으로 호스팅된 이미지 또는 동영상에서 추론을 실행합니다.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define remote image or video URL
source = 'https://ultralytics.com/images/bus.jpg'

# Run inference on the source
results = model(source)  # list of Results objects

Python 이미징 라이브러리(PIL)로 연 이미지에서 추론을 실행합니다.

from PIL import Image
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Open an image using PIL
source = Image.open('path/to/image.jpg')

# Run inference on the source
results = model(source)  # list of Results objects

OpenCV로 읽은 이미지에서 추론을 실행합니다.

import cv2
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Read an image using OpenCV
source = cv2.imread('path/to/image.jpg')

# Run inference on the source
results = model(source)  # list of Results objects

널 배열로 표현된 이미지에서 추론을 실행합니다.

import numpy as np
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')

# Run inference on the source
results = model(source)  # list of Results objects

PyTorch tensor 으로 표현된 이미지에 대해 추론을 실행합니다.

import torch
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)

# Run inference on the source
results = model(source)  # list of Results objects

CSV 파일에 나열된 이미지, URL, 동영상 및 디렉터리 모음에 대해 추론을 실행합니다.

import torch
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define a path to a CSV file with images, URLs, videos and directories
source = 'path/to/file.csv'

# Run inference on the source
results = model(source)  # list of Results objects

동영상 파일에서 추론을 실행합니다. 다음을 사용하여 stream=True를 사용하여 결과 객체 생성기를 생성하여 메모리 사용량을 줄일 수 있습니다.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to video file
source = 'path/to/video.mp4'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

디렉토리에 있는 모든 이미지와 동영상에 대해 추론을 실행합니다. 하위 디렉터리에서도 이미지와 동영상을 캡처하려면 글로브 패턴을 사용합니다. path/to/dir/**/*.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to directory containing images and videos for inference
source = 'path/to/dir'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

글로브 표현식과 일치하는 모든 이미지와 동영상에 대해 추론을 실행합니다. * 문자.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define a glob search for all JPG files in a directory
source = 'path/to/dir/*.jpg'

# OR define a recursive glob search for all JPG files including subdirectories
source = 'path/to/dir/**/*.jpg'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

YouTube 동영상에서 추론을 실행합니다. 다음을 사용하여 stream=True를 사용하여 결과 객체 생성기를 생성하여 긴 동영상의 메모리 사용량을 줄일 수 있습니다.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define source as YouTube video URL
source = 'https://youtu.be/LNwODJXcvt4'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

RTSP, RTMP, TCP 및 IP 주소 프로토콜을 사용하여 원격 스트리밍 소스에 대한 추론을 실행합니다. 하나의 스트림에 여러 개의 스트림이 제공되는 경우 *.streams 텍스트 파일을 입력하면 일괄 추론이 실행됩니다. 즉, 8개의 스트림이 배치 크기 8로 실행되고, 그렇지 않으면 단일 스트림이 배치 크기 1로 실행됩니다.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Single stream with batch-size 1 inference
source = 'rtsp://example.com/media.mp4'  # RTSP, RTMP, TCP or IP streaming address

# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = 'path/to/list.streams'  # *.streams text file with one streaming address per row

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

추론 인수

model.predict() 는 기본값을 재정의하기 위해 추론 시 전달할 수 있는 여러 인수를 허용합니다:

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on 'bus.jpg' with arguments
model.predict('bus.jpg', save=True, imgsz=320, conf=0.5)

추론 인수:

인수 유형 기본값 설명
source str 'ultralytics/assets' 추론할 데이터 소스를 지정합니다. 이미지 경로, 동영상 파일, 디렉토리, URL 또는 실시간 피드용 디바이스 ID가 될 수 있습니다. 다양한 형식과 소스를 지원하므로 다양한 유형의 입력에 유연하게 적용할 수 있습니다.
conf float 0.25 탐지에 대한 최소 신뢰도 임계값을 설정합니다. 이 임계값보다 낮은 신뢰도로 탐지된 개체는 무시됩니다. 이 값을 조정하면 오탐지를 줄이는 데 도움이 될 수 있습니다.
iou float 0.7 비최대 억제(NMS)에 대한 교차점 초과(IoU) 임계값입니다. 값이 낮을수록 중복되는 상자를 제거하여 탐지 횟수가 줄어들어 중복을 줄이는 데 유용합니다.
imgsz int or tuple 640 추론할 이미지 크기를 정의합니다. 단일 정수일 수 있습니다. 640 를 사용하여 정사각형 크기 조정 또는 (높이, 너비) 튜플을 사용합니다. 적절한 크기 조정은 감지 정확도와 처리 속도를 향상시킬 수 있습니다.
half bool False 정확도에 미치는 영향을 최소화하면서 지원되는 GPU에서 모델 추론 속도를 높일 수 있는 반정확도(FP16) 추론을 활성화합니다.
device str None 추론할 장치를 지정합니다(예, cpu, cuda:0 또는 0). 사용자가 모델 실행을 위해 CPU, 특정 GPU 또는 기타 컴퓨팅 장치 중에서 선택할 수 있습니다.
max_det int 300 이미지당 허용되는 최대 감지 횟수. 모델이 한 번의 추론에서 감지할 수 있는 총 오브젝트 수를 제한하여 밀집된 장면에서 과도한 출력을 방지합니다.
vid_stride int 1 비디오 입력의 프레임 보폭. 동영상에서 프레임을 건너뛰어 시간 해상도를 희생하면서 처리 속도를 높일 수 있습니다. 값이 1이면 모든 프레임을 처리하고, 값이 클수록 프레임을 건너뜁니다.
stream_buffer bool False 비디오 스트림을 처리할 때 모든 프레임을 버퍼링할지 여부를 결정합니다(True), 또는 모델이 가장 최근 프레임을 반환해야 하는지(False). 실시간 애플리케이션에 유용합니다.
visualize bool False 추론 중에 모델 기능의 시각화를 활성화하여 모델이 '보고 있는 것'에 대한 인사이트를 제공합니다. 디버깅 및 모델 해석에 유용합니다.
augment bool False 예측을 위한 테스트 시간 증강(TTA)을 지원하여 추론 속도를 희생하면서 탐지 견고성을 향상시킬 수 있습니다.
agnostic_nms bool False 서로 다른 클래스의 겹치는 상자를 병합하는 클래스 무관 NMS(Non-Maximum Suppression)를 활성화합니다. 클래스 중복이 일반적인 다중 클래스 탐지 시나리오에 유용합니다.
classes list[int] None 클래스 ID 집합으로 예측을 필터링합니다. 지정된 클래스에 속하는 탐지만 반환됩니다. 다중 클래스 탐지 작업에서 관련 개체에 집중하는 데 유용합니다.
retina_masks bool False 모델에서 사용 가능한 경우 고해상도 세분화 마스크를 사용합니다. 이렇게 하면 세분화 작업의 마스크 품질을 향상시켜 더 세밀한 디테일을 제공할 수 있습니다.
embed list[int] None 특징 벡터 또는 임베딩을 추출할 레이어를 지정합니다. 클러스터링이나 유사도 검색과 같은 다운스트림 작업에 유용합니다.

시각화 인수:

인수 유형 기본값 설명
show bool False 만약 True를 클릭하면 주석이 달린 이미지 또는 동영상이 창에 표시됩니다. 개발 또는 테스트 중에 즉각적인 시각적 피드백을 받을 때 유용합니다.
save bool False 주석이 달린 이미지나 동영상을 파일로 저장할 수 있습니다. 문서화, 추가 분석 또는 결과 공유에 유용합니다.
save_frames bool False 동영상 처리 시 개별 프레임을 이미지로 저장합니다. 특정 프레임을 추출하거나 프레임별로 세부적으로 분석할 때 유용합니다.
save_txt bool False 탐지 결과를 다음 형식에 따라 텍스트 파일로 저장합니다. [class] [x_center] [y_center] [width] [height] [confidence]. 다른 분석 도구와의 통합에 유용합니다.
save_conf bool False 저장된 텍스트 파일에 신뢰도 점수를 포함합니다. 후처리 및 분석에 사용할 수 있는 세부 정보를 향상시킵니다.
save_crop bool False 탐지된 이미지를 잘라낸 이미지를 저장합니다. 데이터 세트 보강, 분석 또는 특정 개체에 대한 집중 데이터 세트 생성에 유용합니다.
show_labels bool True 시각적 출력에 각 감지 항목에 대한 레이블을 표시합니다. 감지된 개체에 대한 즉각적인 이해를 제공합니다.
show_conf bool True 각 탐지에 대한 신뢰도 점수를 라벨과 함께 표시합니다. 각 탐지에 대한 모델의 확실성에 대한 인사이트를 제공합니다.
show_boxes bool True 감지된 개체 주위에 경계 상자를 그립니다. 이미지 또는 비디오 프레임에서 물체를 시각적으로 식별하고 위치를 파악하는 데 필수적입니다.
line_width None or int None 경계 상자의 선 너비를 지정합니다. 만약 None를 클릭하면 이미지 크기에 따라 선 너비가 자동으로 조정됩니다. 선명도를 위한 시각적 사용자 지정 기능을 제공합니다.

이미지 및 비디오 형식

YOLOv8 는 ultralytics/data/utils .py에 지정된 대로 다양한 이미지 및 동영상 형식을 지원합니다. 유효한 접미사 및 예제 예측 명령은 아래 표를 참조하세요.

이미지

아래 표에는 유효한 Ultralytics 이미지 형식이 포함되어 있습니다.

이미지 접미사 예측 명령 예제 참조
.bmp yolo predict source=image.bmp Microsoft BMP 파일 형식
.dng yolo predict source=image.dng Adobe DNG
.jpeg yolo predict source=image.jpeg JPEG
.jpg yolo predict source=image.jpg JPEG
.mpo yolo predict source=image.mpo 다중 사진 개체
.png yolo predict source=image.png 휴대용 네트워크 그래픽
.tif yolo predict source=image.tif 태그 이미지 파일 형식
.tiff yolo predict source=image.tiff 태그 이미지 파일 형식
.webp yolo predict source=image.webp WebP
.pfm yolo predict source=image.pfm 휴대용 플로트맵

동영상

아래 표에는 유효한 Ultralytics 동영상 형식이 포함되어 있습니다.

비디오 접미사 예측 명령 예제 참조
.asf yolo predict source=video.asf 고급 시스템 형식
.avi yolo predict source=video.avi 오디오 비디오 인터리브
.gif yolo predict source=video.gif 그래픽 교환 형식
.m4v yolo predict source=video.m4v MPEG-4 파트 14
.mkv yolo predict source=video.mkv 마트로스카
.mov yolo predict source=video.mov QuickTime 파일 형식
.mp4 yolo predict source=video.mp4 MPEG-4 파트 14 - 위키백과
.mpeg yolo predict source=video.mpeg MPEG-1 파트 2
.mpg yolo predict source=video.mpg MPEG-1 파트 2
.ts yolo predict source=video.ts MPEG 전송 스트림
.wmv yolo predict source=video.wmv Windows 미디어 비디오
.webm yolo predict source=video.webm WebM 프로젝트

결과 작업

모두 Ultralytics predict() 호출은 다음과 같은 목록을 반환합니다. Results 객체입니다:

결과

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
results = model('bus.jpg')  # list of 1 Results object
results = model(['bus.jpg', 'zidane.jpg'])  # list of 2 Results objects

Results 객체에는 다음과 같은 속성이 있습니다:

속성 유형 설명
orig_img numpy.ndarray 원본 이미지가 덩어리 배열로 표시됩니다.
orig_shape tuple (높이, 너비) 형식의 원본 이미지 모양입니다.
boxes Boxes, optional 감지 경계 상자가 포함된 박스 개체입니다.
masks Masks, optional 감지 마스크가 포함된 마스크 객체입니다.
probs Probs, optional 분류 작업에 대한 각 클래스의 확률을 포함하는 Probs 객체입니다.
keypoints Keypoints, optional 각 객체에 대해 감지된 키포인트가 포함된 키포인트 객체입니다.
obb OBB, optional 방향이 지정된 바운딩 박스를 포함하는 OBB 객체입니다.
speed dict 이미지당 밀리초 단위의 전처리, 추론 및 후처리 속도 사전입니다.
names dict 클래스 이름 사전입니다.
path str 이미지 파일의 경로입니다.

Results 객체에는 다음과 같은 메서드가 있습니다:

방법 반환 유형 설명
update() None 결과 개체의 상자, 마스크 및 프로브 속성을 업데이트합니다.
cpu() Results CPU 메모리에 있는 모든 텐서가 포함된 결과 객체의 복사본을 반환합니다.
numpy() Results 모든 텐서가 포함된 결과 객체의 복사본을 널 배열로 반환합니다.
cuda() Results GPU 메모리에 있는 모든 텐서가 포함된 결과 오브젝트의 사본을 반환합니다.
to() Results 지정된 디바이스 및 dtype의 텐서가 포함된 결과 객체의 복사본을 반환합니다.
new() Results 동일한 이미지, 경로 및 이름을 가진 새 결과 개체를 반환합니다.
plot() numpy.ndarray 탐지 결과를 플로팅합니다. 주석이 달린 이미지의 널 배열을 반환합니다.
show() None 주석이 달린 결과를 화면에 표시합니다.
save() None 주석이 달린 결과를 파일에 저장합니다.
verbose() str 각 작업에 대한 로그 문자열을 반환합니다.
save_txt() None 예측을 txt 파일로 저장합니다.
save_crop() None 잘린 예측을 다음 위치에 저장합니다. save_dir/cls/file_name.jpg.
tojson() str 개체를 JSON 형식으로 변환합니다.

자세한 내용은 Results 클래스 문서.

상자

Boxes 객체를 사용하여 바운딩 박스를 색인하고, 조작하고, 다른 형식으로 변환할 수 있습니다.

상자

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

다음은 표입니다. Boxes 클래스 메서드 및 속성(이름, 유형 및 설명 포함)을 포함합니다:

이름 유형 설명
cpu() 방법 개체를 CPU 메모리로 이동합니다.
numpy() 방법 객체를 널 배열로 변환합니다.
cuda() 방법 오브젝트를 CUDA 메모리로 이동합니다.
to() 방법 개체를 지정된 장치로 이동합니다.
xyxy 속성 (torch.Tensor) 상자를 xyxy 형식으로 반환합니다.
conf 속성 (torch.Tensor) 상자의 신뢰도 값을 반환합니다.
cls 속성 (torch.Tensor) 상자의 클래스 값을 반환합니다.
id 속성 (torch.Tensor) 상자의 트랙 ID를 반환합니다(가능한 경우).
xywh 속성 (torch.Tensor) 상자를 xywh 형식으로 반환합니다.
xyxyn 속성 (torch.Tensor) 원본 이미지 크기에 따라 정규화된 xyxy 형식의 상자를 반환합니다.
xywhn 속성 (torch.Tensor) 원본 이미지 크기로 정규화된 xywh 형식의 상자를 반환합니다.

자세한 내용은 Boxes 클래스 문서.

마스크

Masks 객체를 사용하여 마스크를 인덱싱하고, 조작하고, 세그먼트로 변환할 수 있습니다.

마스크

from ultralytics import YOLO

# Load a pretrained YOLOv8n-seg Segment model
model = YOLO('yolov8n-seg.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

다음은 표입니다. Masks 클래스 메서드 및 속성(이름, 유형 및 설명 포함)을 포함합니다:

이름 유형 설명
cpu() 방법 CPU 메모리에서 tensor 마스크를 반환합니다.
numpy() 방법 tensor 마스크를 널 배열로 반환합니다.
cuda() 방법 GPU 메모리에 있는 마스크 tensor 를 반환합니다.
to() 방법 지정된 장치 및 dtype을 가진 tensor 마스크를 반환합니다.
xyn 속성 (torch.Tensor) 텐서로 표현된 정규화된 세그먼트의 목록입니다.
xy 속성 (torch.Tensor) 텐서로 표현된 픽셀 좌표의 세그먼트 목록입니다.

자세한 내용은 Masks 클래스 문서.

키포인트

Keypoints 객체를 사용하여 좌표를 색인하고, 조작하고, 정규화할 수 있습니다.

키포인트

from ultralytics import YOLO

# Load a pretrained YOLOv8n-pose Pose model
model = YOLO('yolov8n-pose.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

다음은 표입니다. Keypoints 클래스 메서드 및 속성(이름, 유형 및 설명 포함)을 포함합니다:

이름 유형 설명
cpu() 방법 CPU 메모리에 있는 키포인트 tensor 를 반환합니다.
numpy() 방법 키포인트 tensor 를 널 배열로 반환합니다.
cuda() 방법 GPU 메모리에 있는 키포인트 tensor 를 반환합니다.
to() 방법 지정된 장치 및 dtype을 사용하여 tensor 키포인트를 반환합니다.
xyn 속성 (torch.Tensor) 텐서로 표현된 정규화된 키포인트 목록입니다.
xy 속성 (torch.Tensor) 텐서로 표현된 픽셀 좌표의 키포인트 목록입니다.
conf 속성 (torch.Tensor) 사용 가능한 경우 키포인트의 신뢰도 값을 반환하고, 그렇지 않으면 없음입니다.

자세한 내용은 Keypoints 클래스 문서.

Probs

Probs 객체를 사용할 수 있습니다. top1 그리고 top5 인덱스 및 분류 점수.

Probs

from ultralytics import YOLO

# Load a pretrained YOLOv8n-cls Classify model
model = YOLO('yolov8n-cls.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

다음은 메서드와 속성을 요약한 표입니다. Probs 클래스:

이름 유형 설명
cpu() 방법 CPU 메모리에 probs tensor 의 복사본을 반환합니다.
numpy() 방법 probs tensor 의 사본을 널 배열로 반환합니다.
cuda() 방법 GPU 메모리에 probs tensor 의 복사본을 반환합니다.
to() 방법 지정된 장치 및 dtype이 포함된 probs tensor 사본을 반환합니다.
top1 속성 (int) 상위 1등급의 인덱스입니다.
top5 속성 (list[int]) 상위 5개 클래스의 지표입니다.
top1conf 속성 (torch.Tensor) 상위 1등급의 자신감.
top5conf 속성 (torch.Tensor) 상위 5개 클래스의 자신감.

자세한 내용은 Probs 클래스 문서.

OBB

OBB 객체를 사용하여 방향이 지정된 바운딩 박스를 색인하고, 조작하고, 다른 형식으로 변환할 수 있습니다.

OBB

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n-obb.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

다음은 표입니다. OBB 클래스 메서드 및 속성(이름, 유형 및 설명 포함)을 포함합니다:

이름 유형 설명
cpu() 방법 개체를 CPU 메모리로 이동합니다.
numpy() 방법 객체를 널 배열로 변환합니다.
cuda() 방법 오브젝트를 CUDA 메모리로 이동합니다.
to() 방법 개체를 지정된 장치로 이동합니다.
conf 속성 (torch.Tensor) 상자의 신뢰도 값을 반환합니다.
cls 속성 (torch.Tensor) 상자의 클래스 값을 반환합니다.
id 속성 (torch.Tensor) 상자의 트랙 ID를 반환합니다(가능한 경우).
xyxy 속성 (torch.Tensor) 가로 상자를 xyxy 형식으로 반환합니다.
xywhr 속성 (torch.Tensor) 회전된 상자를 xywhr 형식으로 반환합니다.
xyxyxyxy 속성 (torch.Tensor) 회전된 상자를 xyxyxyxy 형식으로 반환합니다.
xyxyxyxyn 속성 (torch.Tensor) 회전된 상자를 이미지 크기에 따라 정규화된 xyxyxyxy 형식으로 반환합니다.

자세한 내용은 OBB 클래스 문서.

결과 플로팅

그리고 plot() 메서드의 Results 개체를 사용하면 감지된 개체(예: 바운딩 박스, 마스크, 키포인트, 확률)를 원본 이미지에 오버레이하여 예측을 쉽게 시각화할 수 있습니다. 이 메서드는 주석이 달린 이미지를 NumPy 배열로 반환하므로 쉽게 표시하거나 저장할 수 있습니다.

플로팅

from PIL import Image
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on 'bus.jpg'
results = model(['bus.jpg', 'zidane.jpg'])  # results list

# Visualize the results
for i, r in enumerate(results):
    # Plot results image
    im_bgr = r.plot()  # BGR-order numpy array
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB-order PIL image

    # Show results to screen (in supported environments)
    r.show()

    # Save results to disk
    r.save(filename=f'results{i}.jpg')

plot() 메서드 매개변수

그리고 plot() 메서드는 다양한 인수를 지원하여 출력을 사용자 정의할 수 있습니다:

인수 유형 설명 기본값
conf bool 탐지 신뢰도 점수를 포함하세요. True
line_width float 경계 상자의 선 너비입니다. 다음과 같은 경우 이미지 크기에 따라 조정됩니다. None. None
font_size float 텍스트 글꼴 크기. 다음과 같은 경우 이미지 크기에 따라 조정됩니다. None. None
font str 텍스트 주석의 글꼴 이름입니다. 'Arial.ttf'
pil bool 이미지를 PIL 이미지 객체로 반환합니다. False
img numpy.ndarray 플로팅을 위한 대체 이미지. 다음과 같은 경우 원본 이미지를 사용합니다. None. None
im_gpu torch.Tensor 더 빠른 마스크 플로팅을 위한 GPU 가속 이미지. 모양: (1, 3, 640, 640). None
kpt_radius int 그려진 키포인트의 반경입니다. 5
kpt_line bool 키포인트를 선으로 연결합니다. True
labels bool 주석에 클래스 레이블을 포함합니다. True
boxes bool 이미지에 경계 상자를 오버레이합니다. True
masks bool 이미지에 마스크를 오버레이합니다. True
probs bool 분류 확률을 포함합니다. True
show bool 기본 이미지 뷰어를 사용하여 주석이 달린 이미지를 바로 표시합니다. False
save bool 주석이 달린 이미지를 다음에서 지정한 파일에 저장합니다. filename. False
filename str 주석이 달린 이미지를 저장할 파일의 경로 및 이름(다음과 같은 경우) saveTrue. None

스레드 안전 추론

여러 개의 YOLO 모델을 여러 스레드에서 병렬로 실행하는 경우 추론 중 스레드 안전성을 보장하는 것이 중요합니다. 스레드 안전 추론은 각 스레드의 예측이 격리되고 서로 간섭하지 않도록 보장하여 경쟁 조건을 피하고 일관되고 신뢰할 수 있는 출력을 보장합니다.

멀티 스레드 애플리케이션에서 YOLO 모델을 사용하는 경우 각 스레드에 대해 별도의 모델 객체를 인스턴스화하거나 스레드 로컬 저장소를 사용하여 충돌을 방지하는 것이 중요합니다:

스레드 안전 추론

스레드 안전 추론을 위해 각 스레드 내부에 단일 모델을 인스턴스화합니다:

from ultralytics import YOLO
from threading import Thread

def thread_safe_predict(image_path):
    """Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
    local_model = YOLO("yolov8n.pt")
    results = local_model.predict(image_path)
    # Process results


# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()

YOLO 모델을 사용한 스레드 안전 추론에 대한 자세한 내용과 단계별 지침은 YOLO 스레드 안전 추론 가이드를 참조하세요. 이 가이드는 일반적인 함정을 피하고 멀티스레드 추론이 원활하게 실행되도록 하는 데 필요한 모든 정보를 제공합니다.

스트리밍 소스 for-loop

다음은 OpenCV를 사용하는 Python 스크립트입니다(cv2) 및 YOLOv8 를 사용하여 비디오 프레임에 대한 추론을 실행합니다. 이 스크립트는 필요한 패키지를 이미 설치했다고 가정합니다(opencv-python 그리고 ultralytics).

포-루프 스트리밍

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

이 스크립트는 동영상의 각 프레임에 대해 예측을 실행하고 결과를 시각화하여 창에 표시합니다. 'Q'를 눌러 루프를 종료할 수 있습니다.



생성 2023-11-12, 업데이트 2024-05-03
저자: glenn-jocher (18), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)

댓글