YOLO-World 모델
YOLO-World 모델은 Open-Vocabulary 감지 작업을 위한 고급 실시간 Ultralytics YOLOv8 기반 접근 방식을 도입합니다. 이 혁신 기술은 설명 텍스트를 기반으로 이미지 내의 모든 객체를 감지할 수 있도록 합니다. YOLO-World는 경쟁력 있는 성능을 유지하면서 계산 요구 사항을 크게 낮춤으로써 다양한 비전 기반 애플리케이션을 위한 다용도 도구로 부상하고 있습니다.
참고: 커스텀 데이터셋에서 YOLO World 학습 워크플로우
개요
YOLO-World는 기존의 Open-Vocabulary 감지 모델이 가진 어려움을 해결합니다. 이러한 모델은 종종 많은 컴퓨팅 자원을 필요로 하는 번거로운 Transformer 모델에 의존합니다. 또한, 미리 정의된 객체 범주에 대한 의존성은 역동적인 시나리오에서의 활용성을 제한합니다. YOLO-World는 vision-language modeling을 채택하고 광범위한 데이터셋에 대한 사전 학습을 통해 YOLOv8 프레임워크를 오픈 어휘 감지 기능으로 활성화하여, 비할 데 없는 효율성으로 제로샷 시나리오에서 광범위한 객체를 식별하는 데 탁월합니다.
주요 기능
-
실시간 솔루션: 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 명령어를 제공합니다.
학습 사용법
팁
다음 모델을 사용하는 것이 좋습니다. yolov8-worldv2
결정적 훈련을 지원하고 onnx/tensorrt와 같은 다른 형식으로 내보내기도 쉬우므로 사용자 지정 훈련에 적합합니다.
객체 감지는 다음을 통해 간단하게 수행할 수 있습니다. train
아래 예시에서 볼 수 있듯이 method를 사용하면 됩니다.
예시
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 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
아래 예시에서 볼 수 있듯이 method를 사용하면 됩니다.
예시
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-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")
# 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.mp4"
참고
Ultralytics에서 제공하는 YOLO-World 모델은 오프라인 어휘의 일부로 COCO 데이터 세트 범주로 미리 구성되어 있어 즉각적인 적용에 대한 효율성을 향상시킵니다. 이러한 통합을 통해 YOLOv8-World 모델은 추가 설정이나 사용자 정의 없이 COCO 데이터 세트에 정의된 80개의 표준 범주를 직접 인식하고 예측할 수 있습니다.
프롬프트 설정
YOLO-World 프레임워크는 사용자 정의 프롬프트를 통해 클래스를 동적으로 지정할 수 있어 사용자가 재학습 없이 특정 요구 사항에 맞게 모델을 조정할 수 있습니다. 이 기능은 모델을 새로운 도메인이나 원래 학습 데이터에 포함되지 않았던 특정 작업에 적용하는 데 특히 유용합니다. 사용자 정의 프롬프트를 설정함으로써 사용자는 기본적으로 모델의 초점을 관심 객체로 유도하여 감지 결과의 관련성과 정확성을 향상시킬 수 있습니다.
예를 들어 애플리케이션에서 '사람' 및 '버스' 객체만 감지해야 하는 경우 이러한 클래스를 직접 지정할 수 있습니다.
예시
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()
사용자 지정 어휘로 저장할 때의 이점
- 효율성: 관련 객체에 집중하여 감지 프로세스를 간소화하고, 컴퓨팅 오버헤드를 줄이며, 추론 속도를 높입니다.
- 유연성: 광범위한 재학습 또는 데이터 수집 없이도 모델을 새로운 또는 틈새 감지 작업에 쉽게 적용할 수 있습니다.
- 단순성: 런타임에 사용자 정의 클래스를 반복적으로 지정할 필요 없이 모델을 임베디드 어휘와 함께 직접 사용할 수 있도록 하여 배포를 간소화합니다.
- 성능: 모델의 관심과 리소스를 정의된 객체 인식에 집중시켜 특정 클래스에 대한 감지 정확도를 향상시킵니다.
이 방법은 특정 작업에 맞게 최첨단 객체 감지 모델을 사용자 지정할 수 있는 강력한 수단을 제공하여 고급 AI를 보다 광범위한 실제 애플리케이션에 더 쉽게 접근하고 적용할 수 있도록 합니다.
처음부터 공식 결과 재현(실험적)
데이터 세트 준비
- 학습 데이터
데이터세트 | 유형 | 샘플 | 상자 | 어노테이션 파일 |
---|---|---|---|---|
Objects365v1 | 객체 탐지 | 609k | 9621k | objects365_train.json |
GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Val 데이터
데이터세트 | 유형 | 어노테이션 파일 |
---|---|---|
LVIS minival | 객체 탐지 | minival.txt |
처음부터 학습 시작
참고
WorldTrainerFromScratch
detection 데이터 세트와 grounding 데이터 세트 모두에서 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="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"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, 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 저장소를 통해 액세스할 수 있습니다. 이 분야를 발전시키고 귀중한 통찰력을 커뮤니티와 공유하려는 그들의 노력에 감사드립니다.
FAQ
YOLO-World 모델이란 무엇이며 어떻게 작동합니까?
YOLO-World 모델은 Ultralytics YOLOv8 프레임워크를 기반으로 하는 고급 실시간 객체 감지 방식입니다. 설명적인 텍스트를 기반으로 이미지 내의 객체를 식별하여 Open-Vocabulary Detection 작업에서 뛰어난 성능을 보입니다. 시각-언어 모델링과 대규모 데이터 세트에 대한 사전 훈련을 통해 YOLO-World는 계산 요구 사항을 크게 줄이면서 높은 효율성과 성능을 달성하여 다양한 산업 분야의 실시간 애플리케이션에 이상적입니다.
YOLO-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()
기존의 Open-Vocabulary 감지 모델 대신 YOLO-World를 선택해야 하는 이유는 무엇입니까?
YOLO-World는 기존의 Open-Vocabulary 감지 모델에 비해 다음과 같은 여러 가지 장점을 제공합니다.
- 실시간 성능: CNN의 계산 속도를 활용하여 빠르고 효율적인 감지를 제공합니다.
- 효율성 및 낮은 리소스 요구 사항: YOLO-World는 계산 및 리소스 요구 사항을 크게 줄이면서도 높은 성능을 유지합니다.
- 사용자 정의 가능한 프롬프트: 이 모델은 동적 프롬프트 설정을 지원하므로 사용자는 재학습 없이 사용자 정의 감지 클래스를 지정할 수 있습니다.
- 벤치마크 우수성: 표준 벤치마크에서 속도와 효율성 모두에서 MDETR 및 GLIP와 같은 다른 open-vocabulary detector보다 뛰어난 성능을 보입니다.
내 데이터 세트에서 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-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 | 객체 감지 | ✅ | ✅ | ✅ | ✅ |
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)