YOLOE: 실시간 객체 인식 및 탐지

소개

YOLOE 프롬프트 옵션

YOLOE (Real-Time Seeing Anything)는 제로샷(zero-shot) 및 프롬프트 기반 YOLO 모델의 새로운 발전으로, 오픈 어휘(open-vocabulary) 탐지 및 세그멘테이션을 위해 설계되었습니다. 고정된 카테고리에만 국한되었던 이전의 YOLO 모델들과 달리, YOLOE는 텍스트, 이미지 또는 내부 어휘 프롬프트를 사용하여 어떤 객체 클래스든 실시간으로 탐지할 수 있습니다. YOLOv10을 기반으로 구축되고 YOLO-World에서 영감을 받은 YOLOE는 속도와 정확도에 최소한의 영향만 미치면서 최첨단 제로샷 성능을 달성합니다.



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

이전의 YOLO 모델과 비교하여, YOLOE는 효율성과 정확성을 크게 향상시킵니다. LVIS 데이터셋에서 YOLO-Worldv2보다 +3.5 AP 향상되었으며, 학습 리소스를 3분의 1만 사용하고도 1.4배 더 빠른 추론 속도를 달성합니다. COCO 데이터셋에서 파인튜닝된 YOLOE-v8-large는 약 4배 적은 학습 시간으로 YOLOv8-L을 0.1 mAP만큼 능가합니다. 이는 YOLOE가 정확도, 효율성, 범용성 간의 뛰어난 균형을 갖추고 있음을 보여줍니다. 아래 섹션에서는 YOLOE의 아키텍처, 벤치마크 비교 및 Ultralytics 프레임워크와의 통합 방법을 살펴봅니다.

아키텍처 개요

YOLOE Architecture

YOLOE는 표준 YOLO 구조를 유지합니다. 특징 추출을 위한 컨볼루션 backbone(예: CSP-Darknet), 다중 스케일 융합을 위한 neck(예: PAN-FPN), 그리고 객체 여부, 클래스, 박스를 독립적으로 예측하는 anchor-free, decoupled 탐지 head(YOLOv8/YOLO11과 동일)로 구성됩니다. YOLOE는 오픈 어휘 탐지를 가능하게 하는 세 가지 새로운 모듈을 도입했습니다:

  • Re-parameterizable Region-Text Alignment (RepRTA): 작은 보조 네트워크를 통해 텍스트 embeddings(예: CLIP에서 추출)를 정제하여 텍스트 프롬프트 기반 탐지를 지원합니다. 추론 시, 이 네트워크는 메인 모델로 통합되어 오버헤드가 전혀 발생하지 않습니다. 따라서 YOLOE는 런타임 페널티 없이 임의의 텍스트 레이블이 지정된 객체(예: 학습되지 않은 "신호등")를 탐지합니다.

  • Semantic-Activated Visual Prompt Encoder (SAVPE): 경량 임베딩 브랜치를 통해 시각적 프롬프트 기반 탐지를 가능하게 합니다. 참조 이미지가 주어지면 SAVPE는 의미론적 및 활성화 특징을 인코딩하여 모델이 시각적으로 유사한 객체를 탐지하도록 조건화합니다. 이는 로고나 특정 부품 탐지에 유용한 원샷(one-shot) 탐지 기능입니다.

  • Lazy Region-Prompt Contrast (LRPC): **프롬프트 없는 모드(prompt-free mode)**에서 YOLOE는 대규모 어휘(LVIS 및 Objects365의 1200개 이상의 카테고리)로 학습된 내부 임베딩을 사용하여 오픈셋(open-set) 인식을 수행합니다. 외부 프롬프트나 인코더 없이도, YOLOE는 임베딩 유사성 조회를 통해 객체를 식별하며 추론 시 대규모 레이블 공간을 효율적으로 처리합니다.

또한, YOLOE는 탐지 헤드에 마스크 예측 브랜치를 확장(YOLACT 또는 YOLOv8-Seg와 유사)하여 실시간 인스턴스 세그멘테이션을 통합하며, 최소한의 오버헤드만 추가합니다.

결정적으로, YOLOE의 오픈월드 모듈은 일반적인 폐쇄셋(closed-set) YOLO로 사용할 때 추론 비용이 발생하지 않습니다. 학습 후, YOLOE 파라미터는 표준 YOLO 헤드로 재매개변수화(re-parameterize)될 수 있으며, 동일한 FLOPs와 속도(예: YOLO11와 정확히 일치)를 유지합니다.

사용 가능한 모델, 지원되는 작업 및 작동 모드

이 섹션에서는 모델의 특정 사전 학습 가중치, 지원 작업, 그리고 Inference, Validation, Training, Export와 같은 다양한 작동 모드와의 호환성을 자세히 설명합니다. 지원되는 모드는 ✅로, 지원되지 않는 모드는 ❌로 표시됩니다.

텍스트/시각적 프롬프트 모델

프롬프트 없는 모델

YOLOE-26 성능

YOLOE-26 모델의 자세한 성능 벤치마크는 YOLO26 문서를 참조하십시오.

사용 예시

YOLOE 모델은 Python 애플리케이션에 쉽게 통합할 수 있습니다. Ultralytics는 개발을 간소화하기 위해 사용자 친화적인 Python APICLI 명령어를 제공합니다.

학습(Train) 사용법

사용자 정의 데이터셋 파인튜닝

탐지 및 인스턴스 세그멘테이션 작업을 위해 사전 학습된 YOLOE 모델을 사용자 정의 YOLO 데이터셋에 파인튜닝할 수 있습니다.



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
예시

인스턴스 세그멘테이션

Fine-tuning a YOLOE pretrained checkpoint mostly follows the standard YOLO training procedure. The key difference is explicitly passing YOLOEPESegTrainer as the trainer parameter to model.train():

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

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

# Fine-tune on your segmentation dataset
results = model.train(
    data="coco128-seg.yaml",  # Segmentation dataset
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: use segmentation trainer
)

객체 탐지

All pretrained YOLOE models perform instance segmentation by default. To use these pretrained checkpoints for training a detection model, initialize a detection model from scratch using the YAML configuration, then load the pretrained segmentation checkpoint of the same scale. Note that we use YOLOEPETrainer instead of YOLOEPESegTrainer since we're training a detection model:

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

# Initialize a detection model from a config
model = YOLOE("yoloe-26s.yaml")

# Load weights from a pretrained segmentation checkpoint (same scale)
model.load("yoloe-26s-seg.pt")

# Fine-tune on your detection dataset
results = model.train(
    data="coco128.yaml",  # Detection dataset
    epochs=80,
    patience=10,
    trainer=YOLOEPETrainer,  # <- Important: use detection trainer
)

예측(Predict) 사용법

YOLOE는 텍스트 기반 및 시각적 프롬프트를 모두 지원합니다. 프롬프트 사용 방법은 간단합니다. 아래와 같이 predict 메서드를 통해 전달하기만 하면 됩니다:

예시

텍스트 프롬프트를 사용하면 텍스트 설명을 통해 탐지하려는 클래스를 지정할 수 있습니다. 다음 코드는 YOLOE를 사용하여 이미지에서 사람과 버스를 탐지하는 방법을 보여줍니다:

from ultralytics import YOLOE

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

# Set text prompt to detect person and bus. You only need to do this once after you load the model.
model.set_classes(["person", "bus"])

# Run detection on the given image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

검증(Val) 사용법

데이터셋에 대한 모델 검증은 다음과 같이 간소화되어 있습니다:

예시
from ultralytics import YOLOE

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

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml")

내보내기(Export) 사용법

내보내기 과정은 다른 YOLO 모델과 유사하며, 텍스트 및 시각적 프롬프트를 처리할 수 있는 유연성이 추가되었습니다:

내보낸 모델은 정적입니다

Classes configured with set_classes() (or via refer_image for visual prompts) are baked into the exported weights. Once exported, the model can no longer accept new prompts: calling set_classes() or passing visual_prompts=... to predict() on a loaded export will fail. To change the detected classes, re-export from the original .pt checkpoint with the new prompts configured. The exported file behaves like a standard YOLO detector and can also be loaded with YOLO() instead of YOLOE().

예시
from ultralytics import YOLOE

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

# Configure the set_classes() before exporting the model
model.set_classes(["person", "bus"])

export_model = model.export(format="onnx")
model = YOLOE(export_model)

# Run detection on the given image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

공식 모델 학습

데이터셋 준비

참고

Training official YOLOE models needs segment annotations for train data, here's the script provided by official team that converts datasets to segment annotations, powered by SAM2.1 models. Or you can directly download the provided Processed Segment Annotations in following table provided by official team.

  • 학습 데이터
데이터셋유형(Type)샘플Boxes원시 탐지 주석(Raw Detection Annotations)가공된 세그먼트 주석(Processed Segment Annotations)
Objects365v1Detection609k9621kobjects365_train.jsonobjects365_train_segm.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.jsonfinal_mixed_train_no_coco_segm.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.jsonfinal_flickr_separateGT_train_segm.json
  • 검증 데이터
데이터셋유형(Type)어노테이션 파일
LVIS minivalDetectionminival.txt

처음부터 학습 시작

참고

Visual Prompt 모델은 잘 학습된 Text Prompt 모델을 기반으로 파인튜닝됩니다.

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

# Option 1: Use Python dictionary
data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="flickr/full_images/",
                json_file="flickr/annotations/final_flickr_separateGT_train_segm.json",
            ),
            dict(
                img_path="mixed_grounding/gqa/images",
                json_file="mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)

# Option 2: Use YAML file (yoloe_data.yaml)
# 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 data="yoloe_data.yaml" if using YAML file
    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",
)

YOLOE 성능 비교

YOLOE는 속도나 모델 크기를 희생하지 않으면서도 COCO 및 LVIS와 같은 표준 벤치마크에서 폐쇄형(closed-set) YOLO 모델의 정확도와 대등하거나 그 이상의 성능을 발휘합니다. 아래 표는 YOLOE-L(YOLO11 기반)과 YOLOE26-L(YOLO26 기반)을 대응하는 폐쇄형 모델과 비교한 것입니다:

모델COCO mAP50-95LVIS mAP50-95추론 속도 (T4)파라미터GFLOPs (640px)
YOLOv8-L (폐쇄형)52.9%-9.06 ms (110 FPS)43.7 M165.2 B
YOLO11-L (폐쇄형)53.5%-6.2 ms (161 FPS)26.2 M86.9 B
YOLOE-L (개방형)52.6%35.2%6.2 ms (161 FPS)26.2 M86.9 B
YOLOE26-L (개방형)-36.8%6.2 ms (161 FPS)32.3 M88.3 B

YOLOE-L은 YOLO11-L의 아키텍처를 공유하며, YOLOE26-L은 YOLO26-L의 아키텍처를 공유하여 유사한 추론 속도와 GFLOPs를 제공합니다.

YOLOE26-L은 T4 GPU에서 640x640 이미지를 **6.2ms(161 FPS)**로 처리하며, 32.3M 파라미터88.3B FLOPs36.8% LVIS mAP를 달성합니다. 이는 YOLOE-L의 35.2% LVIS mAP보다 향상된 수치이면서도 동일한 추론 속도를 유지합니다. 특히 YOLOE의 개방형 모듈은 추론 비용이 발생하지 않으며, 이는 "no free lunch trade-off"(공짜 점심은 없다) 설계를 보여줍니다.

제로샷(zero-shot) 작업에서 YOLOE26은 기존의 개방형 검출기보다 뛰어난 성능을 보입니다. LVIS에서 YOLOE26-S는 29.9% mAP를 달성하여 YOLO-World-S를 +11.4 AP 앞섰으며, YOLOE26-L은 36.8% mAP를 달성하여 YOLO-World-L을 +10.0 AP 앞섰습니다. YOLOE26은 T4 GPU에서 161 FPS의 효율적인 추론 속도를 유지하여 실시간 개방형 응용 분야에 이상적입니다.

참고

벤치마크 조건: YOLOE 결과는 Objects365, GoldG, LVIS에서 사전 훈련된 모델을 COCO에서 파인튜닝하거나 평가한 것입니다. YOLOv8 대비 YOLOE의 약간의 mAP 우위는 광범위한 사전 훈련 덕분입니다. 이러한 개방형 훈련이 없을 경우, YOLOE는 비슷한 크기의 YOLO 모델과 대등한 성능을 보이며, 성능 저하 없이 SOTA 정확도와 개방형 환경에서의 유연성을 유지함을 확인합니다.

이전 모델과의 비교

YOLOE는 이전 YOLO 모델 및 개방형 검출기와 비교하여 다음과 같은 주목할 만한 발전을 이루었습니다:

  • YOLOE vs YOLOv5: YOLOv5는 속도와 정확도 간의 좋은 균형을 제공했으나 새로운 클래스를 위해 재학습이 필요했고 앵커 기반 헤드를 사용했습니다. 반면 YOLOE는 anchor-free 방식이며 동적으로 새로운 클래스를 검출합니다. YOLOv8의 개선 사항을 바탕으로 한 YOLOE는 YOLOv5보다 높은 정확도(COCO에서 52.6% vs 약 50% mAP)를 달성하며 YOLOv5와 달리 인스턴스 세그멘테이션을 통합합니다.

  • YOLOE vs YOLOv8: YOLOE는 YOLOv8의 재설계된 아키텍처를 확장하여 유사하거나 더 뛰어난 정확도(~26M 파라미터로 52.6% mAP vs YOLOv8-L의 ~44M 파라미터로 52.9% mAP)를 달성합니다. 더 강력한 사전 훈련 덕분에 훈련 시간을 크게 단축했습니다. 핵심적인 발전은 YOLOE의 **개방형 환경 지원(open-world capability)**으로, YOLOv8의 폐쇄형 설계와 달리 프롬프트를 통해 보지 못한 객체(예: "bird scooter" 또는 "peace symbol")를 검출할 수 있습니다.

  • YOLOE vs YOLO11: YOLO11은 향상된 효율성과 적은 파라미터 수(약 22% 감소)로 YOLOv8보다 개선되었습니다. YOLOE는 이러한 이점을 그대로 계승하여 YOLO11의 추론 속도 및 파라미터 수(약 26M 파라미터)와 일치하면서도 개방형 검출 및 세그멘테이션 기능을 추가했습니다. 폐쇄형 시나리오에서는 YOLOE가 YOLO11과 동일하지만, 결정적으로 보지 못한 클래스를 검출할 수 있는 적응력을 추가하여 속도 저하 없이 YOLO11 + 개방형 환경 지원을 구현했습니다.

  • YOLOE26 vs YOLOE (YOLO11 기반): YOLOE26은 YOLO26 아키텍처를 바탕으로 하며, 더 빠른 추론을 위해 NMS 없는 종단간(end-to-end) 설계를 계승했습니다. LVIS에서 YOLOE26-L은 36.8% mAP를 달성하여 YOLOE-L의 35.2% mAP보다 향상되었습니다. YOLOE26은 YOLOE의 3가지 모델 크기(S/M/L)와 비교하여 5가지 모델 크기(N/S/M/L/X)를 모두 제공하므로 다양한 배포 시나리오에 더욱 유연하게 대응할 수 있습니다.

  • YOLOE26 vs 이전 개방형 검출기: 초기 개방형 모델(GLIP, OWL-ViT, YOLO-World)은 비전-언어 트랜스포머에 크게 의존하여 추론이 느렸습니다. LVIS에서 YOLOE26-S는 29.9% mAP(YOLO-World-S 대비 +11.4 AP)를, YOLOE26-L은 36.8% mAP(YOLO-World-L 대비 +10.0 AP)를 달성하면서도 T4 GPU에서 161 FPS의 실시간 추론을 유지합니다. 트랜스포머 기반 접근 방식(예: GLIP)과 비교하여 YOLOE26은 훨씬 빠른 추론을 제공하며 개방형 검출의 정확도와 효율성 격차를 효과적으로 해소합니다.

요약하자면, YOLOE 및 YOLOE26은 YOLO의 명성 높은 속도와 효율성을 유지하면서도 이전 모델보다 정확도가 뛰어나고 세그멘테이션을 통합하며 강력한 개방형 검출 기능을 도입했습니다. YOLOE26은 YOLO26의 NMS 없는 종단간 추론으로 아키텍처를 더욱 발전시켜 실시간 개방형 응용 분야에 이상적입니다.

사용 사례 및 응용

YOLOE의 개방형 검출 및 세그멘테이션 기능은 기존의 고정 클래스 모델을 넘어 다양한 응용을 가능하게 합니다:

  • 개방형 객체 검출: 로봇 공학과 같이 로봇이 프롬프트를 사용하여 이전에 보지 못한 객체를 인식하거나, 보안 시스템이 재학습 없이 새로운 위협(예: 위험 물품)에 신속하게 적응해야 하는 동적 시나리오에 이상적입니다.

  • 퓨샷 및 원샷 검출: 시각적 프롬프트(SAVPE)를 사용하여 YOLOE는 단일 참조 이미지에서 새로운 객체를 신속하게 학습합니다. 이는 산업 검사(부품 또는 결함 즉시 식별)나 맞춤형 감시에 완벽하며 최소한의 설정으로 시각적 검색을 가능하게 합니다.

  • 대규모 어휘 및 롱테일 인식: 1000개 이상의 클래스 어휘를 갖춘 YOLOE는 생물 다양성 모니터링(희귀 종 검출), 박물관 컬렉션, 소매 재고 또는 이커머스와 같은 작업에서 탁월하며 광범위한 클래스별 훈련 없이 많은 클래스를 안정적으로 식별합니다.

  • 대화형 검출 및 세그멘테이션: YOLOE는 자연어(텍스트 또는 시각적 프롬프트) 기반의 검색 가능한 비디오/이미지 검색, 증강 현실(AR), 직관적인 이미지 편집과 같은 실시간 대화형 응용 프로그램을 지원합니다. 사용자는 세그멘테이션 마스크를 사용하여 객체를 동적으로 격리, 식별 또는 정확하게 편집할 수 있습니다.

  • 자동화된 데이터 라벨링 및 부트스트래핑: YOLOE는 초기 바운딩 박스 및 세그멘테이션 주석을 제공하여 데이터셋 구축을 신속하게 지원하며 인간의 라벨링 노력을 크게 줄여줍니다. 특히 대규모 미디어 컬렉션 분석에서 가치가 높으며, 현존하는 객체를 자동으로 식별하여 특화된 모델을 더 빠르게 구축하도록 돕습니다.

  • 모든 객체에 대한 세그멘테이션: 프롬프트를 통해 임의의 객체로 세그멘테이션 기능을 확장합니다. 특히 의료 영상, 현미경 검사 또는 위성 영상 분석에 유용하며 특수한 사전 훈련 모델 없이도 자동으로 구조를 식별하고 정밀하게 세그멘테이션합니다. SAM과 같은 모델과 달리, YOLOE는 객체를 자동으로 인식하고 동시에 세그멘테이션하여 콘텐츠 제작이나 장면 이해와 같은 작업에 도움을 줍니다.

이 모든 사용 사례에서 YOLOE의 핵심 장점은 범용성으로, 동적 시나리오 전반에서 검출, 인식, 세그멘테이션을 위한 통합 모델을 제공합니다. 그 효율성은 리소스가 제한된 장치에서도 실시간 성능을 보장하며, 로봇 공학, 자율 주행, 국방 등 다양한 분야에 이상적입니다.

필요에 따라 YOLOE 모드를 선택하십시오:

  • 폐쇄형 모드: 고정 클래스 작업용(최대 속도 및 정확도).
  • 프롬프트 모드: 텍스트나 시각적 프롬프트를 통해 새로운 객체를 빠르게 추가.
  • 프롬프트 없는 개방형 모드: 많은 카테고리에 걸친 일반적인 검출(카탈로그 및 검색에 이상적).

프롬프트 없는 검색 후 타겟 프롬프트를 사용하는 것과 같이 모드를 조합하면 YOLOE의 잠재력을 최대한 활용할 수 있는 경우가 많습니다.

훈련 및 추론

YOLOE는 다른 YOLO 모델(YOLOv8, YOLO-World)과 유사하게 Ultralytics Python APICLI와 원활하게 통합됩니다. 다음은 빠르게 시작하는 방법입니다:

YOLOE를 이용한 훈련 및 추론
from ultralytics import YOLO

# Load pretrained YOLOE model and train on custom data
model = YOLO("yoloe-26s-seg.pt")
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)

# Run inference using text prompts ("person", "bus")
model.set_classes(["person", "bus"])
results = model.predict(source="test_images/street.jpg")
results[0].save()  # save annotated output

여기서 YOLOE는 기본적으로 표준 검출기처럼 작동하지만 클래스(set_classes)를 지정하여 프롬프트 기반 검출로 쉽게 전환할 수 있습니다. 결과에는 바운딩 박스, 마스크 및 라벨이 포함됩니다.

기타 지원 작업

  • 검증: model.val() 또는 yolo val을 사용하여 정확도를 쉽게 평가하십시오.
  • 내보내기: YOLOE 모델을 ONNX, TensorRT 등으로 내보내어(model.export()) 배포를 용이하게 하십시오.
  • 추적: YOLOE는 통합 시 객체 추적(yolo track)을 지원하며, 비디오에서 프롬프트된 클래스를 추적하는 데 유용합니다.
참고

YOLOE는 추론 결과(results[0].masks)에 세그멘테이션 마스크를 자동으로 포함하므로 별도의 모델 없이도 객체 추출이나 측정과 같은 픽셀 정밀 작업이 간단해집니다.

시작하기

다음 단계에 따라 Ultralytics에서 YOLOE를 빠르게 설정하십시오:

  1. 설치: Ultralytics 패키지를 설치하거나 업데이트하십시오:

    pip install -U ultralytics
  2. YOLOE 가중치 다운로드: 사전 훈련된 YOLOE 모델(예: YOLOE-v8-S/L, YOLOE-11 변형)은 YOLOE GitHub 릴리스에서 구할 수 있습니다. 원하는 .pt 파일을 다운로드하여 Ultralytics YOLO 클래스에 로드하십시오.

  3. 하드웨어 요구 사항:

    • 추론: GPU 권장(NVIDIA, VRAM 4-8GB 이상). 소형 모델은 엣지 GPU(예: Jetson)나 저해상도 CPU에서도 효율적으로 실행됩니다. 소형 워크스테이션에서 고성능 추론을 하려면 NVIDIA DGX Spark 가이드를 확인하십시오.
    • 훈련: 사용자 정의 데이터로 YOLOE를 파인튜닝하려면 일반적으로 GPU 하나만 있으면 됩니다. 저자들이 사용한 광범위한 개방형 사전 훈련(LVIS/Objects365)은 상당한 컴퓨팅 자원(RTX 4090 GPU 8개)이 필요했습니다.
  4. 구성: YOLOE 구성은 표준 Ultralytics YAML 파일을 사용합니다. 기본 구성(예: yoloe-26s-seg.yaml)이면 충분하지만, 필요에 따라 백본, 클래스 또는 이미지 크기를 수정할 수 있습니다.

  5. YOLOE 실행:

    • 빠른 추론 (프롬프트 없음):

      yolo predict model=yoloe-26s-seg-pf.pt source="image.jpg"
    • 프롬프트 기반 검출 (텍스트 프롬프트 예시):

      from ultralytics import YOLO
      
      model = YOLO("yoloe-26s-seg.pt")
      model.set_classes(["bowl", "apple"])
      results = model.predict("kitchen.jpg")
      results[0].save()
  6. 통합 팁:

    • 클래스 이름: 기본 YOLOE 출력은 LVIS 카테고리를 사용합니다. set_classes()를 사용하여 자신의 라벨을 지정하십시오.
    • 속도: YOLOE는 프롬프트를 사용하지 않는 한 오버헤드가 없습니다. 텍스트 프롬프트는 영향이 최소이며 시각적 프롬프트는 약간의 영향이 있습니다.
    • NMS 동작: YOLOE는 예측 시 자동으로 agnostic_nms=True를 사용하여 클래스 간에 겹치는 박스를 병합합니다. 이는 YOLOE의 대규모 어휘(1200개 이상의 LVIS 클래스)에서 동일한 객체가 여러 카테고리와 일치할 때 중복 검출을 방지합니다. agnostic_nms=False를 명시적으로 전달하여 이를 재정의할 수 있습니다.
    • 배치 추론: 직접 지원됩니다(model.predict([img1, img2])). 이미지별 프롬프트의 경우 이미지를 개별적으로 실행하십시오.

Ultralytics 문서에서 추가 리소스를 제공합니다. YOLOE를 통해 익숙한 YOLO 생태계 내에서 강력한 개방형 기능을 쉽게 탐색할 수 있습니다.

전문가 팁: YOLOE의 제로샷 정확도를 극대화하려면 처음부터 훈련하기보다 제공된 체크포인트에서 파인튜닝하십시오. 일반적인 훈련 라벨(LVIS 카테고리 참조)과 일치하는 프롬프트 단어를 사용하여 검출 정확도를 향상시키십시오.

인용 및 감사의 글

YOLOE가 귀하의 연구나 프로젝트에 기여했다면, Tsinghua UniversityAo 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

YOLOE는 YOLO-World와 어떻게 다른가요?

YOLOE와 YOLO-World 모두 개방형 검출을 가능하게 하지만, YOLOE는 몇 가지 장점을 제공합니다. YOLOE는 YOLO-Worldv2보다 3배 적은 훈련 자원을 사용하고 1.4배 더 빠르게 실행되면서 LVIS에서 3.5 AP 더 높은 정확도를 달성합니다. YOLOE는 또한 3가지 프롬프팅 모드(텍스트, 시각, 내부 어휘)를 지원하는 반면, YOLO-World는 주로 텍스트 프롬프트에 중점을 둡니다. 추가로, YOLOE는 내장된 인스턴스 세그멘테이션 기능을 포함하여 오버헤드 없이 검출된 객체에 픽셀 단위의 정밀한 마스크를 제공합니다.

YOLOE를 일반 YOLO 모델로 사용할 수 있나요?

네, YOLOE는 성능 저하 없이 표준 YOLO 모델과 똑같이 작동할 수 있습니다. 폐쇄형 모드(프롬프트 없이)에서 사용할 때 YOLOE의 개방형 모듈은 표준 검출 헤드로 재파라미터화되어 동급의 YOLO11 모델과 동일한 속도 및 정확도를 냅니다. 이는 YOLOE를 매우 다재다능하게 만들어, 최대 속도를 위해 전통적인 검출기로 사용하다가 필요할 때만 개방형 모드로 전환할 수 있습니다.

YOLOE에서 어떤 유형의 프롬프트를 사용할 수 있나요?

YOLOE는 세 가지 유형의 프롬프트를 지원합니다:

  1. 텍스트 프롬프트: 자연어를 사용하여 객체 클래스 지정(예: "person", "traffic light", "bird scooter")
  2. 시각적 프롬프트: 검출하려는 객체의 참조 이미지 제공
  3. 내부 어휘: 외부 프롬프트 없이 YOLOE의 내장된 1200개 이상의 카테고리 어휘 사용

이러한 유연성 덕분에 모델을 재학습하지 않고도 다양한 시나리오에 YOLOE를 적용할 수 있으며, 이는 검출 요구 사항이 자주 변경되는 동적 환경에서 특히 유용합니다.

YOLOE는 인스턴스 세그멘테이션을 어떻게 처리하나요?

YOLOE는 검출 헤드를 마스크 예측 분기로 확장하여 인스턴스 세그멘테이션을 아키텍처에 직접 통합합니다. 이 방식은 YOLOv8-Seg와 유사하지만 프롬프트된 모든 객체 클래스에 작동합니다. 세그멘테이션 마스크는 추론 결과에 자동으로 포함되며 results[0].masks를 통해 액세스할 수 있습니다. 이러한 통합 접근 방식은 별도의 검출 및 세그멘테이션 모델이 필요하지 않게 하여 픽셀 단위의 정밀한 객체 경계가 필요한 응용 프로그램의 워크플로우를 간소화합니다.

YOLOE는 사용자 정의 프롬프트로 추론을 어떻게 처리하나요?

YOLO-World와 유사하게, YOLOE는 오프라인 어휘를 활용하여 효율성을 향상시키는 "prompt-then-detect" 전략을 지원합니다. 캡션이나 특정 객체 카테고리와 같은 사용자 정의 프롬프트는 사전에 인코딩되어 오프라인 어휘 임베딩으로 저장됩니다. 이 방식은 재학습 없이 검출 과정을 간소화합니다. 특정 검출 작업에 맞게 모델 내에서 이러한 프롬프트를 동적으로 설정할 수 있습니다:

from ultralytics import YOLO

# Initialize a YOLOE model
model = YOLO("yoloe-26s-seg.pt")

# Define custom classes
model.set_classes(["person", "bus"])

# Execute prediction on an image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

댓글