YOLO-World Modeli
YOLO-World Modeli, Açık Kelime Dağarcığı (Open-Vocabulary) Algılama görevleri için gelişmiş, gerçek zamanlı Ultralytics YOLOv8 tabanlı bir yaklaşım sunar. Bu yenilik, herhangi bir nesnenin tanımlayıcı metinler aracılığıyla bir görüntü içinde algılanmasını sağlar. Hesaplama gereksinimlerini önemli ölçüde düşürürken rekabetçi performansı koruyan YOLO-World, görüntü tabanlı çok sayıda uygulama için çok yönlü bir araç olarak öne çıkar.
Watch: YOLO World training workflow on custom dataset

Genel Bakış
YOLO-World, genellikle büyük hesaplama kaynakları gerektiren hantal Transformer modellerine dayanan geleneksel Açık Kelime Dağarcığı algılama modellerinin karşılaştığı zorlukları ele alır. Bu modellerin önceden tanımlanmış nesne kategorilerine olan bağımlılığı, dinamik senaryolardaki kullanışlılıklarını da kısıtlar. YOLO-World, vizyon-dil modelleme tekniklerini ve kapsamlı veri setleri üzerinde ön eğitim süreçlerini kullanarak, YOLOv8 çerçevesini açık kelime dağarcığı algılama yetenekleriyle yeniden canlandırır ve sıfır-shot (zero-shot) senaryolarında nesneleri benzersiz bir verimlilikle tanımlamada mükemmelleşir.
Temel Özellikler
-
Gerçek Zamanlı Çözüm: CNN'lerin hesaplama hızından yararlanan YOLO-World, acil sonuçlara ihtiyaç duyan endüstrilere hizmet eden hızlı bir açık kelime dağarcığı algılama çözümü sunar.
-
Verimlilik ve Performans: YOLO-World, performanstan ödün vermeden hesaplama ve kaynak gereksinimlerini düşürerek, SAM gibi modellere kıyasla çok daha düşük hesaplama maliyetiyle güçlü bir alternatif sunar ve gerçek zamanlı uygulamalara olanak tanır.
-
Çevrimdışı Kelime Dağarcığı ile Çıkarım: YOLO-World, verimliliği daha da artırmak için çevrimdışı bir kelime dağarcığı kullanan bir "önce sor, sonra algıla" stratejisi sunar. Bu yaklaşım, altyazılar veya kategoriler dahil olmak üzere önceden hesaplanmış özel istemlerin (prompt), çevrimdışı kelime dağarcığı yerleştirmeleri (embeddings) olarak kodlanmasını ve saklanmasını sağlayarak algılama sürecini hızlandırır.
-
YOLOv8 Gücü: Ultralytics YOLOv8 üzerine inşa edilen YOLO-World, gerçek zamanlı nesne algılamadaki en son gelişmeleri kullanarak açık kelime dağarcığı algılamasını benzersiz bir doğruluk ve hızla gerçekleştirir.
-
Kıyaslama Mükemmelliği: YOLO-World, tek bir NVIDIA V100 GPU üzerinde YOLOv8'in üstün yeteneğini sergileyerek, standart kıyaslamalarda (benchmarks) MDETR ve GLIP serisi de dahil olmak üzere mevcut açık kelime dağarcığı dedektörlerinden daha iyi hız ve verimlilik performansı gösterir.
-
Çok Yönlü Uygulamalar: YOLO-World'ün yenilikçi yaklaşımı, mevcut yöntemlere göre hız bazında katbekat iyileştirmeler sunarak çok sayıda görüntü görevi için yeni olasılıkların önünü açar.
Mevcut Modeller, Desteklenen Görevler ve Çalışma Modları
Bu bölüm, mevcut önceden eğitilmiş ağırlıklarıyla sunulan modelleri, destekledikleri görevleri ve Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi çeşitli çalışma modlarıyla uyumluluklarını detaylandırır; burada desteklenen modlar ✅, desteklenmeyenler ise ❌ ile gösterilmiştir.
Tüm YOLOv8-World ağırlıkları doğrudan resmi YOLO-World deposundan taşınmıştır, bu da onların mükemmel katkılarını vurgulamaktadır.
| Model Tipi | Önceden Eğitilmiş Ağırlıklar | Desteklenen Görevler | Çıkarım | Doğrulama | Eğitim | Dışa Aktar (Export) |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
COCO Veri Setinde Sıfır-shot (Zero-shot) Aktarım
| Model Tipi | 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 |
Kullanım Örnekleri
YOLO-World modellerini Python uygulamalarına entegre etmek kolaydır. Ultralytics, geliştirmeyi kolaylaştırmak için kullanıcı dostu Python API ve CLI komutları sunar.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Eğitim Kullanımı
Özel eğitim için yolov8-worldv2 modelini kullanmanı şiddetle öneririz, çünkü bu model deterministik eğitimi destekler ve ayrıca onnx/tensorrt gibi diğer formatlara kolayca dışa aktarılabilir.
Nesne algılama, aşağıda gösterildiği gibi train yöntemiyle oldukça basittir:
PyTorch önceden eğitilmiş *.pt modellerinin yanı sıra yapılandırma *.yaml dosyaları da Python'da bir model örneği oluşturmak için YOLOWorld() sınıfına aktarılabilir:
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")Tahmin (Predict) Kullanımı
Nesne algılama, aşağıda gösterildiği gibi predict yöntemiyle oldukça basittir:
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()Bu kod parçası, önceden eğitilmiş bir modeli yüklemenin ve bir görüntü üzerinde tahmin çalıştırmanın basitliğini gösterir.
Doğrulama (Val) Kullanımı
Bir veri seti üzerinde model doğrulaması şu şekilde kolaylaştırılmıştır:
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")Takip (Track) Kullanımı
Bir video/görüntü üzerinde YOLO-World modeli ile Nesne takibi şu şekilde kolaylaştırılmıştır:
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 tarafından sağlanan YOLO-World modelleri, çevrimdışı kelime dağarcıklarının bir parçası olarak COCO veri seti kategorileriyle önceden yapılandırılmış olarak gelir ve anında uygulama için verimliliği artırır. Bu entegrasyon, YOLOv8-World modellerinin ek bir kurulum veya özelleştirme gerektirmeden COCO veri setinde tanımlanan 80 standart kategoriyi doğrudan tanımasını ve tahmin etmesini sağlar.
İstemleri (Prompts) ayarla

YOLO-World çerçevesi, sınıfların özel istemler aracılığıyla dinamik olarak belirtilmesine izin vererek, kullanıcıların modeli yeniden eğitmeye gerek kalmadan kendi özel ihtiyaçlarına göre uyarlamalarını sağlar. Bu özellik, özellikle modeli başlangıçta eğitim verisinin bir parçası olmayan yeni alanlara veya belirli görevlere uyarlamak için yararlıdır. Kullanıcılar, özel istemler ayarlayarak modelin odağını temel olarak ilgilenilen nesnelere yönlendirebilir, böylece algılama sonuçlarının uygunluğunu ve doğruluğunu artırabilirler.
Örneğin, uygulaman sadece 'kişi' ve 'otobüs' nesnelerini algılamayı gerektiriyorsa, bu sınıfları doğrudan belirtebilirsin:
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()Bazı kullanıcılar, arka plan sınıfı olarak boş bir dize "" eklemenin belirli senaryolarda algılama performansını artırabildiğini keşfetti. Bu davranış senaryoya bağlı görünüyor ve kesin mekanizması tam olarak anlaşılamamıştır:
model.set_classes(["person", "bus", ""])Özel sınıfları ayarladıktan sonra bir modeli kaydedebilirsin. Bunu yaparak, senin özel kullanım durumun için uzmanlaşmış bir YOLO-World modeli versiyonu oluşturursun. Bu işlem, özel sınıf tanımlarını doğrudan model dosyasına gömer ve modeli, daha fazla ayar yapmaya gerek kalmadan belirttiğin sınıflarla kullanıma hazır hale getirir. Özel YOLO-World modelini kaydetmek ve yüklemek için şu adımları izle:
Önce bir YOLO-World modeli yükle, onun için özel sınıfları ayarla ve kaydet:
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")Kaydettikten sonra, custom_yolov8s.pt modeli diğer tüm önceden eğitilmiş YOLOv8 modelleri gibi davranır, ancak önemli bir farkla: artık sadece tanımladığın sınıfları algılamak için optimize edilmiştir. Bu özelleştirme, belirli uygulama senaryoların için algılama performansını ve verimliliğini önemli ölçüde artırabilir.
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()Özel Kelime Dağarcığı ile Kaydetmenin Avantajları
- Verimlilik: İlgili nesnelere odaklanarak algılama sürecini kolaylaştırır, hesaplama yükünü azaltır ve çıkarımı hızlandırır.
- Esneklik: Modelin, kapsamlı yeniden eğitime veya veri toplamaya gerek kalmadan yeni veya niş algılama görevlerine kolayca uyarlanmasına olanak tanır.
- Basitlik: Çalışma zamanında özel sınıfları tekrar tekrar belirtme ihtiyacını ortadan kaldırarak dağıtımı basitleştirir ve modeli gömülü kelime dağarcığıyla doğrudan kullanılabilir hale getirir.
- Performans: Modelin dikkatini ve kaynaklarını tanımlanan nesneleri tanımaya odaklayarak belirtilen sınıflar için algılama doğruluğunu artırır.
Bu yaklaşım, en son teknoloji nesne algılama modellerini belirli görevler için özelleştirmenin güçlü bir yolunu sunarak, gelişmiş yapay zekayı daha erişilebilir ve çok daha geniş pratik uygulama alanlarına uygulanabilir kılar.
Resmi sonuçları sıfırdan üret (Deneysel)
Veri setlerini hazırla
- Eğitim verisi
| Veri Kümesi | Tür | Örnekler | Boxes | Ek Açıklama (Annotation) Dosyaları |
|---|---|---|---|---|
| Objects365v1 | Algılama | 609k | 9621k | objects365_train.json |
| GQA | Temellendirme (Grounding) | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Temellendirme | 149k | 641k | final_flickr_separateGT_train.json |
- Doğrulama (Val) verisi
| Veri Kümesi | Tür | Ek Açıklama (Annotation) Dosyaları |
|---|---|---|
| LVIS minival | Algılama | minival.txt |
Sıfırdan eğitimi başlat
WorldTrainerFromScratch, yolo-world modellerinin hem tespit veri setleri hem de temellendirme (grounding) veri setleri üzerinde aynı anda eğitilmesine olanak tanımak üzere özel olarak özelleştirilmiştir. Daha fazla detay için lütfen ultralytics.model.yolo.world.train_world.py dosyasını incele.
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,
)Alıntılar ve Teşekkür
Gerçek zamanlı açık sözcüklü nesne tespiti konusundaki öncü çalışmaları için Tencent AILab Computer Vision Center ekibine minnettarız:
@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}
}Daha fazla okuma için orijinal YOLO-World makalesi arXiv üzerinde mevcuttur. Projenin kaynak koduna ve ek kaynaklara GitHub repository üzerinden erişilebilir. Alanın ilerlemesine olan bağlılıkları ve değerli içgörülerini toplulukla paylaştıkları için onlara teşekkür ederiz.
SSS
YOLO-World modeli nedir ve nasıl çalışır?
YOLO-World modeli, Ultralytics YOLOv8 altyapısını temel alan gelişmiş ve gerçek zamanlı bir nesne tespiti yaklaşımıdır. Görüntü içindeki nesneleri açıklayıcı metinlere dayanarak tanımlayarak Açık Sözcüklü Tespit (Open-Vocabulary Detection) görevlerinde üstünlük sağlar. Görme-dil modellemesi ve büyük veri setleri üzerinde ön eğitimden yararlanan YOLO-World, hesaplama gereksinimlerini önemli ölçüde azaltarak yüksek verimlilik ve performans elde eder, bu da onu çeşitli endüstrilerdeki gerçek zamanlı uygulamalar için ideal kılar.
YOLO-World özel istemlerle (prompts) çıkarımı nasıl yönetir?
YOLO-World, verimliliği artırmak için çevrimdışı bir sözlükten yararlanan "önce istemle, sonra tespit et" stratejisini destekler. Açıklamalar veya belirli nesne kategorileri gibi özel istemler, çevrimdışı sözlük embeddings (gömme) olarak önceden kodlanır ve saklanır. Bu yaklaşım, yeniden eğitime ihtiyaç duymadan tespit sürecini basitleştirir. Aşağıda gösterildiği gibi, modeli belirli tespit görevlerine göre uyarlamak için bu istemleri dinamik olarak ayarlayabilirsin:
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()Neden geleneksel Açık Sözcüklü tespit modelleri yerine YOLO-World'ü seçmeliyim?
YOLO-World, geleneksel Açık Sözcüklü tespit modellerine göre birçok avantaj sağlar:
- Gerçek Zamanlı Performans: Hızlı ve verimli tespit sunmak için CNN'lerin hesaplama hızından yararlanır.
- Verimlilik ve Düşük Kaynak Gereksinimi: YOLO-World, yüksek performansı korurken hesaplama ve kaynak gereksinimlerini önemli ölçüde düşürür.
- Özelleştirilebilir İstemler: Model, dinamik istem ayarını destekler; böylece yeniden eğitime gerek kalmadan özel tespit sınıflarını belirleyebilirsin.
- Benchmark Mükemmelliği: Standart benchmarklarda hem hız hem de verimlilik açısından MDETR ve GLIP gibi diğer açık sözcüklü tespit edicilerden daha iyi performans gösterir.
Kendi veri setim üzerinde YOLO-World modelini nasıl eğitirim?
Kendi veri setin üzerinde YOLO-World modelini eğitmek, sağlanan Python API'si veya CLI komutları sayesinde oldukça kolaydır. İşte Python kullanarak eğitime nasıl başlayacağın:
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)Veya CLI kullanarak:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Mevcut önceden eğitilmiş YOLO-World modelleri ve destekledikleri görevler nelerdir?
Ultralytics, çeşitli görevleri ve çalışma modlarını destekleyen birçok önceden eğitilmiş YOLO-World modeli sunar:
| Model Tipi | Önceden Eğitilmiş Ağırlıklar | Desteklenen Görevler | Çıkarım | Doğrulama | Eğitim | Dışa Aktar (Export) |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Nesne Tespiti | ✅ | ✅ | ✅ | ✅ |
YOLO-World'ün resmi sonuçlarını sıfırdan nasıl yeniden üretebilirim?
Resmi sonuçları sıfırdan yeniden üretmek için veri setlerini hazırlaman ve sağlanan kodla eğitimi başlatman gerekir. Eğitim prosedürü, bir veri sözlüğü oluşturmayı ve özel bir eğitici (trainer) ile train metodunu çalıştırmayı içerir:
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)