YOLO-World 모델#
YOLO-World 모델은 오픈 보캐뷸러리 탐지 작업을 위한 고급 실시간 Ultralytics YOLOv8 기반 접근 방식을 제시합니다. 이 혁신적인 방식은 설명 텍스트를 기반으로 이미지 내 모든 객체를 탐지할 수 있습니다. 경쟁력 있는 성능을 유지하면서 연산 요구 사항을 크게 낮춘 YOLO-World는 다양한 비전 기반 애플리케이션에 활용할 수 있는 다목적 도구입니다.
시청: 사용자 지정 데이터셋에서 YOLO World 학습 워크플로

개요#
YOLO-World는 광범위한 연산 리소스가 필요한 복잡한 Transformer 모델에 의존하는 경우가 많은 기존 오픈 보캐뷸러리 탐지 모델의 문제를 해결합니다. 이러한 모델은 사전에 정의된 객체 카테고리에 의존하기 때문에 동적인 환경에서 활용이 제한됩니다. YOLO-World는 비전 언어 모델링을 적용하고 대규모 데이터셋으로 사전 학습하여 YOLOv8 프레임워크에 오픈 보캐뷸러리 탐지 기능을 더합니다. 이를 통해 제로샷 시나리오에서 다양한 객체를 뛰어난 효율성으로 식별합니다.
인스턴스 마스크, 시각적 프롬프트 또는 프롬프트가 필요 없는 모드도 필요한 오픈 보캐뷸러리 작업에는 동일한 set_classes() API를 사용하는 YOLOE를 참조하세요.
주요 기능#
-
실시간 솔루션: CNN의 연산 속도를 활용하는 YOLO-World는 빠른 오픈 보캐뷸러리 탐지 솔루션을 제공하며 즉각적인 결과가 필요한 산업 분야에 적합합니다.
-
효율성과 성능: YOLO-World는 성능 저하 없이 연산 및 리소스 요구 사항을 크게 줄입니다. SAM과 같은 모델의 강력한 대안으로, 훨씬 적은 연산 비용으로 실시간 애플리케이션을 구현할 수 있습니다.
-
오프라인 보캐뷸러리를 사용한 추론: YOLO-World는 효율성을 더욱 높이기 위해 오프라인 보캐뷸러리를 활용하는 "프롬프트 후 탐지" 전략을 도입합니다. 이 접근 방식을 사용하면 캡션이나 카테고리 등 미리 계산된 사용자 지정 프롬프트를 오프라인 보캐뷸러리 임베딩으로 인코딩하고 저장하여 탐지 과정을 간소화할 수 있습니다.
-
YOLOv8 기반: Ultralytics YOLOv8을 기반으로 구축된 YOLO-World는 실시간 객체 탐지의 최신 발전을 활용하여 탁월한 정확도와 속도로 오픈 보캐뷸러리 탐지를 지원합니다.
-
탁월한 벤치마크 성능: YOLO-World는 표준 벤치마크에서 MDETR 및 GLIP 시리즈를 비롯한 기존 오픈 보캐뷸러리 탐지기보다 속도와 효율성 면에서 뛰어난 성능을 보이며, NVIDIA V100 GPU 한 대에서 YOLOv8의 우수한 성능을 입증합니다.
-
다양한 애플리케이션: YOLO-World의 혁신적인 접근 방식은 여러 비전 작업에서 새로운 가능성을 열어 주며 기존 방법보다 훨씬 빠른 속도를 제공합니다.
사용 가능한 모델, 지원 작업 및 작동 모드#
이 섹션에서는 사용 가능한 모델과 각 모델의 사전 학습 가중치, 지원 작업, 다양한 운영 모드와의 호환성을 설명합니다. 지원되는 모드는 ✅, 지원되지 않는 모드는 ❌로 표시하며, 운영 모드에는 추론, 검증, 학습, 내보내기가 포함됩니다.
모든 YOLOv8-World 가중치는 공식 YOLO-World 리포지토리에서 직접 이전되었으며, 이는 해당 리포지토리의 탁월한 기여를 보여줍니다.
| 모델 유형 | 사전 학습 가중치 | 지원 작업 | 학습 | 검증 | 추론 | 내보내기 |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | 객체 탐지 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | 객체 탐지 | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | 객체 탐지 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | 객체 탐지 | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | 객체 탐지 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | 객체 탐지 | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | 객체 탐지 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | 객체 탐지 | ✅ | ✅ | ✅ | ✅ |
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 명령을 제공합니다.
시청: Ultralytics를 활용한 YOLO-World 모델 사용 예시 | 개방형 어휘, 프롬프트 없는 방식 등 🚀
학습 사용법#
결정론적 학습을 지원하고 ONNX 및 TensorRT와 같은 형식으로 더 쉽게 내보낼 수 있으므로, 사용자 지정 학습에는 yolov8-worldv2 사용을 적극 권장합니다.
아래와 같이 train 메서드를 사용하면 객체 탐지를 간편하게 수행할 수 있습니다.
PyTorch 사전 학습된 *.pt 모델과 구성 *.yaml 파일을 YOLOWorld() 클래스에 전달하여 Python에서 모델 인스턴스를 생성할 수 있습니다:
from ultralytics import YOLOWorld
# 사전 학습된 YOLOv8s-worldv2 모델 로드
model = YOLOWorld("yolov8s-worldv2.pt")
# COCO8 예제 데이터셋으로 100 에포크 동안 모델 학습
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# 'bus.jpg' 이미지에서 YOLO-World 모델로 추론 실행
results = model("path/to/bus.jpg")예측 사용법#
아래와 같이 predict 메서드를 사용하면 객체 탐지를 간편하게 수행할 수 있습니다.
from ultralytics import YOLOWorld
# YOLO-World 모델 초기화
model = YOLOWorld("yolov8s-world.pt") # 또는 다양한 크기를 사용하려면 yolov8m/l-world.pt를 선택합니다.
# 지정된 이미지에서 YOLOv8s-world 모델로 추론 실행
results = model.predict("path/to/image.jpg")
# 결과 표시
results[0].show()이 코드 조각은 사전 학습 모델을 간편하게 불러오고 이미지에서 예측을 실행하는 방법을 보여 줍니다.
검증 사용법#
데이터셋에 대한 모델 검증은 다음과 같이 간소화할 수 있습니다.
from ultralytics import YOLO
# YOLO-World 모델 생성
model = YOLO("yolov8s-world.pt") # 또는 다양한 크기를 사용하려면 yolov8m/l-world.pt를 선택합니다.
# COCO8 예제 데이터셋에서 모델 검증 수행
metrics = model.val(data="coco8.yaml")추적 사용법#
YOLO-World 모델을 사용한 비디오/이미지 객체 추적은 다음과 같이 간소화할 수 있습니다.
from ultralytics import YOLO
# YOLO-World 모델 생성
model = YOLO("yolov8s-world.pt") # 또는 다양한 크기를 사용하려면 yolov8m/l-world.pt를 선택합니다.
# 비디오에서 YOLO-World 모델로 추적
results = model.track(source="path/to/video.mp4")Ultralytics에서 제공하는 YOLO-World 모델은 오프라인 어휘의 일부로 COCO 데이터셋 카테고리가 미리 구성되어 있어 즉시 적용할 때 효율성이 높아집니다. 이 통합을 통해 YOLOv8-World 모델은 추가 설정이나 사용자 지정 없이 COCO 데이터셋에 정의된 80개의 표준 카테고리를 직접 인식하고 예측할 수 있습니다.
프롬프트 설정#

YOLO-World 프레임워크에서는 사용자 지정 프롬프트를 통해 클래스를 동적으로 지정할 수 있으므로, 사용자는 재학습 없이 특정 요구에 맞게 모델을 조정할 수 있습니다. 이 기능은 원래 학습 데이터에 포함되지 않았던 새로운 도메인이나 특정 작업에 모델을 적용할 때 특히 유용합니다. 사용자 지정 프롬프트를 설정하면 관심 객체에 모델의 초점을 맞춰 탐지 결과의 관련성과 정확도를 높일 수 있습니다.
예를 들어, 애플리케이션에서 'person' 및 'bus' 객체만 탐지하면 되는 경우 이러한 클래스를 직접 지정할 수 있습니다.
from ultralytics import YOLO
# YOLO-World 모델 초기화
model = YOLO("yolov8s-world.pt") # 또는 yolov8m/l-world.pt를 선택합니다.
# 사용자 지정 클래스 정의
model.set_classes(["person", "bus"])
# 이미지에서 지정된 카테고리에 대한 예측 실행
results = model.predict("path/to/image.jpg")
# 결과 표시
results[0].show()일부 사용자는 빈 문자열 ""을 배경 클래스로 추가하면 특정 상황에서 탐지 성능이 향상될 수 있다고 확인했습니다. 이러한 동작은 상황에 따라 달라지는 것으로 보이며, 정확한 메커니즘은 완전히 밝혀지지 않았습니다.
model.set_classes(["person", "bus", ""])빈 문자열은 저장하는 모든 모델에서 독립적인 클래스로 model.names에 유지되므로, 해당 탐지 결과에는 빈 레이블이 반환됩니다. 예측 시 classes=[0, 1]을 전달하면 실제 클래스만 유지할 수 있습니다.
사용자 지정 클래스를 설정한 후 모델을 저장할 수도 있습니다. 이렇게 하면 특정 사용 사례에 맞게 특화된 YOLO-World 모델 버전을 만들 수 있습니다. 이 과정에서는 사용자 지정 클래스 정의를 모델 파일에 직접 포함하므로 추가 조정 없이 지정한 클래스를 사용할 수 있는 모델이 준비됩니다. 사용자 지정 YOLO-World 모델을 저장하고 로드하려면 다음 단계를 따르세요.
먼저 YOLO-World 모델을 로드하고 사용자 지정 클래스를 설정한 다음 저장합니다.
from ultralytics import YOLO
# YOLO-World 모델 초기화
model = YOLO("yolov8s-world.pt") # 또는 yolov8m/l-world.pt를 선택합니다.
# 사용자 지정 클래스 정의
model.set_classes(["person", "bus"])
# 정의된 오프라인 어휘와 함께 모델 저장
model.save("custom_yolov8s.pt")저장 후 custom_yolov8s.pt 모델은 다른 사전 학습된 YOLOv8 모델과 동일하게 동작하지만 한 가지 중요한 차이가 있습니다. 정의한 클래스만 탐지하도록 최적화되어 있다는 점입니다. 이러한 사용자 지정은 특정 애플리케이션 시나리오에서 탐지 성능과 효율성을 크게 향상시킬 수 있습니다.
from ultralytics import YOLO
# 사용자 지정 모델 로드
model = YOLO("custom_yolov8s.pt")
# 사용자 지정 클래스를 탐지하도록 추론 실행
results = model.predict("path/to/image.jpg")
# 결과 표시
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
# 옵션 1: Python 딕셔너리 사용
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"]},
}
# 옵션 2: YAML 파일 사용(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, # YAML 파일을 사용하는 경우 data="yolo_world_data.yaml"을 사용합니다.
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)인용 및 감사의 글#
YOLO-World를 활용한 실시간 오픈 보캐뷸러리 객체 탐지 분야의 선구적인 연구를 수행한 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}
}자세한 내용은 arXiv에서 YOLO-World 원본 논문을 확인할 수 있습니다. 프로젝트의 소스 코드와 추가 리소스는 GitHub 저장소에서 확인할 수 있습니다. 이 분야의 발전에 기여하고 귀중한 통찰을 커뮤니티와 공유해 주신 데 감사드립니다.
자주 묻는 질문#
YOLO-World 모델은 Ultralytics YOLOv8 프레임워크를 기반으로 한 고급 실시간 객체 탐지 방식입니다. 설명 텍스트를 바탕으로 이미지 내 객체를 식별하는 오픈 보캐뷸러리 탐지 작업에서 뛰어난 성능을 발휘합니다. 비전-언어 모델링과 대규모 데이터셋 사전 학습을 활용하는 YOLO-World는 컴퓨팅 요구 사항을 크게 낮추면서도 높은 효율성과 성능을 달성하므로 다양한 산업의 실시간 애플리케이션에 적합합니다.
YOLO-World는 오프라인 어휘를 활용해 효율성을 높이는 "프롬프트 후 탐지" 전략을 지원합니다. 캡션이나 특정 객체 카테고리와 같은 사용자 지정 프롬프트를 미리 인코딩해 오프라인 어휘 임베딩으로 저장합니다. 이 접근 방식은 재학습 없이 탐지 과정을 간소화합니다. 아래와 같이 모델 내에서 프롬프트를 동적으로 설정하여 특정 탐지 작업에 맞게 조정할 수 있습니다.
from ultralytics import YOLOWorld # YOLO-World 모델 초기화 model = YOLOWorld("yolov8s-world.pt") # 사용자 지정 클래스 정의 model.set_classes(["person", "bus"]) # 이미지에서 예측 실행 results = model.predict("path/to/image.jpg") # 결과 표시 results[0].show()YOLO-World는 기존 오픈 보캐뷸러리 탐지 모델에 비해 다음과 같은 여러 장점을 제공합니다.
- 실시간 성능: CNN의 연산 속도를 활용해 빠르고 효율적으로 탐지합니다.
- 효율성과 낮은 리소스 요구량: YOLO-World는 컴퓨팅 및 리소스 요구량을 크게 낮추면서도 높은 성능을 유지합니다.
- 사용자 지정 프롬프트: 모델은 프롬프트를 동적으로 설정할 수 있어 사용자가 재학습 없이 사용자 지정 탐지 클래스를 지정할 수 있습니다.
- 벤치마크 우수성: 표준 벤치마크에서 속도와 효율성 모두 MDETR 및 GLIP과 같은 다른 오픈 보캐뷸러리 탐지 모델보다 뛰어납니다.
제공되는 Python API 또는 CLI 명령을 사용하면 데이터셋으로 YOLO-World 모델을 간편하게 학습할 수 있습니다. Python을 사용해 학습을 시작하는 방법은 다음과 같습니다.
from ultralytics import YOLOWorld # 사전 학습된 YOLOv8s-worldv2 모델 로드 model = YOLOWorld("yolov8s-worldv2.pt") # COCO8 데이터셋에서 100 에포크 동안 모델 학습 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 객체 탐지 ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt 객체 탐지 ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt 객체 탐지 ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt 객체 탐지 ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt 객체 탐지 ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt 객체 탐지 ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt 객체 탐지 ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt 객체 탐지 ✅ ✅ ✅ ✅ 공식 결과를 처음부터 재현하려면 데이터 세트를 준비하고 제공된 코드를 사용해 학습을 시작해야 합니다. 학습 절차에는 데이터 딕셔너리를 만들고 사용자 지정 트레이너로
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)