YOLO-World 모델#
YOLO-World 모델은 Open-Vocabulary Detection 작업을 위해 고급 실시간 Ultralytics YOLOv8 기반 접근 방식을 제공합니다. 이 혁신적인 방식은 설명 텍스트를 기반으로 이미지 내 모든 객체를 탐지할 수 있도록 합니다. 경쟁력 있는 성능을 유지하면서 계산 요구 사항을 크게 줄인 YOLO-World는 다양한 비전 기반 애플리케이션을 위한 다목적 도구로 자리 잡았습니다.
Watch: YOLO World training workflow on custom dataset

개요#
YOLO-World는 기존 Open-Vocabulary 탐지 모델이 직면한 문제를 해결합니다. 이러한 모델은 광범위한 계산 리소스를 요구하는 복잡한 Transformer 모델에 의존하는 경우가 많습니다. 또한 사전 정의된 객체 카테고리에 대한 의존성으로 인해 동적인 시나리오에서의 활용도도 제한됩니다. YOLO-World는 비전-언어 모델링과 대규모 데이터셋에 대한 사전 학습을 활용하여 YOLOv8 프레임워크에 Open-Vocabulary 탐지 기능을 강화하고, 제로샷 시나리오에서 광범위한 객체를 탁월한 효율성으로 식별합니다.
인스턴스 마스크, 시각적 프롬프트 또는 프롬프트 없는 모드도 필요한 Open-Vocabulary 작업에는 동일한 set_classes() API를 유지하는 YOLOE를 참조하십시오.
주요 기능#
-
실시간 솔루션: YOLO-World는 CNNs의 계산 속도를 활용하여 신속한 Open-Vocabulary 탐지 솔루션을 제공하며, 즉각적인 결과가 필요한 산업에 적합합니다.
-
효율성과 성능: YOLO-World는 성능 저하 없이 계산 및 리소스 요구 사항을 크게 줄여 SAM과 같은 모델에 대한 강력한 대안을 제공합니다. 또한 훨씬 낮은 계산 비용으로 실시간 애플리케이션을 지원합니다.
-
오프라인 어휘를 활용한 추론: YOLO-World는 효율성을 더욱 높이기 위해 오프라인 어휘를 사용하는 "프롬프트 후 탐지" 전략을 도입합니다. 이 접근 방식은 캡션이나 카테고리 등 사전에 계산된 사용자 지정 프롬프트를 오프라인 어휘 임베딩으로 인코딩하고 저장하여 탐지 프로세스를 간소화합니다.
-
YOLOv8 기반: Ultralytics YOLOv8을 기반으로 구축된 YOLO-World는 실시간 객체 탐지의 최신 발전을 활용하여 탁월한 정확도와 속도로 Open-Vocabulary 탐지를 지원합니다.
-
벤치마크 우수성: YOLO-World는 표준 벤치마크에서 속도와 효율성 측면에서 MDETR 및 GLIP 시리즈를 비롯한 기존 Open-Vocabulary 탐지기를 능가하며, 단일 NVIDIA V100 GPU에서 YOLOv8의 뛰어난 성능을 보여줍니다.
-
다양한 애플리케이션: YOLO-World의 혁신적인 접근 방식은 다양한 비전 작업에 새로운 가능성을 열어 주며, 기존 방법보다 몇 자릿수 더 높은 속도 향상을 제공합니다.
사용 가능한 모델, 지원 작업 및 운영 모드#
이 섹션에서는 특정 사전 학습 가중치와 함께 제공되는 모델, 지원하는 작업, 그리고 추론, 검증, 학습, 내보내기와 같은 다양한 운영 모드와의 호환성을 설명합니다. 지원되는 모드는 ✅, 지원되지 않는 모드는 ❌로 표시합니다.
모든 YOLOv8-World 가중치는 공식 YOLO-World 저장소에서 직접 마이그레이션되었으며, 뛰어난 기여를 보여줍니다.
| 모델 유형 | 사전 학습된 가중치 | 지원되는 작업 | 학습 | 검증 | 추론 | 내보내기 |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Object Detection | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Object Detection | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Object Detection | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Object Detection | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Object Detection | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Object Detection | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Object Detection | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Object Detection | ✅ | ✅ | ✅ | ✅ |
COCO 데이터셋에서의 제로샷 전이#
| 모델 유형 | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
사용 예시#
YOLO-World 모델은 Python 애플리케이션에 쉽게 통합할 수 있습니다. Ultralytics는 개발을 간소화할 수 있는 사용자 친화적인 Python API와 CLI 명령을 제공합니다.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
학습 사용법#
결정론적 학습을 지원하고 ONNX 및 TensorRT와 같은 형식으로 더 쉽게 내보낼 수 있으므로 사용자 지정 학습에는 yolov8-worldv2 사용을 강력히 권장합니다.
아래 예시와 같이 train 메서드를 사용하면 객체 탐지를 간단하게 수행할 수 있습니다.
PyTorch 사전 학습 *.pt 모델과 구성 *.yaml 파일을 YOLOWorld() 클래스에 전달하여 Python에서 모델 인스턴스를 생성할 수 있습니다.
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")Predict 사용법#
아래 예시와 같이 predict 메서드를 사용하면 객체 탐지를 간단하게 수행할 수 있습니다.
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()이 코드 조각은 사전 학습된 모델을 로드하고 이미지에서 예측을 실행하는 과정이 간단하다는 것을 보여 줍니다.
Val 사용법#
데이터셋에서 모델을 다음과 같이 간편하게 검증할 수 있습니다.
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")Track 사용법#
YOLO-World 모델을 사용한 동영상/이미지의 객체 추적은 다음과 같이 간편하게 수행할 수 있습니다.
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")Ultralytics에서 제공하는 YOLO-World 모델은 오프라인 어휘의 일부로 COCO 데이터셋 카테고리가 미리 구성되어 있어 즉시 애플리케이션에 사용할 때 효율성이 향상됩니다. 이 통합을 통해 YOLOv8-World 모델은 추가 설정이나 사용자 지정 없이 COCO 데이터셋에 정의된 80개의 표준 카테고리를 직접 인식하고 예측할 수 있습니다.
프롬프트 설정#

YOLO-World 프레임워크를 사용하면 사용자 지정 프롬프트를 통해 클래스를 동적으로 지정할 수 있으므로 재학습 없이 모델을 특정 요구 사항에 맞게 조정할 수 있습니다. 이 기능은 원래 학습 데이터에 포함되지 않았던 새로운 도메인이나 특정 작업에 모델을 적용할 때 특히 유용합니다. 사용자 지정 프롬프트를 설정하면 관심 객체에 모델의 초점을 맞출 수 있어 탐지 결과의 관련성과 정확도가 향상됩니다.
예를 들어 애플리케이션에서 'person' 및 'bus' 객체만 탐지하면 되는 경우 다음과 같이 이러한 클래스를 직접 지정할 수 있습니다.
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()일부 사용자는 빈 문자열 ""을 배경 클래스로 추가하면 특정 시나리오에서 탐지 성능이 향상된다는 사실을 발견했습니다. 이 동작은 시나리오에 따라 달라지는 것으로 보이며 정확한 메커니즘은 완전히 밝혀지지 않았습니다.
model.set_classes(["person", "bus", ""])사용자 지정 클래스를 설정한 후 모델을 저장할 수도 있습니다. 이렇게 하면 특정 사용 사례에 맞게 특화된 YOLO-World 모델 버전이 생성됩니다. 이 프로세스는 사용자 지정 클래스 정의를 모델 파일에 직접 포함하므로 추가 조정 없이 지정한 클래스를 사용할 수 있는 상태로 모델을 준비합니다. 다음 단계에 따라 사용자 지정 YOLO-World 모델을 저장하고 로드하십시오.
먼저 YOLO-World 모델을 로드하고 사용자 지정 클래스를 설정한 다음 저장합니다.
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")저장한 후 custom_yolov8s.pt 모델은 다른 사전 학습된 YOLOv8 모델과 동일하게 작동하지만 한 가지 중요한 차이가 있습니다. 이제 사용자가 정의한 클래스만 탐지하도록 최적화됩니다. 이러한 사용자 지정은 특정 애플리케이션 시나리오에서 탐지 성능과 효율성을 크게 향상할 수 있습니다.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()사용자 지정 어휘로 저장할 때의 이점#
- 효율성: 관련 객체에 집중하여 탐지 프로세스를 간소화하고 계산 오버헤드를 줄이며 추론 속도를 높입니다.
- 유연성: 광범위한 재학습이나 데이터 수집 없이 새로운 또는 틈새 탐지 작업에 모델을 쉽게 적용할 수 있습니다.
- 단순성: 런타임에 사용자 지정 클래스를 반복해서 지정할 필요가 없어 배포가 간소화되며, 모델에 포함된 어휘를 바로 사용할 수 있습니다.
- 성능: 정의된 객체 인식에 모델의 주의와 리소스를 집중하여 지정된 클래스의 탐지 정확도를 향상합니다.
이 접근 방식은 특정 작업에 맞게 최신 객체 탐지 모델을 사용자 지정할 수 있는 강력한 방법을 제공하여, 고급 AI를 더욱 다양한 실제 애플리케이션에서 쉽게 활용할 수 있도록 합니다.
처음부터 공식 결과 재현(실험적)#
데이터셋 준비#
- 학습 데이터
| 데이터셋 | 유형 | 샘플 | 박스 | 어노테이션 파일 |
|---|---|---|---|---|
| Objects365v1 | 탐지 | 609k | 9621k | objects365_train.json |
| GQA | 그라운딩 | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | 그라운딩 | 149k | 641k | final_flickr_separateGT_train.json |
- 검증 데이터
| 데이터셋 | 유형 | 어노테이션 파일 |
|---|---|---|
| LVIS minival | 탐지 | minival.txt |
처음부터 학습 시작#
WorldTrainerFromScratch은 탐지 데이터셋과 그라운딩 데이터셋에서 yolo-world 모델을 동시에 학습할 수 있도록 고도로 사용자 지정되었습니다. 자세한 내용은 ultralytics.models.yolo.world.train_world.py를 참조하십시오.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
# Option 2: Use YAML file (yolo_world_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 = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)인용 및 감사의 글#
YOLO-World를 사용한 실시간 Open-Vocabulary 객체 탐지 분야에서 선구적인 작업을 수행한 Tencent AILab Computer Vision Center에 깊이 감사드립니다.
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}추가로 읽어볼 자료로, YOLO-World 원 논문은 arXiv에서 확인할 수 있습니다. 프로젝트의 소스 코드와 추가 리소스는 해당 GitHub 저장소를 통해 이용할 수 있습니다. 이 분야의 발전에 기여하고 귀중한 통찰을 커뮤니티와 공유해 주신 점에 감사드립니다.
FAQ#
YOLO-World 모델은 Ultralytics YOLOv8 프레임워크를 기반으로 하는 고급 실시간 객체 탐지 접근 방식입니다. 설명 텍스트를 기반으로 이미지 내 객체를 식별하여 Open-Vocabulary Detection 작업에서 뛰어난 성능을 발휘합니다. 비전-언어 모델링과 대규모 데이터셋에 대한 사전 학습을 사용하여 YOLO-World는 계산 요구 사항을 크게 줄이면서 높은 효율성과 성능을 달성하므로 다양한 산업의 실시간 애플리케이션에 적합합니다.
YOLO-World는 효율성을 높이기 위해 오프라인 어휘를 활용하는 "프롬프트 후 탐지" 전략을 지원합니다. 캡션이나 특정 객체 카테고리와 같은 사용자 지정 프롬프트는 오프라인 어휘 임베딩으로 사전 인코딩되어 저장됩니다. 이 접근 방식은 재학습 없이 탐지 프로세스를 간소화합니다. 아래와 같이 모델 내에서 이러한 프롬프트를 동적으로 설정하여 특정 탐지 작업에 맞게 조정할 수 있습니다.
from ultralytics import YOLOWorld # Initialize a YOLO-World model model = YOLOWorld("yolov8s-world.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()YOLO-World는 기존 Open-Vocabulary 탐지 모델에 비해 다음과 같은 여러 장점을 제공합니다.
- 실시간 성능: CNNs의 계산 속도를 활용하여 빠르고 효율적인 탐지를 제공합니다.
- 효율성과 낮은 리소스 요구 사항: YOLO-World는 계산 및 리소스 요구 사항을 크게 줄이면서도 높은 성능을 유지합니다.
- 사용자 지정 가능한 프롬프트: 모델은 동적 프롬프트 설정을 지원하므로 재학습 없이 사용자가 사용자 지정 탐지 클래스를 지정할 수 있습니다.
- 벤치마크 우수성: 표준 벤치마크에서 속도와 효율성 모두 MDETR 및 GLIP과 같은 다른 Open-Vocabulary 탐지기를 능가합니다.
제공되는 Python API 또는 CLI 명령을 사용하면 데이터셋에서 YOLO-World 모델을 간단하게 학습할 수 있습니다. Python을 사용하여 학습을 시작하는 방법은 다음과 같습니다.
from ultralytics import YOLOWorld # Load a pretrained YOLOv8s-worldv2 model model = YOLOWorld("yolov8s-worldv2.pt") # Train the model on the COCO8 dataset for 100 epochs results = model.train(data="coco8.yaml", epochs=100, imgsz=640)또는 CLI를 사용할 수 있습니다.
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralytics는 다양한 작업과 실행 모드를 지원하는 여러 사전 학습된 YOLO-World 모델을 제공합니다.
모델 유형 사전 학습된 가중치 지원되는 작업 학습 검증 추론 내보내기 YOLOv8s-world yolov8s-world.pt Object Detection ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Object Detection ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Object Detection ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Object Detection ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Object Detection ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Object Detection ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Object Detection ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Object Detection ✅ ✅ ✅ ✅ 처음부터 공식 결과를 재현하려면 데이터셋을 준비하고 제공된 코드를 사용하여 학습을 시작해야 합니다. 학습 절차에는 데이터 딕셔너리를 생성하고 사용자 지정 트레이너와 함께
train메서드를 실행하는 과정이 포함됩니다.from ultralytics import YOLOWorld from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch data = { "train": { "yolo_data": ["Objects365.yaml"], "grounding_data": [ { "img_path": "flickr30k/images", "json_file": "flickr30k/final_flickr_separateGT_train.json", }, { "img_path": "GQA/images", "json_file": "GQA/final_mixed_train_no_coco.json", }, ], }, "val": {"yolo_data": ["lvis.yaml"]}, } model = YOLOWorld("yolov8s-worldv2.yaml") model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)