YOLO-World 모델

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



Watch: YOLO World training workflow on custom dataset

YOLO-World 모델 아키텍처 개요

개요

YOLO-World는 상당한 컴퓨팅 자원이 필요한 복잡한 Transformer 모델에 의존하는 기존 오픈 어휘 탐지 모델들이 직면한 과제를 해결합니다. 이러한 모델들은 미리 정의된 객체 카테고리에 의존하기 때문에 동적인 시나리오에서 유용성이 제한됩니다. YOLO-World는 비전-언어 모델링을 사용하고 방대한 데이터셋에 대해 사전 학습을 수행하여 제로샷 시나리오에서 광범위한 객체를 식별하는 데 탁월한 효율성을 발휘하며 YOLOv8 프레임워크를 재탄생시킵니다.

주요 특징

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

  2. 효율성 및 성능: YOLO-World는 성능을 저하시키지 않으면서 컴퓨팅 및 리소스 요구 사항을 대폭 절감합니다. SAM과 같은 모델에 비해 훨씬 적은 연산 비용으로 강력한 대안을 제공하여 실시간 애플리케이션 구현을 가능하게 합니다.

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

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

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

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

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

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

참고

모든 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객체 감지

COCO 데이터셋에서의 제로샷 전이(Zero-shot Transfer)

성능
모델 유형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

사용 예시

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



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

학습(Train) 사용법

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

Object detection은 아래와 같이 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) 사용법

Object detection은 아래와 같이 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 모델을 사용한 Object tracking은 다음과 같이 간소화되어 있습니다:

예시
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 dataset 카테고리가 사전 구성되어 있어 즉각적인 적용을 위한 효율성을 높입니다. 이러한 통합을 통해 YOLOv8-World 모델은 추가 설정이나 사용자 정의 없이 COCO 데이터셋에 정의된 80개의 표준 카테고리를 즉시 인식하고 예측할 수 있습니다.

프롬프트 설정

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

YOLO-World 프레임워크는 사용자 정의 프롬프트를 통해 클래스를 동적으로 지정할 수 있게 하여, 사용자가 재학습 없이도 자신의 특정 요구 사항에 맞게 모델을 조정할 수 있도록 합니다. 이 기능은 원래 training data에 포함되지 않았던 새로운 도메인이나 특정 작업에 모델을 적응시키는 데 특히 유용합니다. 사용자 정의 프롬프트를 설정함으로써 사용자는 본질적으로 모델의 초점을 관심 객체로 유도하여 탐지 결과의 관련성과 accuracy를 향상시킬 수 있습니다.

예를 들어, 애플리케이션에서 '사람(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()

사용자 정의 어휘로 저장할 때의 이점

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

이 접근 방식은 최첨단 object detection 모델을 특정 작업에 맞게 커스터마이징하는 강력한 수단을 제공하여, 고급 AI를 더 실용적인 애플리케이션 범위에 더 쉽게 접근하고 적용할 수 있도록 합니다.

처음부터 공식 결과 재현하기 (실험적)

데이터셋 준비

  • 학습 데이터
데이터셋유형(Type)샘플Boxes어노테이션 파일
Objects365v1Detection609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • 검증 데이터
데이터셋유형(Type)어노테이션 파일
LVIS minivalDetectionminival.txt

처음부터 학습 시작하기

참고

WorldTrainerFromScratch는 탐지 데이터셋과 그라운딩 데이터셋 모두에서 동시에 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,
)

인용 및 감사의 글

실시간 오픈 어휘 객체 탐지 분야의 선구적인 연구를 수행한 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 모델이란 무엇이며 어떻게 작동합니까?

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

YOLO-World는 사용자 지정 프롬프트를 사용한 추론을 어떻게 처리합니까?

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

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를 선택해야 하는 이유는 무엇입니까?

YOLO-World는 전통적인 오픈 어휘 탐지 모델에 비해 다음과 같은 몇 가지 장점을 제공합니다:

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

제 데이터셋으로 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

사용 가능한 사전 학습된 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객체 감지

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

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

댓글