YOLO Vision 2026:

YOLOE: 실시간 오픈 어휘 감지 및 세분화#

Ultralytics YOLOE(Real-Time Seeing Anything)는 오픈 어휘(open-vocabulary) 감지 및 인스턴스 세분화(instance segmentation) 모델입니다. 학습 시점에 고정된 클래스 리스트 대신, 추론 시점에 텍스트 프롬프트, 시각적 예제, 또는 내장된 4,585개 이름의 어휘를 통해 원하는 카테고리를 입력받습니다. Ultralytics YOLO 아키텍처인 YOLOv8, YOLO11, YOLO26을 기반으로 구축되고 YOLO-World에서 영감을 받은 YOLOE는 닫힌 집합(closed-set) YOLO 속도에 가까운 속도로 최첨단 제로샷(zero-shot) 정확도를 달성합니다.



Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀

빠른 시작#

원하는 클래스 이름을 지정하고 실행하세요. YOLOE-26은 한 번도 학습되지 않은 카테고리에 대해서도 박스와 인스턴스 세분화(instance segmentation) 마스크를 반환합니다.

이름을 지정할 수 있는 모든 것을 감지하세요
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")

# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])

results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()

첫 번째 set_classes() 호출은 텍스트 인코더를 다운로드합니다. 네트워크 액세스가 없는 기기에 배포하기 전에 설치 및 요구 사항(Installation and Requirements)을 참조하십시오.

프롬프트 모드 선택하기#

YOLOE는 세 가지 프롬프트 모드를 지원하며, 선택에 따라 로드하는 체크포인트와 클래스 레이블이 결정됩니다. 추론 시점에 제공할 수 있는 항목과 일치하는 행을 선택하십시오.

텍스트 프롬프트, 시각적 프롬프트, 프롬프트가 필요 없는 어휘를 사용하여 객체를 감지하고 세분화하는 YOLOE

모드체크포인트제공하는 항목결과의 클래스 이름사용 시기
텍스트 프롬프트*-seg.pt문자열 형태의 클래스 이름전달한 이름과 정확히 일치대상 목표를 말로 설명할 수 있는 경우(가장 일반적인 선택)
시각적 프롬프트*-seg.pt참조 이미지의 예제 박스일반적인 object0, object1대상 목표를 말로 표현하기 어려운 경우(특정 부품, 로고 또는 결함)
프롬프트 없음*-seg-pf.pt없음내장된 4,585개 이름의 어휘에서 가져온 이름분류 또는 탐색 중이며 사전에 무엇을 찾아야 할지 모르는 경우
자주 발생하는 두 가지 의외의 상황
  • 시각적 프롬프트에는 레이블이 포함되지 않습니다. visual_prompts의 클래스 ID는 예제들을 그룹화하며, 모델은 이를 object0, object1 등으로 보고합니다. 사용자가 직접 이들을 자신의 이름으로 매핑해야 합니다.
  • 프롬프트가 필요 없는 체크포인트는 set_classes()을 거부합니다. *-seg-pf.pt 모델에서 이를 호출하면 AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.가 발생합니다. 사용자 지정 클래스가 필요한 경우 대신 *-seg.pt 체크포인트를 로드하십시오.

설치 및 요구 사항#

YOLOE는 기본 Ultralytics 패키지에 포함되어 제공됩니다.

pip install -U ultralytics

텍스트 프롬프팅에는 추가로 텍스트 인코더가 필요하며, 설치 시점이 아니라 최초 사용 시에 가져옵니다.

  • 첫 번째 set_classes() 호출은 pip와 함께 GitHub에서 ultralytics/CLIP을 설치하고(토크나이저 제공) TorchScript 텍스트 인코더를 현재 작업 디렉토리에 다운로드합니다. YOLOE-26은 약 254MB인 mobileclip2_b.ts을 가져오고, YOLOE-11 및 YOLOE-v8은 mobileclip_blt.ts를 가져옵니다. 실행할 디렉토리에서 다운로드를 한 번 수행하거나 해당 디렉토리에 파일을 복사하십시오. 그렇지 않으면 다시 가져오게 됩니다.
  • 두 단계 모두 네트워크 액세스가 필요하므로, 오프라인 또는 에어갭(air-gapped) 기기에 배포하기 전에 프롬프트가 포함된 예측을 한 번 실행하십시오.
  • 시각적 프롬프트와 프롬프트가 필요 없는 체크포인트는 텍스트 인코더가 전혀 필요하지 않습니다.

YOLOE-26 체크포인트에는 ultralytics 8.4.0 이상이 필요하며, YOLOE-11 및 YOLOE-v8 패밀리는 이전 릴리스에서도 사용할 수 있습니다. 텍스트 프롬프트가 지정된 예측 하나가 체크포인트 다운로드, CLIP 설치, 텍스트 인코더, 추론을 포함한 전체 경로를 실행합니다.

yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"

추론 시 텍스트 인코더 다운로드를 완전히 건너뛰려면 프롬프트를 가중치에 한 번에 구워 넣고 재사용하십시오. 프롬프트 임베딩 재사용(Reuse prompt embeddings)을 참조하십시오.

아키텍처 개요#

YOLOE Architecture

YOLOE는 표준 YOLO 구조(특징 추출을 위한 컨볼루션 백본, 멀티 스케일 융합을 위한 , 클래스와 박스를 예측하는 앵커 프리, 디커플드 헤드)를 유지하면서 프롬프트 모드당 하나씩 세 개의 모듈을 추가합니다.

  • **RepRTA(Re-parameterizable Region-Text Alignment)**는 작은 보조 네트워크를 통해 CLIP의 텍스트 임베딩(embeddings)을 정제합니다. 이 네트워크는 set_classes() 호출당 한 번 실행되며 내보내기 시 접혀서 사라지므로 프레임당 비용이 들지 않습니다. 모든 순방향 패스에서 실제로 실행되는 것은 저장된 프롬프트 임베딩과 영역 특징 간의 비교입니다. 대규모 프롬프트 세트에서 이로 인해 발생하는 비용에 대해서는 제한 사항(Limitations)을 참조하십시오.
  • **SAVPE(Semantic-Activated Visual Prompt Encoder)**는 예제 박스에서 의미론적(semantic) 및 활성화 특징을 인코딩하여 이와 유사해 보이는 객체에 모델이 조건화되도록 합니다. 이는 로고나 특정 부품과 같이 이름을 지정하기 어려운 대상에 대한 원샷(one-shot) 경로입니다.
  • **LRPC(Lazy Region-Prompt Contrast)**는 영역 임베딩을 내장된 4,585개 이름의 어휘와 비교하므로, 프롬프트가 없는 체크포인트도 외부 프롬프트나 텍스트 인코더 없이 객체를 인식합니다.

인스턴스 세분화(Instance segmentation)은 YOLOv8-Seg에서와 같이 감지 헤드의 마스크 브랜치에서 제공되며, 모든 예측에는 results[0].masks에 마스크가 포함됩니다. 모델이 내보내기(exported)되면 오픈 월드 모듈이 표준 YOLO 헤드로 재매개변수화(re-parameterized)되므로, 내보낸 파일은 일반적인 감지/세분화 경로를 실행합니다.

사용 가능한 모델#

아래의 모든 체크포인트는 인스턴스 세분화(instance segmentation) 모델이며 val, predict, export, track을 지원합니다. 텍스트 또는 시각적 프롬프트용 *-seg.pt 파일을 로드하고, 프롬프트가 필요 없는 추론용 *-seg-pf.pt 파일을 로드하십시오. 이 둘은 상호 교환할 수 없습니다. 프롬프트 모드 선택하기(Choosing a Prompting Mode)를 참조하십시오. 오직 *-seg.pt 파일만 train을 지원합니다. 프롬프트가 없는 체크포인트는 학습된 텍스트 프롬프트 모델에서 생성됩니다. 처음부터 공식 모델 학습하기(Training the Official Models from Scratch)를 참조하십시오.

LVIS에서의 YOLOE 성능#

Ultralytics YOLO26 논문에서 발췌한 640픽셀에서의 LVIS minival 제로샷 결과입니다.

텍스트 및 시각적 프롬프트#

각 정확도 및 파라미터 셀은 텍스트 프롬프트 / 시각적 프롬프트를 나타내며, FLOPs는 한 번만 제공됩니다. 파라미터와 FLOPs는 논문이 평가하는 감지 구성에 대한 것입니다. 정확도는 비교 대상의 모든 모델에 대해 논문이 보고하는 유일한 프로토콜인 Non-E2E 수치입니다. YOLOE-26 엔드투엔드(end-to-end) 헤드는 텍스트 프롬프트에서 최대 1.1 AP, 시각적 프롬프트에서 최대 2.6 AP 차이로 이보다 뒤처집니다.

모델mAP50-95mAPrmAPcmAPf파라미터
(M)
FLOPs
(B)
YOLOE-26n24.7 / 21.920.5 / 17.624.1 / 22.326.1 / 22.43.9 / 3.16.1
YOLOE-26s30.8 / 28.623.9 / 25.129.6 / 27.833.0 / 29.910.7 / 11.021.9
YOLOE-26m35.4 / 33.931.1 / 33.434.7 / 34.036.9 / 33.821.3 / 25.170.6
YOLOE-26l37.8 / 36.335.1 / 37.637.6 / 36.238.5 / 36.125.5 / 29.389.0
YOLOE-26x40.6 / 38.537.4 / 35.340.9 / 38.841.0 / 38.855.2 / 65.2197.7
YOLOE-11s27.5 / 26.321.4 / 22.526.8 / 27.129.3 / 26.410.7 / 10.922.7
YOLOE-11m33.0 / 31.426.9 / 27.132.5 / 31.934.5 / 31.721.0 / 24.870.4
YOLOE-11l35.2 / 33.729.1 / 28.135.0 / 34.636.5 / 33.826.0 / 29.889.5
YOLOE-v8s27.9 / 26.222.3 / 21.327.8 / 27.729.0 / 25.712.3 / 12.629.8
YOLOE-v8m32.6 / 31.026.9 / 27.031.9 / 31.734.4 / 31.126.4 / 28.480.7
YOLOE-v8l35.9 / 34.233.2 / 33.234.8 / 34.637.3 / 34.143.5 / 47.3167.6

프롬프트 프리#

프롬프트가 필요 없는 체크포인트는 프롬프트 없이 내장된 어휘에서 응답합니다. 각 정확도 셀은 논문이 YOLOE-26을 평가하는 두 가지 프로토콜인 엔드투엔드 / Non-E2E를 나타내며, YOLO26 페이지에서는 Non-E2E 열을 인용합니다.

모델mAP50-95mAPrmAPcmAPf파라미터
(M)
FLOPs
(B)
YOLOE-26n-pf16.6 / 17.715.7 / 15.815.3 / 16.417.9 / 19.22.35.3
YOLOE-26s-pf21.4 / 22.616.2 / 20.220.1 / 20.923.5 / 24.59.020.8
YOLOE-26m-pf25.7 / 26.426.7 / 24.524.0 / 25.026.9 / 27.919.468.4
YOLOE-26l-pf27.2 / 28.026.3 / 25.725.7 / 26.828.7 / 29.523.686.8
YOLOE-26x-pf29.9 / 31.127.5 / 28.929.1 / 30.731.1 / 31.753.1194.4

텍스트 및 시각적 프롬프트 하에서 YOLOE-26 모델은 mAP50-95의 모든 일치하는 스케일에서 YOLOE-11 및 YOLOE-v8 대응 모델들을 앞서며, 파라미터와 FLOPs 면에서는 v8 라인 아래를 유지합니다. 동일한 분할에서 논문은 YOLO-Worldv2를 각각 24.4(S), 32.4(M), 35.5(L)로 보고하며, 트랜스포머 기반 감지기인 GLIP-T는 26.0, GDINO-T는 27.4, DetCLIP-T는 34.4로 보고합니다. 각 모델은 1억 5,500만~2억 3,200만의 파라미터를 가지고 있습니다. 원본 YOLOE 논문은 자사에서 도입한 v8 스케일 모델에 대한 두 가지 결과를 추가합니다. LVIS에서 YOLOE-v8s는 3분의 1의 학습 비용과 1.4배의 추론 속도로 YOLO-Worldv2-S를 3.5 AP 차이로 능가합니다. COCO로 전이될 때, YOLOE-v8l은 거의 4배 적은 학습 시간으로 닫힌 집합 YOLOv8-L에 비해 0.6 박스 AP0.4 마스크 AP를 추가로 얻습니다.

논문 수치 대 출시된 체크포인트

YOLO26 논문은 감지 구성을 평가합니다. 출시된 가중치는 세분화 체크포인트이며 마스크 브랜치, SAVPE 및 상단의 텍스트 투영을 포함하므로, 로드된 yoloe-26l-seg.pt은 위의 2,550만 및 89.0 B가 아니라 3,540만 및 142.0 B를 보고합니다. 두 경우 모두 FLOPs 수치에는 영역-텍스트 유사도가 제외되어 있으므로, 열이 움직이지 않더라도 실제 비용은 프롬프트 세트의 크기에 따라 증가합니다. 제한 사항(Limitations)을 참조하십시오.

사용 예제#

아래의 모든 YOLOE 예제는 Python API에서 실행됩니다. 텍스트 프롬프트 예측, 검증, 내보내기, 추적 및 일반 학습은 CLI에서도 작동합니다. 미세 조정 레시피와 시각적 프롬프트는 인자로 트레이너 또는 예측기 클래스를 전달하며, 이는 Python API에서만 수용합니다.

훈련 사용법#

출시된 모든 *-seg.pt 체크포인트를 사용자 자신의 YOLO 데이터셋으로 미세 조정하십시오. 이는 주로 표준 YOLO 학습 절차를 따르며, 차이점은 전달하는 트레이너입니다. YOLOEPESegTrainer는 사용자의 클래스 이름을 헤드에 융합하고 거기서부터 미세 조정합니다. 이는 사용자 자신의 레이블에서 원하는 방식이며, 기본 트레이너는 사용자 클래스 이름에 맞춰 학습하지 않습니다.



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
예시
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-26s-seg.pt")

results = model.train(
    data="coco128-seg.yaml",
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: the fine-tuning trainer, not the default
)
대신 감지 모델 학습하기

출시된 모든 체크포인트는 세분화 모델입니다. 감지기를 학습하려면 일치하는 YAML에서 모델을 빌드하고, 동일한 스케일의 세분화 가중치를 로드한 다음, 감지 트레이너로 교체하십시오. 그 외의 모든 것은 동일합니다.

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer

model = YOLOE("yoloe-26s.yaml").load("yoloe-26s-seg.pt")

results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)

Predict 사용법#

텍스트 프롬프트 호출은 빠른 시작(Quick Start)에 표시된 것과 같습니다. 나머지 두 모드에는 각각 추가 인자가 필요합니다.

예시

시각적 프롬프트는 모델에 목표를 설명하는 대신 예제를 보여줍니다. visual_prompts은 예제 박스의 bboxes 배열과 박스당 하나씩 클래스 ID의 cls 배열을 취합니다. ID는 레이블이 아니라 임시 그룹화이며, 0부터 순차적이어야 합니다. 결과는 사용자가 선택한 이름 대신 object0, object1 등으로 반환됩니다.

예제 박스는 예측을 수행하는 이미지 위에 위치할 수 있습니다.

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

# One example box per target, each with its own class ID
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # person, glasses
    "cls": np.array([0, 1]),
}

results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

또는 refer_image으로 전달된 별도의 참조 이미지 위에 위치할 수 있으며, 이 경우 bboxescls는 타겟이 아니라 해당 참조 내의 객체를 설명합니다.

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])}  # person

results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image
    refer_image="ultralytics/assets/bus.jpg",  # Where the example boxes live
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # And the export keeps them
참고

source이 비디오나 스트림인 경우, 첫 번째 프레임이 자동으로 refer_image이 되므로 전달하는 프롬프트가 해당 프레임에 적용되고 비디오의 나머지 부분으로 전달됩니다. 다른 프레임을 선택하려면 refer_image를 명시적으로 전달하십시오.

sourcerefer_image 모두 torch 텐서를 직접 수용하므로 이미지가 기존 파이프라인에서 이미 제공되는 경우 유용합니다. 텐서 자체의 픽셀 좌표로 박스를 제공하십시오.

import numpy as np
import torch

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-11l-seg.pt")

img_tensor = torch.rand(1, 3, 480, 480)  # (1, 3, H, W) float tensor in [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}

results = model.predict(
    img_tensor,
    refer_image=img_tensor,
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
    imgsz=640,
)

여러 이미지에서 한 번에 예측하려면 프롬프트를 한 단계 더 깊게 중첩하십시오. 소스 이미지당 하나의 bboxes 배열과 하나의 cls 배열을 소스와 동일한 순서로 전달합니다.

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {
    "bboxes": [
        np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # bus.jpg: person, glasses
        np.array([[150, 200, 1150, 700]]),  # zidane.jpg: person
    ],
    "cls": [np.array([0, 1]), np.array([0])],
}

results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Val 사용법#

검증은 세분화 데이터셋에서 다른 모델과 마찬가지로 실행됩니다.

예시
from ultralytics import YOLOE

model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for other sizes

metrics = model.val(data="coco128-seg.yaml")

동일한 호출의 두 가지 변형으로 다른 프롬프트 모드를 처리할 수 있습니다.

  • 시각적 프롬프트model.val(data="coco128-seg.yaml", load_vp=True)은 데이터셋 자체에서 카테고리당 시각적 임베딩을 추출합니다. 정확히 동일한 카테고리를 포함해야 하는 다른 데이터셋에서 임베딩을 가져오려면 refer_data="coco.yaml"을 추가하십시오.
  • 프롬프트 없음*-seg-pf.pt 체크포인트를 로드하고 single_cls=True을 전달합니다.

내보내기(Export) 사용법#

프롬프트 임베딩을 한 번 저장하고 ONNX, OpenVINO, TensorRT, CoreML, LiteRT, RKNN과 같은 정적 내보내기를 생성할 때 재사용할 수 있습니다. NPZ 프로필은 내보내기 전에 원래 PyTorch 모델에 의해 로드되며, 추가 런타임 입력이 아니며 내보낸 모델에는 NPZ 파일이 필요하지 않습니다.

내보낸 모델은 정적입니다

set_classes()으로(또는 시각적 프롬프트의 경우 refer_image을 통해) 구성된 클래스는 내보낸 가중치에 구워집니다. 일단 내보내면 모델은 더 이상 새로운 프롬프트를 수용할 수 없습니다. 로드된 내보내기에서 set_classes()를 호출하거나 predict()visual_prompts=...을 전달하면 실패합니다. 감지된 클래스를 변경하려면 새 프롬프트가 구성된 원래 .pt 체크포인트에서 다시 내보내십시오. 내보낸 파일은 표준 YOLO 모델처럼 작동하며 YOLOE() 대신 YOLO()으로 로드할 수도 있습니다.

프롬프트 임베딩 재사용
from ultralytics import YOLOE

model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")

# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")

동일한 프롬프트 프로필을 사용하여 일치하는 YOLOE 아키텍처로 빌드된 디텍션 전용 모델을 구성할 수도 있습니다. 이렇게 하면 프롬프트된 클래스를 유지하면서 마스크 브랜치가 제거됩니다:

from ultralytics import YOLOE

model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)

Track 사용법#

프롬프트된 클래스는 추적(tracking)으로 곧바로 이어지므로, 트래커가 한 번도 학습한 적 없는 객체를 추적할 수 있습니다.

예시
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])

# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
    print(result.boxes.id)

YOLOE 비교#

YOLOE는 닫힌 집합 감지기와 대형 오픈 어휘 모델 사이에 위치합니다. 올바른 선택인지 여부는 다음 세 가지 비교를 통해 결정됩니다.

  • 닫힌 집합 YOLO와의 비교. 프롬프트가 설정되면 YOLOE는 일반적인 감지/세분화 경로를 통해 예측하고 다른 모델처럼 내보냅니다. 추가되는 점은 재학습하는 대신 추론 시점에 클래스 리스트를 변경할 수 있는 기능이며, 비용은 사용자 자신의 클래스로 학습된 모델에 비해 턱없이 부족한 제로샷 정확도입니다.
  • 이전 YOLOE 패밀리들과의 비교. YOLOE-26은 YOLO26의 NMS 없는 엔드투엔드 헤드를 계승하고 이전의 3개 스케일(s/m/l)에 비해 5개 스케일(n/s/m/l/x)을 다루며, 성능(Performance)의 모든 일치하는 스케일에서 앞섭니다.
  • 트랜스포머 기반 오픈 어휘 감지기와의 비교. GLIP과 OWL-ViT는 추론 시 비전-언어 트랜스포머를 실행합니다. YOLOE는 프롬프트를 한 번 인코딩한 다음 컨볼루션 헤드 내부의 영역 특징과 비교합니다.

가장 가까운 대안들은 모두 텍스트 프롬프트를 취하지만, 오직 YOLOE와 SAM 3만 마스크를 반환하며, 이 세 가지는 서로 다른 질문에 답합니다.

YOLOESAM 3YOLO-World
용도명명된 클래스의 실시간 감지 및 세분화개념 세분화 및 프롬프트 기반 추적실시간 개방형 어휘(open-vocabulary) 탐지
Masks네, *-seg.pt 체크포인트를 사용합니다.아니요, 바디만 해당합니다.
시각적 프롬프트예 (SAVPE)아니요
프롬프트 프리 모드예, 4,585개의 이름으로 구성된 어휘아니요아니요
다음 상황에서 선택하세요처리량이 필요하고 클래스 이름을 지정할 수 있는 경우가장 강력한 개념 분할이 필요하고 연산 리소스를 사용할 수 있는 경우이미 해당 버전을 사용 중인 경우 — 아래의 마이그레이션 노트를 참조하세요.

YOLO-World에서 전환하시나요? API 구조는 동일합니다. YOLOWorldYOLOE로 교체하고, *-seg.pt 체크포인트를 로드한 후 set_classes() 호출을 그대로 유지하세요. 마스크와 시각적 프롬프트 기능이 추가되며, 고정된 클래스에 대한 내보내기 노트가 두 경우 모두 적용됩니다.

사용 사례 및 애플리케이션#

개방형 어휘 탐지는 클래스별 재학습 단계를 제거하며, 타겟 목록을 사전에 알 수 없는 경우에 가장 유용합니다:

  • 개방형 환경 탐지 — 훈련 시점에 열거되지 않은 객체를 마주하는 로보틱스보안 시스템.
  • 단일 예제를 통한 원샷(one-shot) 탐지 — 단일 참조 박스에서 특정 부품, 로고 또는 결함을 찾아내며, 산업용 검사에 유용합니다.
  • 롱테일 카탈로그화 — 기본 제공되는 4,585개의 이름 어휘는 생물다양성 모니터링이나 소매 재고 조사에 충분히 광범위합니다.
  • 데이터셋 부트스트래핑 — 사람이 검토하기 전에 박스와 마스크로 이미지를 사전 라벨링한 후, 그 결과로 빠른 폐쇄형(closed-set) 모델을 학습합니다.
  • 임의 타겟 분할 — 배포된 *-seg.pt 체크포인트는 모든 예측과 함께 마스크를 반환하므로, 의료 영상위성 분석에서 두 번째 모델 없이 픽셀 단위로 정밀한 출력을 얻을 수 있습니다.

일반적인 패턴은 두 가지 모드를 결합합니다: 프롬프트 프리 모드를 한 번 실행하여 무엇이 있는지 파악한 다음, 중요한 카테고리에 대해 텍스트 프롬프트로 전환합니다.

한계점#

YOLOE는 추론 시점에 클래스를 변경할 수 있는 기능을 얻는 대신 정확도를 희생합니다. 확정하기 전에 알아두어야 할 결과는 다음과 같습니다:

  • 제로샷 정확도는 클래스별로 학습된 모델보다 훨씬 낮습니다. 프롬프트가 적용된 체크포인트는 LVIS minival에서 대략 22-40 mAP 대역에 위치하며, 자체 데이터로 학습된 폐쇄형 YOLO가 해당 클래스에서 더 뛰어난 성능을 보입니다. 학습을 대체하기 위한 용도가 아니라 학습할 수 없는 클래스를 커버하기 위해 YOLOE를 선택하세요.
  • 희귀 카테고리는 취약점입니다. 성능의 mAPr 열은 LVIS의 희귀 클래스에 대한 정확도를 구체적으로 보고하며, 텍스트 프롬프트를 사용할 때 모든 행에서 common 및 frequent 열보다 낮습니다. 타겟이 특이한 경우 헤드라인 mAP 대신 이를 확인하세요.
  • 프롬프트는 관계가 아닌 외형을 설명합니다. 탐지는 영역 특징을 프롬프트 임베딩과 비교하여 작동하므로, 상태, 맥락 또는 비교에 의존하는 프롬프트(예: "손상된", "가장 왼쪽에 있는", "운반되는 중인")는 신뢰할 수 있는 매칭 기준이 없습니다. 일상적인 카테고리 이름에 가까운 표현을 선호하세요.
  • 대규모 프롬프트 세트는 지연 시간을 증가시킵니다. 프롬프트 임베딩은 한 번 계산되지만, 모든 순방향 패스에서 영역 특징과 비교됩니다. yoloe-26s-seg.pt을 사용하여 CPU에서 측정한 결과, 80개에서 1,203개 클래스로 늘어날 때 순방향 패스는 약 19% 증가하고 4,585개의 전체 어휘에서는 약 89% 증가합니다. 영역-텍스트 유사도는 카운트되지 않으므로 보고된 FLOPs는 전혀 변하지 않으며, 프로파일에서도 이를 경고하지 않습니다.
  • 클래스 이름은 프롬프트를 제공할 때까지 임시 자리표시자입니다. 새로 로드된 *-seg.pt 체크포인트는 숫자 이름("0", "1" 등)으로 nc=80을 보고하므로, 라벨을 읽기 전에 set_classes()를 호출하세요. 프롬프트 프리 체크포인트는 전체 어휘가 이미 채워진 상태로 제공됩니다.

배포 노트#

  • 하드웨어. 추론에는 4-8 GB VRAM을 갖춘 NVIDIA GPU가 필요합니다. ns 스케일은 Jetson과 같은 엣지 GPU나 해상도가 낮아진 CPU에서 실행할 수 있습니다. 파인튜닝에는 단일 GPU가 필요합니다.
  • NMS는 기본적으로 클래스에 구애받지 않습니다(class-agnostic). YOLOE는 agnostic_nms=True으로 예측합니다. YOLOE-11 및 YOLOE-v8에서는 동일한 클래스 내에서뿐만 아니라 서로 다른 클래스 간의 점수가 낮은 겹치는 박스를 억제하여, 하나의 객체가 여러 카테고리에 매칭될 때 중복을 방지합니다. 엔드투엔드 YOLOE-26 모델은 IoU 억제를 전혀 적용하지 않으며, 여기서는 에너그스틱(agnostic) 모드가 하나의 앵커가 여러 클래스 라벨을 출력하도록 허용하는 대신 앵커당 단일 최적 클래스만 유지합니다. 재정의하려면 agnostic_nms=False을 전달하세요.
  • 배치 처리. 배치 추론이 직접 작동하며, 동일한 호출 내에서 이미지마다 시각적 프롬프트가 다를 수 있습니다.

처음부터 공식 모델 학습하기#

대부분의 독자에게는 이 과정이 필요하지 않습니다. 이 과정은 Objects365, GQA, Flickr30k를 기반으로 게시된 개방형 어휘 체크포인트를 재현하며(8× RTX 4090에서 약 140만 개의 학습 샘플), 위 학습 사용법에서 다루는 자체 데이터 파인튜닝과는 관련이 없습니다.

경고

YOLOETrainer을 상속하는 모든 트레이너는 기본 YOLOESegTrainer 및 아래의 모든 처음부터 시작하는 트레이너를 포함하여 compile=True을 거부합니다. compile=False(기본값)을 전달하세요. 위에서 사용된 두 개의 파인튜닝 트레이너(YOLOEPESegTrainerYOLOEPETrainer)에는 이러한 제한이 적용되지 않습니다.

학습에는 세그먼트 어노테이션이 필요합니다. 아래의 처리된 파일을 다운로드하거나, SAM 2.1 기반의 공식 팀이 제공하는 스크립트를 사용하여 직접 생성하세요. 검증에는 LVIS minival이 사용됩니다.

데이터셋유형샘플박스처리된 세그먼트 어노테이션
Objects365v1탐지609k9621kobjects365_train_segm.json
GQAGrounding621k3681kfinal_mixed_train_no_coco_segm.json
Flickr30k그라운딩(Grounding)149k641kfinal_flickr_separateGT_train_segm.json

텍스트 프롬프트 모델이 먼저 학습되며, 다른 두 가지 프롬프트 모드는 이를 기반으로 개선된 것입니다:

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "flickr/full_images/",
                "json_file": "flickr/annotations/final_flickr_separateGT_train_segm.json",
            },
            {
                "img_path": "mixed_grounding/gqa/images",
                "json_file": "mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            },
        ],
    },
    "val": {"yolo_data": ["lvis.yaml"]},
}

model = YOLOE("yoloe-26l-seg.yaml")
model.train(
    data=data,  # or the path to a YAML file holding the same structure
    batch=128,
    epochs=30,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegTrainerFromScratch,
    device="0,1,2,3,4,5,6,7",
)

시각적 프롬프트 및 프롬프트 프리 체크포인트는 해당 학습된 텍스트 프롬프트 모델에서 시작하여 각각 하나의 모듈을 업데이트합니다. YOLOESegVPTrainer은 시각적 프롬프트 레시피이고 YOLOEPEFreeTrainer은 프롬프트 프리 레시피이지만, 그 자체로 아무것도 고정(freeze)하지 않습니다. 선택적 학습은 함께 전달하는 freeze 목록에서 오며, 이 목록은 savpe(각각 모든 분류 타워)을 제외한 모든 헤드 차일을 지정합니다. 프롬프트 프리 실행에는 추가로 single_cls=True가 필요합니다. 업스트림 YOLOE 저장소에는 v8 스케일 모델을 위한 전체 레시피가 포함되어 있습니다.

완료된 프롬프트 프리 실행은 추론 시 프롬프트 없이 이름을 보고하는 체크포인트로 재파라미터화되며, get_vocabset_vocab를 사용합니다:

from ultralytics import YOLOE

# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt")  # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt")  # text-prompt run, its head is still unfused

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # never overwrite the released checkpoint

인용 및 감사의 글#

YOLOE가 귀하의 연구나 프로젝트에 기여했다면 **칭화대학교(Tsinghua University)**의 Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han, 및 Guiguang Ding의 원본 논문을 인용해 주십시오:

인용
@misc{wang2025yoloerealtimeseeing,
      title={YOLOE: Real-Time Seeing Anything},
      author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
      year={2025},
      eprint={2503.07465},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2503.07465},
}

추가 읽을거리를 위해 원본 YOLOE 논문은 arXiv에서 볼 수 있습니다. 프로젝트의 소스 코드와 추가 리소스는 GitHub 저장소를 통해 액세스할 수 있습니다.

FAQ#

  • Ultralytics YOLOE는 YOLO-World에 없는 두 가지 기능을 추가합니다: 클래스 이름 대신 예제 박스가 대체되는 시각적 프롬프트, 그리고 프롬프트 없이 기본 제공되는 4,585개의 이름 어휘로부터 응답하는 프롬프트 프리 체크포인트. 배포된 *-seg.pt 체크포인트의 모든 예측에는 인스턴스 세그멘테이션 마스크도 함께 포함됩니다. 정확도 측면에서, 원본 YOLOE 논문은 LVIS에서 YOLOE-v8s가 YOLO-Worldv2-S보다 3.5 AP 앞서며, 학습 비용은 3분의 1이고 추론 속도는 1.4배 빠르다고 명시합니다. 마이그레이션은 한 줄 변경으로 가능합니다 — YOLOE 비교 방법을 참조하세요.

  • Ultralytics YOLOE는 세 가지 프롬프트 모드를 지원합니다. 텍스트 프롬프트*-seg.pt 체크포인트에서 문자열 형태의 클래스 이름이며 일반적인 선택입니다. 시각적 프롬프트는 말로 표현하기 어려운 타겟을 위해 참조 이미지 상의 하나 이상의 예제 박스를 사용합니다. 프롬프트 프리 추론은 아무것도 제공되지 않은 상태에서 기본 제공되는 4,585개의 이름 어휘로 응답하는 별도의 *-seg-pf.pt 체크포인트를 사용합니다. 텍스트 및 시각적 프롬프트는 동일한 체크포인트를 공유하지만, 프롬프트 프리 파일은 다른 파일이며 set_classes()를 거부합니다. 전체 비교 내용은 프롬프트 모드 선택하기를 참조하세요.

  • yoloe-26s-seg.pt으로 시작하세요: YOLOE-26 패밀리는 모든 일치하는 스케일에서 YOLOE-11 및 YOLOE-v8보다 우수하며, s 스케일은 LVIS minival에서 30 mAP를 넘는 가장 작은 스케일입니다. 지연 시간보다 희귀 카테고리의 정확도가 더 중요한 경우 m, l, 또는 x로 업그레이드하세요. 성능의 mAPr 열이 비교할 지표입니다. 엣지 배포용으로만 n으로 낮추세요. 자체 클래스 이름 대신 기본 제공 어휘를 사용하려면 동일한 스케일의 *-seg-pf.pt 파일을 로드하세요.

  • object0object1 같은 레이블은 예측이 시각적 프롬프트에서 비롯되었음을 의미하며, 이는 사용자의 이름을 전달하는 대신 예제 박스를 임시 번호가 매겨진 클래스로 그룹화합니다. visual_prompts["cls"]에서 전달하는 클래스 ID는 해당 그룹화 역할만 수행합니다. 모델은 할당한 ID 순서에 따라 object0, object1 등으로 보고하므로, 결과에서 사용자 자신의 레이블로 다시 매핑해야 합니다. 출력에 사용자 이름을 표시하려면 대신 텍스트 프롬프트를 사용하세요.

  • 프롬프트 프리 체크포인트(*-seg-pf.pt)는 자체 내장 어휘를 통해 클래스를 해결하며 AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.로 외부 프롬프트를 거부합니다. 자체 클래스 목록이 필요한 경우 *-seg.pt 체크포인트를 로드하세요. 프롬프트 모드 선택하기를 참조하세요.

  • 첫 번째 텍스트 프롬프트는 Ultralytics YOLOE가 pip을 사용하여 GitHub에서 ultralytics/CLIP을 설치하고, 현재 작업 디렉토리에 TorchScript 텍스트 인코더를 다운로드하도록 만듭니다(YOLOE-26의 경우 약 254 MB). 모델 패밀리별 정확한 에셋은 설치 및 요구사항을 참조하세요. 시각적 프롬프트와 프롬프트 프리 체크포인트는 둘 다 필요하지 않습니다. 타겟 머신에서 다운로드를 방지하려면 프롬프트를 한 번 설정하고 save_prompt_embeddings()으로 저장하거나, 클래스가 이미 설정된 상태로 모델을 내보내세요.

  • 아니요 — YOLOE는 내보내기 시점에 프롬프트된 클래스를 가중에 고정(bake)하므로, 로드된 내보내기 모델은 set_classes()visual_prompts=을 모두 거부합니다. 새 프롬프트가 설정된 원래의 .pt 체크포인트에서 다시 내보내세요. 내보낸 파일은 표준 YOLO 모델처럼 동작하며 YOLO()뿐만 아니라 YOLOE()로도 로드할 수 있습니다.

  • 실시간 처리량이 필요하고 클래스 이름을 지정할 수 있는 경우 YOLOE를 사용하고, 속도보다 개념에 대한 세분화 품질이 더 중요한 경우 SAM 3을 사용하세요. 둘 다 시각적 예제를 허용하며, 프롬프트 프리 모드는 YOLOE에만 있습니다. 전체 비교는 YOLOE 비교 방법에 있습니다.

댓글