콘텐츠로 건너뛰기

YOLO-세계 모델

YOLO-세계 모델에서는 고급 실시간 Ultralytics YOLOv8-기반 접근 방식을 도입합니다. 이 혁신은 설명 텍스트를 기반으로 이미지 내의 모든 물체를 감지할 수 있게 해줍니다. 경쟁력 있는 성능을 유지하면서 계산 요구 사항을 크게 낮춘 YOLO-World는 다양한 비전 기반 애플리케이션을 위한 다목적 도구로 부상하고 있습니다.



Watch: YOLO 사용자 지정 데이터 세트의 월드 트레이닝 워크플로

YOLO-월드 모델 아키텍처 개요

개요

YOLO-World tackles the challenges faced by traditional Open-Vocabulary detection models, which often rely on cumbersome Transformer models requiring extensive computational resources. These models' dependence on pre-defined object categories also restricts their utility in dynamic scenarios. YOLO-World revitalizes the YOLOv8 framework with open-vocabulary detection capabilities, employing vision-language modeling and pre-training on expansive datasets to excel at identifying a broad array of objects in zero-shot scenarios with unmatched efficiency.

주요 기능

  1. 실시간 솔루션: CNN의 계산 속도를 활용하는 YOLO-World는 즉각적인 결과를 필요로 하는 산업에 맞는 신속한 개방형 어휘 감지 솔루션을 제공합니다.

  2. 효율성 및 성능: YOLO- 성능 저하 없이 계산 및 리소스 요구 사항을 절감하여 SAM 같은 모델에 대한 강력한 대안을 제공하지만 계산 비용은 훨씬 저렴하여 실시간 애플리케이션을 지원합니다.

  3. 오프라인 어휘를 사용한 추론: YOLO-World에서는 오프라인 어휘를 사용하여 효율성을 더욱 높이는 '프롬프트 후 감지' 전략을 도입했습니다. 이 접근 방식을 사용하면 캡션이나 카테고리를 포함하여 선험적으로 계산된 사용자 지정 프롬프트를 오프라인 어휘 임베딩으로 인코딩하고 저장하여 감지 프로세스를 간소화할 수 있습니다.

  4. 제공: YOLOv8: 기반 Ultralytics YOLOv8, YOLO-World는 실시간 객체 감지의 최신 기술을 활용하여 탁월한 정확도와 속도로 개방형 어휘 감지를 용이하게 합니다.

  5. 벤치마크 우수성: YOLO-표준 벤치마크에서 속도와 효율성 측면에서 MDETR 및 GLIP 시리즈를 포함한 기존 오픈 어휘 검출기보다 월등한 성능을 발휘하여 단일 NVIDIA V100 GPU 에서 YOLOv8 의 우수한 성능을 보여줍니다.

  6. 다양한 애플리케이션: YOLO-세계의 혁신적인 접근 방식은 다양한 비전 작업에 대한 새로운 가능성을 열어주며 기존 방식보다 몇 배의 속도 향상을 제공합니다.

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

이 섹션에서는 특정 사전 학습된 가중치와 함께 사용할 수 있는 모델, 지원되는 작업, 추론, 검증, 학습, 내보내기 등 다양한 작동 모드와의 호환성에 대해 자세히 설명하며 지원되는 모드의 경우 ✅로, 지원되지 않는 모드의 경우 ❌로 표시되어 있습니다.

모델 유형사전 학습된 가중치지원되는 작업추론유효성 검사교육내보내기
YOLOv8s-세계yolov8s-world.pt물체 감지
YOLOv8s-worldv2yolov8s-worldv2.pt물체 감지
YOLOv8m-세계yolov8m-world.pt물체 감지
YOLOv8m-worldv2yolov8m-worldv2.pt물체 감지
YOLOv8l-세계yolov8l-world.pt물체 감지
YOLOv8l-worldv2yolov8l-worldv2.pt물체 감지
YOLOv8x-세계yolov8x-world.pt물체 감지
YOLOv8x-worldv2yolov8x-worldv2.pt물체 감지

COCO 데이터 세트의 제로 샷 전송

모델 유형mAPmAP50mAP75
yolov8s-세계37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-세계42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-세계45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-세계47.063.051.2
yolov8x-worldv247.162.851.4

사용 예

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

열차 사용량

다음을 사용하는 것이 좋습니다. yolov8-worldv2 모델은 결정론적 훈련을 지원하고 다른 형식(예: onnx/tensorrt)을 쉽게 내보낼 수 있기 때문에 사용자 지정 훈련을 위해 사용할 수 있습니다.

Object detection is straightforward with the train 메서드를 사용합니다:

PyTorch pretrained *.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 YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

사용량 예측

물체 감지는 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

이 스니펫은 사전 학습된 모델을 로드하고 이미지에 대해 예측을 실행하는 간단한 방법을 보여줍니다.

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")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640

사용량 추적

동영상/이미지에서 YOLO-세계 모델을 사용한 객체 추적은 다음과 같이 간소화되었습니다:

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")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video/file.mp4"

참고

Ultralytics 에서 제공하는 YOLO-World 모델은 오프라인 어휘의 일부로 COCO 데이터 세트 카테고리가 사전 구성되어 있어 즉시 적용할 수 있도록 효율성을 높입니다. 이러한 통합을 통해 YOLOv8-World 모델은 추가 설정이나 사용자 지정 없이도 COCO 데이터세트에 정의된 80개의 표준 카테고리를 직접 인식하고 예측할 수 있습니다.

프롬프트 설정

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

The YOLO-World framework allows for the dynamic specification of classes through custom prompts, empowering users to tailor the model to their specific needs without retraining. This feature is particularly useful for adapting the model to new domains or specific tasks that were not originally part of the training data. By setting custom prompts, users can essentially guide the model's focus towards objects of interest, enhancing the relevance and accuracy of the detection results.

예를 들어, 애플리케이션에서 '사람'과 '버스' 객체만 감지해야 하는 경우 이러한 클래스를 직접 지정할 수 있습니다:

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

사용자 정의 클래스를 설정한 후 모델을 저장할 수도 있습니다. 이렇게 하면 특정 사용 사례에 특화된 YOLO-World 모델 버전을 만들 수 있습니다. 이 프로세스는 사용자 지정 클래스 정의를 모델 파일에 직접 포함하므로 추가 조정 없이 지정한 클래스에서 모델을 사용할 수 있습니다. 사용자 지정 YOLOv8 모델을 저장하고 로드하려면 다음 단계를 따르세요:

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

사용자 지정 어휘를 통한 저장의 이점

  • 효율성: 관련 객체에 집중하고 계산 오버헤드를 줄이며 추론 속도를 높여 탐지 프로세스를 간소화합니다.
  • 유연성: 광범위한 재교육이나 데이터 수집 없이도 새로운 또는 틈새 탐지 작업에 모델을 쉽게 적용할 수 있습니다.
  • 단순성: 런타임에 사용자 지정 클래스를 반복적으로 지정할 필요가 없어 배포가 간소화되며, 내장된 어휘로 모델을 바로 사용할 수 있습니다.
  • Performance: Enhances detection accuracy for specified classes by focusing the model's attention and resources on recognizing the defined objects.

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

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

데이터 집합 준비

  • 데이터 훈련
데이터 세트유형샘플상자주석 파일
오브젝트365v1탐지609k9621kobjects365_train.json
GQA접지621k3681kfinal_mixed_train_no_coco.json
Flickr30k접지149k641kfinal_flickr_separateGT_train.json
  • Val 데이터
데이터 세트유형주석 파일
LVIS 미니밴탐지minival.txt

처음부터 교육 시작

참고

WorldTrainerFromScratch 는 탐지 데이터 세트와 접지 데이터 세트 모두에서 동시에 yolo-world 모델을 학습할 수 있도록 고도로 맞춤화되어 있습니다. 자세한 내용은 다음을 확인하세요. ultralytics.model.yolo.world.train_world.py.

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

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)

인용 및 감사

실시간 개방형 어휘 객체 감지( YOLO-World)를 통해 선구적인 작업을 수행한 Tencent AILab 컴퓨터 비전 센터에 감사를 표합니다:

@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 리포지토리를 통해 액세스할 수 있습니다. 이 분야를 발전시키고 귀중한 인사이트를 커뮤니티와 공유하려는 이들의 노력에 감사드립니다.

자주 묻는 질문

YOLO-World 모델이란 무엇이며 어떻게 작동하나요?

YOLO-World 모델은 프레임워크에 기반한 고급 실시간 객체 감지 접근 방식입니다. Ultralytics YOLOv8 프레임워크에 기반한 고급 실시간 객체 감지 방식입니다. 설명 텍스트를 기반으로 이미지 내의 객체를 식별하여 개방형 어휘 감지 작업에 탁월한 성능을 발휘합니다. 비전 언어 모델링과 대규모 데이터 세트에 대한 사전 학습을 사용하는 YOLO-World는 계산 요구 사항을 크게 줄이면서 높은 효율성과 성능을 달성하여 다양한 산업 분야의 실시간 애플리케이션에 이상적입니다.

YOLO-World는 사용자 지정 프롬프트에서 추론을 어떻게 처리하나요?

YOLO-World supports a "prompt-then-detect" strategy, which utilizes an offline vocabulary to enhance efficiency. Custom prompts like captions or specific object categories are pre-encoded and stored as offline vocabulary embeddings. This approach streamlines the detection process without the need for retraining. You can dynamically set these prompts within the model to tailor it to specific detection tasks, as shown below:

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 모델을 제공합니다:

모델 유형사전 학습된 가중치지원되는 작업추론유효성 검사교육내보내기
YOLOv8s-세계yolov8s-world.pt물체 감지
YOLOv8s-worldv2yolov8s-worldv2.pt물체 감지
YOLOv8m-세계yolov8m-world.pt물체 감지
YOLOv8m-worldv2yolov8m-worldv2.pt물체 감지
YOLOv8l-세계yolov8l-world.pt물체 감지
YOLOv8l-worldv2yolov8l-worldv2.pt물체 감지
YOLOv8x-세계yolov8x-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": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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)
📅 Created 8 months ago ✏️ Updated 6 days ago

댓글