YOLO-World Modeli#
YOLO-World Modeli, Açık Kelime Dağarcıklı Algılama 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üdeki herhangi bir nesnenin algılanmasını sağlar. Rekabetçi performansı korurken hesaplama gereksinimlerini önemli ölçüde azaltan YOLO-World, çok sayıda görüntü 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 kapsamlı hesaplama kaynakları gerektiren hantal Transformer modellerine dayanan geleneksel Açık Kelime Dağarcıklı algılama modellerinin karşılaştığı zorlukları ele alır. Bu modellerin önceden tanımlanmış nesne kategorilerine bağımlı olması, dinamik senaryolardaki kullanım alanlarını da kısıtlar. YOLO-World, açık kelime dağarcıklı algılama yetenekleriyle YOLOv8 çerçevesini yeniden güçlendirir; görsel-dil modelleme ve geniş veri kümeleri üzerinde ön eğitim kullanarak, sıfır örnekli senaryolarda çok çeşitli nesneleri eşi benzeri görülmemiş verimlilikle tanımlamada üstün performans gösterir.
Örnek maskelerine, görsel istemlere veya istemsiz bir moda da ihtiyaç duyan açık kelime dağarcığı çalışmaları için aynı set_classes() API'sini koruyan YOLOE modeline bak.
Temel Özellikler#
-
Gerçek zamanlı çözüm: YOLO-World, CNN'lerin hesaplama hızından yararlanarak anında sonuçlara ihtiyaç duyan sektörlere yönelik hızlı bir açık kelime dağarcıklı algılama çözümü sunar.
-
Verimlilik ve performans: YOLO-World, performanstan ödün vermeden hesaplama ve kaynak gereksinimlerini büyük ölçüde azaltır; SAM gibi modellere sağlam bir alternatif sunarken çok daha düşük hesaplama maliyetiyle gerçek zamanlı uygulamaları mümkün kılar.
-
Çevrimdışı kelime dağarcığıyla çıkarım: YOLO-World, verimliliği daha da artırmak için çevrimdışı bir kelime dağarcığı kullanan "önce istem ver, sonra algıla" stratejisini sunar. Bu yaklaşım; açıklamalar veya kategoriler dahil olmak üzere önceden hesaplanan özel istemlerin kodlanıp çevrimdışı kelime dağarcığı gömmeleri olarak depolanmasını sağlayarak algılama sürecini kolaylaştırır.
-
YOLOv8 tarafından desteklenir: Ultralytics YOLOv8 üzerine inşa edilen YOLO-World, açık kelime dağarcıklı algılamayı benzersiz doğruluk ve hızla mümkün kılmak için gerçek zamanlı nesne algılamadaki en yeni gelişmelerden yararlanır.
-
Kıyaslama üstünlüğü: YOLO-World, standart kıyaslamalarda hız ve verimlilik açısından MDETR ve GLIP serileri dahil olmak üzere mevcut açık kelime dağarcıklı algılayıcılardan daha iyi performans gösterir ve YOLOv8'in tek bir NVIDIA V100 GPU üzerindeki üstün yeteneğini ortaya koyar.
-
Çok yönlü uygulamalar: YOLO-World'ün yenilikçi yaklaşımı, çok sayıda görüntü işleme görevi için yeni olanaklar sunarak mevcut yöntemlere kıyasla katlar mertebesinde hız artışı sağlar.
Kullanılabilir Modeller, Desteklenen Görevler ve Çalışma Modları#
Bu bölümde, kendilerine özgü önceden eğitilmiş ağırlıklarıyla kullanılabilen modeller, destekledikleri görevler ve Çıkarım, Doğrulama, Eğitim ve Dışa aktarma gibi çeşitli çalışma modlarıyla uyumlulukları ayrıntılı olarak açıklanır; desteklenen modlar ✅, desteklenmeyen modlar ise ❌ ile gösterilir.
Tüm YOLOv8-World ağırlıkları doğrudan resmi YOLO-World deposundan aktarılmış olup, bu ağırlıkların mükemmel katkılarını öne çıkarır.
| Model Türü | Önceden Eğitilmiş Ağırlıklar | Desteklenen Görevler | Eğitim | Doğrulama | Çıkarım | Dışa aktarma |
|---|---|---|---|---|---|---|
| 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 Kümesi Üzerinde Sıfır Örnekli Aktarım#
| Model Türü | 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ştirme sürecini 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ı önemle tavsiye ederiz; çünkü bu araç deterministik eğitimi destekler ve ONNX ile TensorRT gibi biçimlere daha kolay dışa aktarım yapar.
Aşağıda gösterildiği gibi, train yöntemiyle nesne algılama kolayca gerçekleştirilebilir:
PyTorch önceden eğitilmiş *.pt modelleri ile yapılandırma *.yaml dosyaları, 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 Kullanımı#
Aşağıda gösterildiği gibi, predict yöntemiyle nesne algılama kolayca gerçekleştirilebilir:
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 ne kadar kolay olduğunu gösterir.
Doğrulama Kullanımı#
Bir veri kümesi üzerinde model doğrulama şu şekilde kolaylaştırılı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")İzleme Kullanımı#
YOLO-World modeliyle video/görüntüler üzerinde nesne takibi şu şekilde kolaylaştırılı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 kümesi kategorileriyle önceden yapılandırılmıştır; bu da anında kullanım için verimliliği artırır. Bu entegrasyon, YOLOv8-World modellerinin ek kurulum veya özelleştirme gerektirmeden COCO veri kümesinde tanımlanan 80 standart kategoriyi doğrudan tanımasını ve tahmin etmesini sağlar.
İstemleri ayarla#

YOLO-World çerçevesi, özel istemler aracılığıyla sınıfların dinamik olarak belirtilmesine olanak tanır ve yeniden eğitim olmadan modeli özel ihtiyaçlarına göre uyarlamanı sağlar. Bu özellik, modeli yeni alanlara veya başlangıçta eğitim verilerinin parçası olmayan belirli görevlere uyarlamak için özellikle kullanışlıdır. Özel istemler ayarlayarak modelin odağını ilgilenilen nesnelere yönlendirebilir, algılama sonuçlarının uygunluğunu ve doğruluğunu artırabilirsin.
Örneğin uygulaman yalnızca 'person' ve 'bus' 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 olan "" eklemenin belirli senaryolarda algılama performansını artırabildiğini gözlemlemiştir. Bu davranış senaryoya bağlı görünür ve kesin mekanizması tam olarak anlaşılmamıştır:
model.set_classes(["person", "bus", ""])Özel sınıfları ayarladıktan sonra bir modeli de kaydedebilirsin. Bunu yaparak belirli kullanım alanına özel bir YOLO-World modeli oluşturursun. Bu işlem, özel sınıf tanımlarını doğrudan model dosyasına gömer ve modelin başka ayarlamalara gerek kalmadan belirttiğin sınıflarla kullanıma hazır olmasını sağlar. Özel YOLO-World modelini kaydetmek ve yüklemek için şu adımları izle:
Önce bir YOLO-World modeli yükle, özel sınıfları ayarla ve modeli 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")Kaydedildikten sonra custom_yolov8s.pt modeli, önemli bir farkla diğer tüm önceden eğitilmiş YOLOv8 modelleri gibi davranır: artık yalnızca tanımladığın sınıfları algılamak üzere optimize edilmiştir. Bu özelleştirme, belirli uygulama senaryolarında 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ığıyla Kaydetmenin Faydaları#
- 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: Kapsamlı yeniden eğitim veya veri toplama gerektirmeden modeli yeni ya da niş algılama görevlerine kolayca uyarlamana olanak tanır.
- Basitlik: Çalışma zamanında özel sınıfları tekrar tekrar belirtme gereksinimini ortadan kaldırarak dağıtımı kolaylaştırır 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 yönelterek belirtilen sınıflar için algılama doğruluğunu artırır.
Bu yaklaşım, en gelişmiş nesne algılama modellerini belirli görevlere uyarlamak için güçlü bir yöntem sunar ve gelişmiş yapay zekâyı daha erişilebilir ve daha geniş bir pratik uygulama yelpazesinde kullanılabilir hale getirir.
Resmi sonuçları sıfırdan yeniden üretme (Deneysel)#
Veri kümelerini hazırla#
- Eğitim verileri
| Veri kümesi | Tür | Örnekler | Kutular | Açıklama Dosyaları |
|---|---|---|---|---|
| Objects365v1 | Algılama | 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 verileri
| Veri kümesi | Tür | Açıklama Dosyaları |
|---|---|---|
| LVIS minival | Algılama | minival.txt |
Eğitimi sıfırdan başlat#
WorldTrainerFromScratch, yolo-world modellerinin hem algılama veri kümeleri hem de grounding veri kümeleri üzerinde eş zamanlı olarak eğitilmesine olanak sağlayacak şekilde kapsamlı biçimde özelleştirilmiştir. Daha fazla bilgi için ultralytics.models.yolo.world.train_world.py dosyasına bak.
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,
)Atıflar ve Teşekkürler#
YOLO-World ile gerçek zamanlı açık kelime dağarcıklı nesne algılama alanındaki ö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 bilgi için özgün YOLO-World makalesine arXiv üzerinden ulaşabilirsin. Projenin kaynak koduna ve ek kaynaklarına GitHub deposu üzerinden erişilebilir. Alanı ilerletmeye ve değerli içgörülerini toplulukla paylaşmaya olan bağlılıklarını takdir ediyoruz.
SSS#
YOLO-World modeli, Ultralytics YOLOv8 çerçevesini temel alan gelişmiş, gerçek zamanlı bir nesne algılama yaklaşımıdır. Açık Kelime Dağarcıklı Algılama görevlerinde, açıklayıcı metinlere dayanarak bir görüntüdeki nesneleri tanımlamada üstün performans gösterir. Görsel-dil modelleme ve büyük veri kümeleri üzerinde ön eğitim kullanan YOLO-World, hesaplama gereksinimlerini önemli ölçüde azaltırken yüksek verimlilik ve performans elde eder; bu da onu çeşitli sektörlerdeki gerçek zamanlı uygulamalar için ideal hale getirir.
YOLO-World, verimliliği artırmak için çevrimdışı bir kelime dağarcığından yararlanan "önce istem ver, sonra algıla" stratejisini destekler. Açıklamalar veya belirli nesne kategorileri gibi özel istemler önceden kodlanır ve çevrimdışı kelime dağarcığı gömmeleri olarak depolanır. Bu yaklaşım, yeniden eğitim gerektirmeden algılama sürecini kolaylaştırır. Aşağıda gösterildiği gibi, modeli belirli algılama görevlerine uyarlamak için bu istemleri model içinde 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 Kelime Dağarcıklı algılama modellerine kıyasla çeşitli avantajlar sunar:
- Gerçek zamanlı performans: Hızlı ve verimli algılama sunmak için CNN'lerin hesaplama hızından yararlanır.
- Verimlilik ve düşük kaynak gereksinimi: YOLO-World, hesaplama ve kaynak gereksinimlerini önemli ölçüde azaltırken yüksek performansını korur.
- Özelleştirilebilir istemler: Model, yeniden eğitim olmadan özel algılama sınıfları belirtmene olanak tanıyan dinamik istem ayarını destekler.
- Kıyaslama üstünlüğü: Standart kıyaslamalarda hız ve verimlilik açısından MDETR ve GLIP gibi diğer açık kelime dağarcıklı algılayıcılardan daha iyi performans gösterir.
YOLO-World modelini kendi veri kümen üzerinde sağlanan Python API veya CLI komutları aracılığıyla eğitmek kolaydır. Python kullanarak eğitime başlamak için:
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.pt 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 Türü Önceden Eğitilmiş Ağırlıklar Desteklenen Görevler Eğitim Doğrulama Çıkarım Dışa aktarma 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 ✅ ✅ ✅ ✅ Resmî sonuçları sıfırdan yeniden üretmek 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ğiticiyle
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)