Ultralytics YOLO27:
Get Started

YOLO-World Modeli#

YOLO-World Modeli, Açık Kelime Dağarcıklı Algılama görevleri için gelişmiş, gerçek zamanlı ve Ultralytics YOLOv8 tabanlı bir yaklaşım sunar. Bu yenilik, açıklayıcı metinlere dayanarak görüntüdeki herhangi bir nesnenin algılanmasını sağlar. Rekabetçi performansı korurken hesaplama gereksinimlerini önemli ölçüde azaltan YOLO-World, görüntü tabanlı çok sayıda uygulama için çok yönlü bir araca dönüşür.



İzle: Özel Veri Kümesinde YOLO World Eğitim İş Akışı

YOLO-World modeli mimarisine genel bakış

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ımlarını da kısıtlar. YOLO-World, YOLOv8 çerçevesini açık kelime dağarcıklı algılama yetenekleriyle güçlendirir; görsel-dil modellemesini ve kapsamlı veri kümeleri üzerinde ön eğitimi kullanarak sıfır örnekli senaryolarda geniş bir nesne yelpazesini benzersiz bir verimlilikle tanımada üstün başarı gösterir.

Örnek maskelerine, görsel istemlere veya istem gerektirmeyen bir moda da ihtiyaç duyan açık kelime dağarcıklı çalışmalar için aynı set_classes() API'sini kullanan YOLOE modeline bak.

Temel Özellikler#

  1. Gerçek Zamanlı Çözüm: CNN'lerin hesaplama hızından yararlanan YOLO-World, anında sonuçlara ihtiyaç duyan sektörlere yönelik hızlı bir açık kelime dağarcıklı algılama çözümü sunar.

  2. Verimlilik ve Performans: YOLO-World, performanstan ödün vermeden hesaplama ve kaynak gereksinimlerini büyük ölçüde azaltır. Böylece SAM gibi modellere sağlam bir alternatif sunarken çok daha düşük hesaplama maliyetiyle gerçek zamanlı uygulamaları mümkün kılar.

  3. Ç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, sonra algılama" stratejisini sunar. Bu yaklaşım, altyazılar veya kategoriler dâhil olmak üzere önceden hesaplanmış özel istemlerin kodlanıp çevrimdışı kelime dağarcığı gömmeleri olarak saklanmasını sağlayarak algılama sürecini kolaylaştırır.

  4. YOLOv8 ile Güçlendirilmiştir: Ultralytics YOLOv8 üzerine kurulan YOLO-World, rakipsiz doğruluk ve hızla açık kelime dağarcıklı algılamayı mümkün kılmak için gerçek zamanlı nesne algılamadaki en son gelişmelerden yararlanır.

  5. Üstün Kıyaslama Sonuçları: YOLO-World; standart kıyaslamalarda hız ve verimlilik açısından MDETR ve GLIP serileri dâhil mevcut açık kelime dağarcıklı algılayıcıları geride bırakır ve tek bir NVIDIA V100 GPU'da YOLOv8'in üstün yeteneklerini ortaya koyar.

  6. Çok Yönlü Uygulamalar: YOLO-World'ün yenilikçi yaklaşımı, çok sayıda görüntü görevinde yeni olanaklar sunar ve mevcut yöntemlere kıyasla hızda katlarca artış sağlar.

Kullanılabilir Modeller, Desteklenen Görevler ve Çalışma Modları#

Bu bölümde, belirli önceden eğitilmiş ağırlıklarıyla birlikte kullanılabilir modeller, modellerin desteklediği görevler ve Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi çeşitli çalışma modlarıyla uyumlulukları açıklanır. Desteklenen modlar ✅, desteklenmeyen modlar ise ❌ ile belirtilir.

Not

YOLOv8-World ağırlıklarının tümü doğrudan resmî YOLO-World deposundan taşınmıştır; bu da depodaki değerli katkıları öne çıkarır.

Model TürüÖnceden Eğitilmiş AğırlıklarDesteklenen GörevlerEğitimDoğrulamaÇıkarımDışa aktar
YOLOv8s-worldyolov8s-world.ptNesne Algılama✅✅✅❌
YOLOv8s-worldv2yolov8s-worldv2.ptNesne Algılama✅✅✅✅
YOLOv8m-worldyolov8m-world.ptNesne Algılama✅✅✅❌
YOLOv8m-worldv2yolov8m-worldv2.ptNesne Algılama✅✅✅✅
YOLOv8l-worldyolov8l-world.ptNesne Algılama✅✅✅❌
YOLOv8l-worldv2yolov8l-worldv2.ptNesne Algılama✅✅✅✅
YOLOv8x-worldyolov8x-world.ptNesne Algılama✅✅✅❌
YOLOv8x-worldv2yolov8x-worldv2.ptNesne Algılama✅✅✅✅

COCO veri kümesinde sıfır örnekli aktarım#

Performans
Model TürümAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Kullanım Örnekleri#

YOLO-World modellerini Python uygulamalarına kolayca entegre edebilirsin. Ultralytics, geliştirme sürecini kolaylaştırmak için kullanıcı dostu bir Python API ve CLI komutları sunar.



İzle: Ultralytics ile YOLO-World Modeli Kullanım Örnekleri | Açık Kelime Dağarcığı, İstemsiz ve Diğerleri 🚀

Eğitim Kullanımı#

İpucu

Deterministik eğitimi desteklediği ve ONNX ile TensorRT gibi biçimlere daha kolay dışa aktarım sağladığı için özel eğitimde yolov8-worldv2 kullanmanı önemle tavsiye ederiz.

Aşağıda gösterildiği gibi, train yöntemiyle nesne algılama kolaydır:

Örnek

PyTorch önceden eğitilmiş *.pt modelleri ve 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

# Önceden eğitilmiş bir YOLOv8s-worldv2 modeli yükle
model = YOLOWorld("yolov8s-worldv2.pt")

# Modeli COCO8 örnek veri kümesinde 100 dönem boyunca eğit
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# 'bus.jpg' görüntüsünde YOLO-World modeliyle çıkarım yap
results = model("path/to/bus.jpg")

Tahmin Kullanımı#

Aşağıda gösterildiği gibi, predict yöntemiyle nesne algılama kolaydır:

Örnek
from ultralytics import YOLOWorld

# Bir YOLO-World modelini başlat
model = YOLOWorld("yolov8s-world.pt")  # veya farklı boyutlar için yolov8m/l-world.pt dosyasını seç

# Belirtilen görüntüde YOLOv8s-world modeliyle çıkarım yap
results = model.predict("path/to/image.jpg")

# Sonuçları göster
results[0].show()

Bu kod parçası, önceden eğitilmiş bir modeli yüklemenin ve bir görüntü üzerinde tahmin yürütmenin ne kadar kolay olduğunu gösterir.

Doğrulama Kullanımı#

Bir veri kümesinde model doğrulaması şu şekilde kolayca yapılır:

Örnek
from ultralytics import YOLO

# Bir YOLO-World modeli oluştur
model = YOLO("yolov8s-world.pt")  # veya farklı boyutlar için yolov8m/l-world.pt dosyasını seç

# COCO8 örnek veri kümesinde model doğrulaması yap
metrics = model.val(data="coco8.yaml")

Takip Kullanımı#

Bir video/görüntü üzerinde YOLO-World modeliyle nesne takibi şu şekilde kolayca yapılır:

Örnek
from ultralytics import YOLO

# Bir YOLO-World modeli oluştur
model = YOLO("yolov8s-world.pt")  # veya farklı boyutlar için yolov8m/l-world.pt dosyasını seç

# Bir videoda YOLO-World modeliyle takip yap
results = model.track(source="path/to/video.mp4")
Not

Ultralytics'in sunduğu YOLO-World modelleri, hemen kullanıma alınabilmeleri ve verimliliği artırmaları için çevrimdışı sözcük dağarcıklarının bir parçası olarak COCO veri kümesi kategorileriyle önceden yapılandırılmıştı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 istem sınıfı adlarına genel bakış

YOLO-World çerçevesi, özel istemler aracılığıyla sınıfları dinamik olarak belirtmene olanak tanıyarak modeli yeniden eğitmeye gerek kalmadan 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 yararlıdır. Özel istemler ayarlayarak modelin odağını ilgilendiğin nesnelere yönlendirebilir, algılama sonuçlarının alaka düzeyini 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:

Örnek
from ultralytics import YOLO

# Bir YOLO-World modelini başlat
model = YOLO("yolov8s-world.pt")  # veya yolov8m/l-world.pt dosyasını seç

# Özel sınıfları tanımla
model.set_classes(["person", "bus"])

# Bir görüntüde belirtilen kategoriler için tahmin yürüt
results = model.predict("path/to/image.jpg")

# Sonuçları göster
results[0].show()
Arka Plan Sınıfı

Bazı kullanıcılar, arka plan sınıfı olarak boş bir "" dizgesi eklemenin belirli senaryolarda algılama performansını artırabildiğini fark etti. Bu davranış senaryoya bağlı görünüyor ve kesin mekanizması tam olarak anlaşılmış değil:

model.set_classes(["person", "bus", ""])

Boş dizge, kaydettiğin modeller de dahil olmak üzere model.names içinde kendi başına bir sınıf olarak kalır; dolayısıyla bu sınıfa ait algılamalar boş bir etiketle döner. Yalnızca gerçek sınıflarını tutmak için tahmin sırasında classes=[0, 1] değerini ilet.

Özel sınıfları ayarladıktan sonra modeli de kaydedebilirsin. Böylece YOLO-World modelinin özel kullanım durumuna göre uyarlanmış bir sürümünü oluşturursun. Bu işlem, özel sınıf tanımlarını doğrudan model dosyasına ekleyerek modeli başka bir ayarlama yapmadan belirttiğin sınıflarla kullanıma hazır hâle getirir. Özel YOLO-World modelini kaydetmek ve yüklemek için şu adımları izle:

Örnek

Önce bir YOLO-World modeli yükle, özel sınıfları ayarla ve modeli kaydet:

from ultralytics import YOLO

# Bir YOLO-World modelini başlat
model = YOLO("yolov8s-world.pt")  # veya yolov8m/l-world.pt dosyasını seç

# Özel sınıfları tanımla
model.set_classes(["person", "bus"])

# Modeli tanımlanan çevrimdışı sözcük dağarcığıyla kaydet
model.save("custom_yolov8s.pt")

Kaydedildikten sonra custom_yolov8s.pt modeli, önemli bir fark dışında diğer tüm önceden eğitilmiş YOLOv8 modelleri gibi davranır: model artık yalnızca tanımladığın sınıfları algılayacak şekilde optimize edilmiştir. Bu özelleştirme, belirli uygulama senaryolarındaki algılama performansını ve verimliliğini önemli ölçüde artırabilir.

from ultralytics import YOLO

# Özel modelini yükle
model = YOLO("custom_yolov8s.pt")

# Özel sınıflarını algılamak için çıkarım yap
results = model.predict("path/to/image.jpg")

# Sonuçları göster
results[0].show()

Özel Sözcük Dağarcığıyla Kaydetmenin Avantajları#

  • Verimlilik: İlgili nesnelere odaklanıp hesaplama yükünü azaltarak ve çıkarımı hızlandırarak algılama sürecini kolaylaştırır.
  • Esneklik: Kapsamlı bir yeniden eğitim veya veri toplama ihtiyacı olmadan modelin yeni ya da niş algılama 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ı kolaylaştırır ve modeli içine gömülü sözcük dağarcığıyla doğrudan kullanılabilir hâle getirir.
  • Performans: Modelin dikkatini ve kaynaklarını tanımlanan nesneleri tanımaya yönlendirerek belirtilen sınıflar için algılama doğruluğunu artırır.

Bu yaklaşım, son teknoloji nesne algılama modellerini belirli görevlere göre özelleştirmek için güçlü bir yöntem sunar; böylece gelişmiş yapay zekâ daha erişilebilir ve daha geniş bir pratik uygulama yelpazesinde kullanılabilir hâle gelir.

Resmî sonuçları sıfırdan yeniden üret (Deneysel)#

Veri kümelerini hazırla#

  • Eğitim verileri
Veri kümesiTürÖrneklerKutularEk açıklama dosyaları
Objects365v1Algılama609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Doğrulama verileri
Veri kümesiTürEk açıklama dosyaları
LVIS minivalAlgılamaminival.txt

Eğitimi sıfırdan başlat#

Not

WorldTrainerFromScratch, yolo-world modellerinin algılama veri kümeleri ve grounding veri kümeleri üzerinde aynı anda eğitilmesine olanak tanıyacak şekilde büyük ölçüde özelleştirilmiştir. Daha fazla bilgi için ultralytics.models.yolo.world.train_world.py dosyasına bak.

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

# Seçenek 1: Python sözlüğü kullan
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"]},
}

# Seçenek 2: YAML dosyası kullan (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,  # YAML dosyası kullanıyorsan data="yolo_world_data.yaml" kullan
    batch=128,
    epochs=100,
    trainer=WorldTrainerFromScratch,
)

Atıflar ve Teşekkürler#

YOLO-World ile gerçek zamanlı, açık sözcük dağarcıklı nesne algılama alanındaki öncü çalışmaları için Tencent AILab Bilgisayarlı Görü Merkezi ekibine teşekkür ederiz:

Alıntı
@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 kaynaklara GitHub deposu üzerinden erişebilirsin. Alanı ilerletmeye ve değerli görüşlerini toplulukla paylaşmaya yönelik kararlılıklarını takdir ediyoruz.

Sık Sorulan Sorular#

  • YOLO-World modeli, Ultralytics YOLOv8 çerçevesini temel alan gelişmiş, gerçek zamanlı bir nesne algılama yaklaşımıdır. Görüntüdeki nesneleri açıklayıcı metinlere göre belirleyerek açık sözcük dağarcıklı algılama görevlerinde üstün performans gösterir. Görüntü-dil modellemesini ve büyük veri kümeleri üzerinde ön eğitimi kullanan YOLO-World, hesaplama gereksinimlerini önemli ölçüde azaltırken yüksek verimlilik ve performans sunar; bu da modeli çeşitli sektörlerdeki gerçek zamanlı uygulamalar için ideal kılar.

  • YOLO-World, verimliliği artırmak için çevrimdışı bir sözcük dağarcığından yararlanan "önce istem, sonra algıla" stratejisini destekler. Açıklama metinleri veya belirli nesne kategorileri gibi özel istemler önceden kodlanır ve çevrimdışı sözcük dağarcığı gömme vektörleri olarak saklanı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 istemleri dinamik olarak ayarlayabilirsin:

    from ultralytics import YOLOWorld
    
    # Bir YOLO-World modelini başlat
    model = YOLOWorld("yolov8s-world.pt")
    
    # Özel sınıfları tanımla
    model.set_classes(["person", "bus"])
    
    # Bir görüntü üzerinde tahmin yürüt
    results = model.predict("path/to/image.jpg")
    
    # Sonuçları göster
    results[0].show()
  • YOLO-World, geleneksel açık sözcük 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 İstemler: Model, dinamik istem ayarını destekler ve kullanıcıların yeniden eğitim yapmadan özel algılama sınıfları belirtmesine olanak tanır.
    • Karşılaştırmalı Değerlendirmelerde Üstünlük: Standart karşılaştırmalı değerlendirmelerde hız ve verimlilik açısından MDETR ve GLIP gibi diğer açık sözcük dağarcıklı algılayıcılardan daha iyi performans gösterir.
  • YOLO-World modelini kendi veri kümen üzerinde eğitmek, sunulan Python API veya CLI komutlarıyla kolaydır. Python kullanarak eğitime başlamak için:

    from ultralytics import YOLOWorld
    
    # Önceden eğitilmiş bir YOLOv8s-worldv2 modeli yükle
    model = YOLOWorld("yolov8s-worldv2.pt")
    
    # Modeli COCO8 veri kümesinde 100 epoch boyunca eğit
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

    Ya da CLI ile:

    yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640
  • Ultralytics, ç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ıklarDesteklenen GörevlerEğitimDoğrulamaÇıkarımDışa aktar
    YOLOv8s-worldyolov8s-world.ptNesne Algılama✅✅✅❌
    YOLOv8s-worldv2yolov8s-worldv2.ptNesne Algılama✅✅✅✅
    YOLOv8m-worldyolov8m-world.ptNesne Algılama✅✅✅❌
    YOLOv8m-worldv2yolov8m-worldv2.ptNesne Algılama✅✅✅✅
    YOLOv8l-worldyolov8l-world.ptNesne Algılama✅✅✅❌
    YOLOv8l-worldv2yolov8l-worldv2.ptNesne Algılama✅✅✅✅
    YOLOv8x-worldyolov8x-world.ptNesne Algılama✅✅✅❌
    YOLOv8x-worldv2yolov8x-worldv2.ptNesne Algılama✅✅✅✅
  • Resmi sonuçları sıfırdan yeniden üretmek için veri kümelerini hazırlaman ve sağlanan kodla eğitimi başlatman gerekir. Eğitim süreci, bir veri sözlüğü oluşturmayı ve özel bir eğiticiyle train yö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)

Yorumlar