YOLO Vision 2026:

YOLO-World 모델#

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



Watch: YOLO World training workflow on custom dataset

YOLO-World Model architecture overview

개요#

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

  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 데이터셋에 대한 제로샷 전이#

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

훈련 사용법#

결정론적 학습을 지원하고 ONNX 및 TensorRT와 같은 형식으로 더 쉽게 내보낼 수 있으므로 사용자 정의 학습에는 yolov8-worldv2을 사용하는 것을 강력히 권장합니다.

아래 그림과 같이 train 방법을 사용하면 객체 검출을 간단하게 수행할 수 있습니다:

예시

PyTorch 사전 학습된 *.pt 모델과 설정 *.yaml 파일을 python의 YOLOWorld() 클래스에 전달하여 모델 인스턴스를 생성할 수 있습니다.

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 prompt class names overview

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탐지609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30k그라운딩(Grounding)149k641kfinal_flickr_separateGT_train.json
  • 검증(Val) 데이터
데이터셋유형주석 파일
LVIS minival탐지minival.txt

처음부터(from scratch) 학습 시작하기#

참고

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를 통한 실시간 오픈 어보카도 객체 검출 분야에서 선구적인 연구를 수행해 주신 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 프레임워크를 기반으로 하는 고급 실시간 객체 검출 접근 방식입니다. 설명 텍스트를 기반으로 이미지 내의 객체를 식별함으로써 오픈 어보카도 검출 작업에서 뛰어난 성능을 발휘합니다. 비전-언어 모델링과 대규모 데이터셋 사전 학습을 활용하는 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는 기존의 오픈 어휘 탐지 모델에 비해 다음과 같은 여러 가지 장점을 제공합니다:

    • 실시간 성능: CNN의 계산 속도를 활용하여 빠르고 효율적인 탐지를 제공합니다.
    • 효율성 및 낮은 리소스 요구 사항: YOLO-World는 컴퓨팅 및 리소스 요구 사항을 크게 줄이면서도 높은 성능을 유지합니다.
    • 사용자 정의 가능한 프롬프트: 이 모델은 동적 프롬프트 설정을 지원하여 사용자가 재학습 없이도 사용자 정의 탐지 클래스를 지정할 수 있습니다.
    • 벤치마크 우수성: 표준 벤치마크에서 속도와 효율성 면에서 MDETR 및 GLIP과 같은 다른 오픈 어휘 탐지기보다 뛰어난 성능을 보입니다.
  • 제공된 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
  • 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객체 탐지
  • 공식 결과를 처음부터 재현하려면 데이터셋을 준비하고 제공된 코드를 사용하여 학습을 시작해야 합니다. 학습 절차에는 데이터 딕셔너리를 생성하고 사용자 지정 트레이너와 함께 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)

댓글