YOLO-World Modeli#
YOLO-World Modeli, Açık Sözcük Dağarcığı Tespiti (Open-Vocabulary Detection) görevleri için gelişmiş, gerçek zamanlı Ultralytics YOLOv8 tabanlı bir yaklaşım sunar. Bu yenilik, açıklayıcı metinlere dayanarak bir görüntü içindeki herhangi bir nesnenin tespit edilmesini sağlar. Rekabetçi performansını korurken hesaplama gereksinimlerini önemli ölçüde azaltan YOLO-World, çok sayıda görme tabanlı uygulama için çok yönlü bir araç olarak öne çıkar.
Watch: YOLO World training workflow on custom dataset

Genel Bakış#
YOLO-World, genellikle yoğun hesaplama kaynakları gerektiren hantal Transformer modellerine güvenen geleneksel Açık Sözcük Dağarcığı tespiti modellerinin karşılaştığı zorlukların üstesinden gelir. Bu modellerin önceden tanımlanmış nesne kategorilerine olan bağımlılığı da dinamik senaryolardaki faydalarını kısıtlar. YOLO-World, görme-dil modellemesi kullanarak ve kapsamlı veri kümeleri üzerinde ön eğitim alarak YOLOv8 çerçevesini açık sözcük dağarcığı tespiti yetenekleriyle yeniden canlandırır ve sıfır vuruşlu (zero-shot) senaryolarda eşsiz bir verimlilikle geniş bir nesne dizisini tanımlamada mükemmelleşir.
Örnek maskeleri, görsel ipuçları veya ipucu gerektirmeyen bir mod da gerektiren açık kelime dağarcığı çalışmaları için, aynı set_classes() API'sini koruyan YOLOE adresine göz at.
Temel Özellikler#
-
Gerçek Zamanlı Çözüm: CNN'lerin hesaplama hızından yararlanan YOLO-World, anlık sonuçlara ihtiyaç duyan sektörlere hitap eden hızlı bir açık sözcüklü tespit çözümü sunar.
-
Verimlilik ve Performans: YOLO-World, performanstan ödün vermeden hesaplama ve kaynak gereksinimlerini düşürür; SAM gibi modellere kıyasla hesaplama maliyetinin sadece bir kısmıyla gerçek zamanlı uygulamalara olanak tanıyan sağlam bir alternatif sunar.
-
Çevrimdışı Sözlük ile Çıkarım: YOLO-World, verimliliği daha da artırmak için çevrimdışı bir sözlük kullanan bir "önce sor, sonra tespit et" stratejisi sunar. Bu yaklaşım, altyazılar veya kategoriler dahil olmak üzere önceden hesaplanmış özel komutların (prompt) kodlanıp çevrimdışı sözlük gömmeleri (embeddings) olarak saklanmasını sağlayarak tespit sürecini kolaylaştırır.
-
YOLOv8 Destekli: Ultralytics YOLOv8 üzerine inşa edilen YOLO-World, benzersiz bir doğruluk ve hızla açık sözcük dağarcığı tespitini kolaylaştırmak için gerçek zamanlı nesne tespitindeki en son gelişmelerden yararlanır.
-
Kıyaslama Mükemmelliği: YOLO-World, standart kıyaslamalarda (benchmark) hız ve verimlilik açısından MDETR ve GLIP serisi dahil olmak üzere mevcut açık sözcüklü tespit edicileri geride bırakır ve YOLOv8'in tek bir NVIDIA V100 GPU üzerindeki üstün yeteneğini sergiler.
-
Çok Yönlü Uygulamalar: YOLO-World'ün yenilikçi yaklaşımı, mevcut yöntemlere göre hızda katbekat iyileşmeler sunarak çok sayıda görüntü görevi için yeni olasılıkların kapısını aralar.
Mevcut Modeller, Desteklenen Görevler ve Çalışma Modları#
Bu bölümde, belirli ön eğitilmiş (pretrained) ağırlıklarıyla birlikte sunulan modeller, destekledikleri görevler ve desteklenen modlar için ✅ ve desteklenmeyen modlar için ❌ ile belirtilen Çıkarım (Inference), Doğrulama (Validation), Eğitim (Training) ve Dışa Aktarma (Export) gibi çeşitli çalışma modlarıyla uyumlulukları ayrıntılı olarak ele alınmaktadır.
Tüm YOLOv8-World ağırlıkları, mükemmel katkılarını vurgulayarak resmi YOLO-World deposundan doğrudan taşınmıştır.
| Model Tipi | Önceden Eğitilmiş Ağırlıklar | Desteklenen Görevler | Eğitim | Doğrulama | Çıkarım | Dışa Aktar (Export) |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Nesne Algılama | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Nesne Algılama | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Nesne Algılama | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Nesne Algılama | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Nesne Algılama | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Nesne Algılama | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Nesne Algılama | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Nesne Algılama | ✅ | ✅ | ✅ | ✅ |
COCO Veri Setinde Sıfır-Atış (Zero-shot) Transferi#
| 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 modellerinin Python uygulamalarına entegre edilmesi kolaydır. Ultralytics, geliştirmeyi kolaylaştırmak için kullanıcı dostu Python API ve CLI komutları sağlar.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Eğitim Kullanımı#
Özel eğitim için yolov8-worldv2 kullanmanı şiddetle tavsiye ederiz, çünkü deterministik eğitimi destekler ve ONNX ile TensorRT gibi formatlara daha kolay aktarım sağlar.
Aşağıda gösterildiği gibi, train yöntemi ile nesne tespiti yapmak oldukça basittir:
Python'da bir model örneği oluşturmak için PyTorch ön eğitilmiş *.pt modellerinin yanı sıra *.yaml yapılandırma dosyaları da YOLOWorld() sınıfına geçirilebilir:
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 Kullanımı#
Aşağıda gösterildiği gibi, predict yöntemi ile nesne tespiti yapmak 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çacığı, önceden eğitilmiş bir modeli yüklemenin ve bir görüntü üzerinde tahmin çalıştırmanın basitliğini göstermektedir.
Doğrulama Kullanımı#
Bir veri setinde model doğrulama işlemi ş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 Kullanımı#
Bir video/görüntü üzerinde YOLO-World modeliyle nesne takibi şu şekilde basitleştirilmiştir:
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, anında uygulama için verimliliği artıran çevrimdışı sözcük dağarcığının bir parçası olarak COCO dataset kategorileriyle önceden yapılandırılmış olarak gelir. Bu entegrasyon, YOLOv8-World modellerinin ek bir kurulum veya özelleştirme gerektirmeden COCO dataset içinde tanımlanan 80 standart kategoriyi doğrudan tanımasına ve tahmin etmesine olanak tanır.
Komutları (prompt) ayarla#

YOLO-World çerçevesi, özel komut istemleri (prompts) aracılığıyla sınıfların dinamik olarak belirlenmesine izin vererek kullanıcıların modeli yeniden eğitmeden kendi özel ihtiyaçlarına göre uyarlamasını sağlar. Bu özellik, modeli orijinal olarak eğitim verilerinin bir parçası olmayan yeni alanlara veya belirli görevlere uyarlamak için özellikle yararlıdır. Kullanıcılar özel komut istemleri belirleyerek modelin odak noktasını esasen ilgi çekici nesnelere yönlendirebilir, tespit sonuçlarının ilgisini ve doğruluğunu artırabilir.
Örneğin, uygulamanız yalnızca 'kişi' ve 'otobüs' nesnelerini tespit etmeyi gerektiriyorsa, bu sınıfları doğrudan belirtebilirsiniz:
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 "" dizesi eklemenin belirli senaryolarda tespit performansını artırabileceğini fark etmiştir. Bu davranış senaryoya bağlı görünmektedir ve tam mekanizma tam olarak anlaşılamamıştır:
model.set_classes(["person", "bus", ""])Özel sınıfları belirledikten sonra bir modeli de kaydedebilirsiniz. Bunu yaparak, özel kullanım durumunuz için özelleştirilmiş bir YOLO-World modeli sürümü oluşturursunuz. Bu işlem, özel sınıf tanımlarınızı doğrudan model dosyasına gömer ve modeli, başka ayarlamalar yapmadan belirttiğiniz sınıflarla kullanıma hazır hale getirir. Özel YOLO-World modelinizi kaydetmek ve yüklemek için şu adımları izleyin:
Önce bir YOLO-World modelini yükleyin, onun için özel sınıfları ayarlayın ve kaydedin:
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 yalnızca tanımladığınız sınıfları tespit etmek için optimize edilmiştir. Bu özelleştirme, belirli uygulama senaryolarınız için tespit 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 Sözlükle Kaydetmenin Avantajları#
- Verimlilik: İlgili nesnelere odaklanarak tespit sürecini kolaylaştırır, hesaplama yükünü azaltır ve çıkarımı hızlandırır.
- Esneklik: Kapsamlı yeniden eğitim veya veri toplama ihtiyacı duymadan modelin yeni veya niş tespit görevlerine kolayca uyarlanmasını sağlar.
- Basitlik: Çalışma zamanında özel sınıfları tekrar tekrar belirtme ihtiyacını ortadan kaldırarak dağıtımı basitleştirir ve modelin gömülü sözlüğüyle doğrudan kullanılabilir olmasını sağlar.
- Performans: Modelin dikkatini ve kaynaklarını tanımlanan nesneleri tanımaya odaklayarak belirtilen sınıflar için tespit doğruluğunu artırır.
Bu yaklaşım, son teknoloji nesne tespiti modellerini belirli görevler için özelleştirmek için güçlü bir araç sunar ve gelişmiş yapay zekayı daha erişilebilir hale getirerek daha geniş bir pratik uygulama yelpazesine uygulanabilir kılar.
Resmi sonuçları sıfırdan üretin (Deneysel)#
Veri setlerini hazırlayın#
- Eğitim verisi
| Veri Seti | Tip | Örnekler | Kutular | Açıklama Dosyaları |
|---|---|---|---|---|
| Objects365v1 | Tespit | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Doğrulama verisi
| Veri Seti | Tip | Açıklama Dosyaları |
|---|---|---|
| LVIS minival | Tespit | minival.txt |
Sıfırdan eğitimi başlat#
WorldTrainerFromScratch, yolo-world modellerini hem tespit veri kümelerinde hem de zeminleme (grounding) veri kümelerinde aynı anda eğitmenize izin verecek şekilde yüksek düzeyde özelleştirilmiştir. Daha fazla detay için bkz. 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,
)Alıntılar ve Teşekkür#
YOLO-World ile gerçek zamanlı açık sözcük dağarcıklı nesne tespiti alanındaki öncü çalışmaları için Tencent AILab Computer Vision Center merkezine şükranlarımızı sunarı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 deposu aracılığıyla erişilebilir. Alanı ilerletmeye ve değerli içgörülerini toplulukla paylaşmaya olan bağlılıkları için teşekkür ederiz.
SSS#
YOLO-World modeli, Ultralytics YOLOv8 çerçevesine dayanan gelişmiş, gerçek zamanlı bir nesne tespiti yaklaşımıdır. Açıklayıcı metinlere dayanarak bir görüntü içindeki nesneleri tanımlayarak Açık Sözcük Dağarcığı Tespiti görevlerinde mükemmeldir. Vizyon-dil modelleme ve büyük veri kümeleri üzerinde ön eğitim kullanan YOLO-World, önemli ölçüde azaltılmış hesaplama talepleriyle yüksek verimlilik ve performans elde ederek çeşitli endüstrilerdeki gerçek zamanlı uygulamalar için ideal hale gelir.
YOLO-World, verimliliği artırmak için çevrimdışı bir sözcük dağarcığı kullanan "önce komut istemi, sonra tespit" (prompt-then-detect) stratejisini destekler. Başlıklar veya belirli nesne kategorileri gibi özel komut istemleri önceden kodlanır ve çevrimdışı sözcük dağarcığı gömüleri (embeddings) olarak saklanır. Bu yaklaşım, yeniden eğitime gerek kalmadan tespit sürecini kolaylaştırır. Modeli belirli tespit görevlerine uyarlamak için aşağıda gösterildiği gibi bu komut istemlerini 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()YOLO-World, geleneksel Açık Kelimeli tespit modellerine göre çeşitli avantajlar sunar:
- 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, hesaplama ve kaynak taleplerini önemli ölçüde azaltırken yüksek performansı korur.
- Özelleştirilebilir Komutlar: Model, dinamik komut ayarını destekler ve kullanıcıların yeniden eğitim almadan özel tespit sınıfları belirlemesine olanak tanır.
- Kıyaslama Mükemmelliği: Standart kıyaslamalarda hem hız hem de verimlilik açısından MDETR ve GLIP gibi diğer açık kelimeli tespit edicilerden daha iyi performans gösterir.
Veri setin üzerinde bir YOLO-World modelini eğitmek, sağlanan Python API veya CLI komutları aracılığıyla oldukça basittir. İş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=640Ultralytics, çeşitli görevleri ve çalışma modlarını destekleyen birden fazla önceden eğitilmiş YOLO-World modeli sunar:
Model Tipi Önceden Eğitilmiş Ağırlıklar Desteklenen Görevler Eğitim Doğrulama Çıkarım Dışa Aktar (Export) YOLOv8s-world yolov8s-world.pt Nesne Algılama ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Nesne Algılama ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Nesne Algılama ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Nesne Algılama ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Nesne Algılama ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Nesne Algılama ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Nesne Algılama ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Nesne Algılama ✅ ✅ ✅ ✅ Resmi sonuçları sıfırdan yeniden üretebilmek için veri kümelerini hazırlaman ve sağlanan kodu kullanarak eğitimi başlatman gerekir. Eğitim prosedürü, bir veri sözlüğü oluşturmayı ve özel bir eğitmici (trainer) ile
trainyöntemini ç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)