Meet YOLO26: next-gen vision AI.

Link to this sectionYOLO-World 모델#

YOLO-World 모델은 오픈 어휘(Open-Vocabulary) 탐지 작업을 위해 고급 실시간 Ultralytics YOLOv8 기반 접근 방식을 도입합니다. 이 혁신 기술은 서술형 텍스트를 기반으로 이미지 내 모든 객체를 탐지할 수 있게 합니다. YOLO-World는 경쟁력 있는 성능을 유지하면서도 컴퓨팅 요구 사항을 크게 낮춤으로써 수많은 비전 기반 애플리케이션을 위한 다재다능한 도구로 자리 잡았습니다.



Watch: YOLO World training workflow on custom dataset

YOLO-World 모델 아키텍처 개요

Link to this section개요#

YOLO-World는 방대한 컴퓨팅 자원을 요구하는 번거로운 Transformer 모델에 의존하는 기존 오픈 어휘 탐지 모델의 문제점을 해결합니다. 이러한 모델들이 사전 정의된 객체 카테고리에 의존하는 점은 동적 시나리오에서의 유용성을 제한합니다. YOLO-World는 비전-언어 모델링을 사용하고 방대한 데이터셋으로 사전 훈련하여, 제로샷 시나리오에서 광범위한 객체를 타의 추종을 불허하는 효율성으로 식별함으로써 YOLOv8 프레임워크에 오픈 어휘 탐지 기능을 불어넣었습니다.

Link to this section주요 특징#

  1. 실시간 솔루션: CNN의 컴퓨팅 속도를 활용하는 YOLO-World는 즉각적인 결과를 필요로 하는 산업 분야에 맞춰 신속한 오픈 어휘 탐지 솔루션을 제공합니다.

  2. 효율성 및 성능: YOLO-World는 성능 저하 없이 컴퓨팅 및 자원 요구 사항을 크게 줄였으며, SAM과 같은 모델에 대한 강력한 대안을 제시하여 컴퓨팅 비용을 대폭 절감하고 실시간 애플리케이션을 가능하게 합니다.

  3. 오프라인 어휘를 이용한 추론: YOLO-World는 효율성을 더욱 향상하기 위해 오프라인 어휘를 사용하는 "프롬프트 후 탐지(prompt-then-detect)" 전략을 도입했습니다. 이 접근 방식을 통해 캡션이나 카테고리를 포함하여 사전에 계산된 사용자 정의 프롬프트를 인코딩하고 오프라인 어휘 임베딩으로 저장할 수 있어, 탐지 프로세스를 간소화합니다.

  4. YOLOv8 기반: Ultralytics YOLOv8을 기반으로 구축된 YOLO-World는 최신 실시간 객체 탐지 기술의 발전을 활용하여 탁월한 정확도와 속도로 오픈 어휘 탐지를 구현합니다.

  5. 벤치마크 우수성: YOLO-World는 표준 벤치마크에서 속도와 효율성 측면에서 MDETR 및 GLIP 시리즈를 포함한 기존 오픈 어휘 탐지기보다 뛰어난 성능을 보이며, 단일 NVIDIA V100 GPU에서 YOLOv8의 우수한 성능을 입증합니다.

  6. 다양한 애플리케이션: YOLO-World의 혁신적인 접근 방식은 수많은 비전 작업에 새로운 가능성을 열어주며, 기존 방식보다 몇 배 더 빠른 속도 개선 효과를 제공합니다.

Link to this section사용 가능한 모델, 지원 작업 및 운영 모드#

이 섹션에서는 특정 사전 훈련 가중치를 가진 사용 가능한 모델, 모델이 지원하는 작업, 그리고 추론, 검증, 훈련, 내보내기와 같은 다양한 작동 모드와의 호환성에 대해 자세히 설명합니다. 지원되는 모드는 ✅, 지원되지 않는 모드는 ❌로 표시됩니다.

참고

모든 YOLOv8-World 가중치는 공식 YOLO-World 저장소에서 직접 마이그레이션되었으며, 이는 해당 프로젝트의 훌륭한 기여를 잘 보여줍니다.

모델 유형사전 학습된 가중치지원되는 작업추론검증학습내보내기(Export)
YOLOv8s-worldyolov8s-world.pt객체 탐지
YOLOv8s-worldv2yolov8s-worldv2.pt객체 탐지
YOLOv8m-worldyolov8m-world.pt객체 탐지
YOLOv8m-worldv2yolov8m-worldv2.pt객체 탐지
YOLOv8l-worldyolov8l-world.pt객체 탐지
YOLOv8l-worldv2yolov8l-worldv2.pt객체 탐지
YOLOv8x-worldyolov8x-world.pt객체 탐지
YOLOv8x-worldv2yolov8x-worldv2.pt객체 탐지

Link to this sectionCOCO 데이터셋에 대한 제로샷 전이#

성능
모델 유형mAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Link to this section사용 예제#

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



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

Link to this section훈련 사용법#

사용자 정의 훈련에는 yolov8-worldv2 모델을 사용할 것을 강력히 권장합니다. 이 모델은 결정론적 훈련을 지원하며 onnx/tensorrt와 같은 다른 형식으로의 내보내기가 쉽기 때문입니다.

객체 탐지는 아래와 같이 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")

Link to this sectionPredict 사용법#

객체 탐지는 아래와 같이 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()

이 스니펫은 사전 학습된 모델을 로드하고 이미지에서 예측을 실행하는 간편함을 보여줍니다.

Link to this sectionVal 사용법#

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

예시
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")

Link to this sectionTrack 사용법#

비디오/이미지에서 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개의 표준 카테고리를 직접 인식하고 예측할 수 있습니다.

Link to this section프롬프트 설정#

YOLO-World 프롬프트 클래스 이름 개요

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()

Link to this section사용자 정의 어휘로 저장 시 이점#

  • 효율성: 관련 객체에 집중하여 탐지 프로세스를 간소화하고, 컴퓨팅 오버헤드를 줄이며 추론 속도를 높입니다.
  • 유연성: 광범위한 재훈련이나 데이터 수집 없이 새로운 또는 틈새 탐지 작업에 모델을 쉽게 적응시킬 수 있습니다.
  • 단순성: 런타임 시 사용자 정의 클래스를 반복적으로 지정할 필요를 없애 배포를 단순화하며, 내장된 어휘로 모델을 바로 사용할 수 있게 합니다.
  • 성능: 모델의 관심과 자원을 정의된 객체를 인식하는 데 집중시켜 지정된 클래스에 대한 탐지 정확도를 향상합니다.

이 접근 방식은 최첨단 객체 탐지 모델을 특정 작업에 맞게 사용자 정의할 수 있는 강력한 방법을 제공하여, 고급 AI를 보다 접근하기 쉽고 광범위한 실용적 애플리케이션에 적용 가능하게 만듭니다.

Link to this section공식 결과 처음부터 재현하기 (실험적)#

Link to this section데이터셋 준비#

  • 훈련 데이터
데이터셋유형샘플박스주석 파일
Objects365v1탐지609k9621kobjects365_train.json
GQA그라운딩621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • 검증(Val) 데이터
데이터셋유형주석 파일
LVIS minival탐지minival.txt

Link to this section처음부터(from scratch) 학습 시작하기#

참고

WorldTrainerFromScratch는 탐지 데이터셋과 그라운딩(grounding) 데이터셋 모두에서 YOLO-World 모델을 동시에 학습시킬 수 있도록 고도로 최적화되어 있습니다. 더 자세한 내용은 ultralytics.model.yolo.world.train_world.py를 확인하시기 바랍니다.

예시
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Option 1: Use Python dictionary
data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="flickr30k/images",
                json_file="flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="GQA/images",
                json_file="GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(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,
)

Link to this section인용 및 감사의 글#

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}
}

더 자세한 내용은 arXiv에서 원본 YOLO-World 논문을 참조하십시오. 프로젝트 소스 코드 및 추가 리소스는 해당 GitHub 저장소에서 액세스할 수 있습니다. 해당 분야의 발전과 귀중한 통찰력을 커뮤니티와 공유해 주신 점에 대해 깊이 감사드립니다.

Link to this sectionFAQ#

Link to this sectionYOLO-World 모델이란 무엇이며 어떻게 작동합니까?#

YOLO-World 모델은 Ultralytics YOLOv8 프레임워크를 기반으로 하는 고급 실시간 객체 탐지 방식입니다. 이 모델은 기술적 텍스트를 기반으로 이미지 내의 객체를 식별하여 오픈 어휘 탐지(Open-Vocabulary Detection) 작업에서 뛰어난 성능을 발휘합니다. 비전-언어 모델링과 대규모 데이터셋에 대한 사전 학습을 사용하는 YOLO-World는 컴퓨팅 요구 사항을 크게 줄이면서도 높은 효율성과 성능을 달성하여 다양한 산업의 실시간 애플리케이션에 적합합니다.

Link to this sectionYOLO-World는 사용자 정의 프롬프트를 사용한 추론을 어떻게 처리합니까?#

YOLO-World는 효율성을 높이기 위해 오프라인 어휘를 활용하는 "프롬프트 후 탐지(prompt-then-detect)" 전략을 지원합니다. 캡션이나 특정 객체 범주와 같은 사용자 정의 프롬프트는 사전에 인코딩되어 오프라인 어휘 임베딩(embeddings)으로 저장됩니다. 이 접근 방식은 재학습 없이도 탐지 과정을 간소화합니다. 아래와 같이 모델 내에서 이러한 프롬프트를 동적으로 설정하여 특정 탐지 작업에 맞춤화할 수 있습니다:

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()

Link to this section왜 기존의 오픈 어휘 탐지 모델 대신 YOLO-World를 선택해야 합니까?#

YOLO-World는 기존의 오픈 어휘 탐지 모델에 비해 다음과 같은 여러 가지 장점을 제공합니다:

  • 실시간 성능: CNN의 계산 속도를 활용하여 빠르고 효율적인 탐지를 제공합니다.
  • 효율성 및 낮은 리소스 요구 사항: YOLO-World는 컴퓨팅 및 리소스 요구 사항을 크게 줄이면서도 높은 성능을 유지합니다.
  • 사용자 정의 가능한 프롬프트: 이 모델은 동적 프롬프트 설정을 지원하여 사용자가 재학습 없이도 사용자 정의 탐지 클래스를 지정할 수 있습니다.
  • 벤치마크 우수성: 표준 벤치마크에서 속도와 효율성 면에서 MDETR 및 GLIP과 같은 다른 오픈 어휘 탐지기보다 뛰어난 성능을 보입니다.

Link to this section사용자 데이터셋으로 YOLO-World 모델을 어떻게 학습시킬 수 있습니까?#

제공된 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.yaml data=coco8.yaml epochs=100 imgsz=640

Link to this section사용 가능한 사전 학습된 YOLO-World 모델과 지원되는 작업은 무엇입니까?#

Ultralytics는 다양한 작업과 운영 모드를 지원하는 여러 사전 학습된 YOLO-World 모델을 제공합니다:

모델 유형사전 학습된 가중치지원되는 작업추론검증학습내보내기(Export)
YOLOv8s-worldyolov8s-world.pt객체 탐지
YOLOv8s-worldv2yolov8s-worldv2.pt객체 탐지
YOLOv8m-worldyolov8m-world.pt객체 탐지
YOLOv8m-worldv2yolov8m-worldv2.pt객체 탐지
YOLOv8l-worldyolov8l-world.pt객체 탐지
YOLOv8l-worldv2yolov8l-worldv2.pt객체 탐지
YOLOv8x-worldyolov8x-world.pt객체 탐지
YOLOv8x-worldv2yolov8x-worldv2.pt객체 탐지

Link to this sectionYOLO-World의 공식 결과를 처음부터 재현하려면 어떻게 해야 합니까?#

공식 결과를 처음부터 재현하려면 데이터셋을 준비하고 제공된 코드를 사용하여 학습을 시작해야 합니다. 학습 절차에는 데이터 딕셔너리를 생성하고 사용자 정의 트레이너(trainer)와 함께 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)

댓글