Meet YOLO26: next-gen vision AI.

Link to this sectionYOLO-World Modeli#

YOLO-World Modeli, Açık Sözcüklü Tespit (Open-Vocabulary Detection) görevleri için gelişmiş, gerçek zamanlı ve Ultralytics YOLOv8 tabanlı bir yaklaşım sunar. Bu yenilik, açıklayıcı metinlere dayalı olarak bir görüntü içindeki her türlü nesnenin tespit edilmesini sağlar. Hesaplama gereksinimlerini önemli ölçüde düşürürken rekabetçi performansı koruyan 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

YOLO-World model mimarisine genel bakış

Link to this sectionGenel Bakış#

YOLO-World, genellikle kapsamlı hesaplama kaynakları gerektiren hantal Transformer modellerine dayanan geleneksel Açık Sözcüklü tespit modellerinin karşılaştığı zorlukları ele alır. Bu modellerin önceden tanımlanmış nesne kategorilerine olan bağımlılığı, dinamik senaryolardaki kullanımlarını da kısıtlar. YOLO-World, vizyon-dil modelleme yöntemini kullanarak ve geniş veri setleri üzerinde ön eğitimden yararlanarak, YOLOv8 çerçevesini açık sözcüklü tespit yetenekleriyle yeniden canlandırır ve sıfır-atış (zero-shot) senaryolarında eşsiz bir verimlilikle çok çeşitli nesneleri tanımlamada mükemmelleşir.

Link to this sectionTemel Özellikler#

  1. 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.

  2. 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.

  3. Ç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.

  4. YOLOv8 Gücüyle: Ultralytics YOLOv8 üzerine inşa edilen YOLO-World, benzersiz doğruluk ve hız ile açık sözcüklü tespiti kolaylaştırmak için gerçek zamanlı nesne tespitindeki en son gelişmeleri kullanır.

  5. 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.

  6. Ç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.

Link to this sectionMevcut Modeller, Desteklenen Görevler ve Çalışma Modları#

Bu bölüm, belirli önceden eğitilmiş ağırlıkları, 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; desteklenen modlar ✅ ile, desteklenmeyenler ise ❌ ile belirtilmiştir.

Not

Tüm YOLOv8-World ağırlıkları, mükemmel katkılarını vurgulayarak doğrudan resmi YOLO-World deposundan taşınmıştır.

Model TipiÖnceden Eğitilmiş AğırlıklarDesteklenen GörevlerÇıkarımDoğrulamaEğitimDışa Aktar (Export)
YOLOv8s-worldyolov8s-world.ptNesne Tespiti
YOLOv8s-worldv2yolov8s-worldv2.ptNesne Tespiti
YOLOv8m-worldyolov8m-world.ptNesne Tespiti
YOLOv8m-worldv2yolov8m-worldv2.ptNesne Tespiti
YOLOv8l-worldyolov8l-world.ptNesne Tespiti
YOLOv8l-worldv2yolov8l-worldv2.ptNesne Tespiti
YOLOv8x-worldyolov8x-world.ptNesne Tespiti
YOLOv8x-worldv2yolov8x-worldv2.ptNesne Tespiti

Link to this sectionCOCO Veri Setinde Sıfır-Atış (Zero-shot) Transferi#

Performans
Model TipimAPmAP50mAP75
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

Link to this sectionKullanı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 🚀

Link to this sectionEğitim Kullanımı#

İpucu

Özel eğitim için yolov8-worldv2 modelini kullanmanızı şiddetle öneririz, çünkü bu model deterministik eğitimi destekler ve ayrıca onnx/tensorrt gibi diğer formatlara kolayca dışa aktarılabilir.

Nesne tespiti, aşağıda gösterildiği gibi train yöntemiyle basittir:

Örnek

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

Link to this sectionTahmin Kullanımı#

Nesne tespiti, aşağıda gösterildiği gibi predict yöntemiyle basittir:

Örnek
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.

Link to this sectionDoğrulama Kullanımı#

Bir veri setinde model doğrulama işlemi şu şekilde kolaylaştırılmıştır:

Örnek
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")

Link to this sectionTakip Kullanımı#

Bir video/görüntü üzerinde YOLO-World modeli ile nesne takibi şu şekilde kolaylaştırılmıştır:

Örnek
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")
Not

Ultralytics tarafından sağlanan YOLO-World modelleri, çevrimdışı sözlüklerinin 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.

Link to this sectionKomutları (prompt) ayarla#

YOLO-World komut sınıf isimlerine genel bakış

YOLO-World çerçevesi, özel komutlar aracılığıyla sınıfların dinamik olarak belirlenmesine olanak tanır ve kullanıcıların modeli yeniden eğitmeden kendi özel ihtiyaçlarına göre uyarlamalarını sağlar. Bu özellik, özellikle modeli orijinalinde eğitim verisi kapsamında olmayan yeni alanlara veya belirli görevlere uyarlamak için yararlıdır. Özel komutlar belirleyerek, kullanıcılar modelin odak noktasını temel olarak ilgi duyulan nesnelere yönlendirebilir ve tespit sonuçlarının uygunluğunu 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:

Örnek
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()
Arka Plan Sınıfı

Bazı kullanıcılar, arka plan sınıfı olarak boş bir karakter dizisi "" eklemenin belirli senaryolarda tespit performansını iyileştirebileceğini fark etmiştir. Bu davranış senaryoya bağlı görünmektedir ve tam mekanizması 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:

Örnek

Ö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()

Link to this sectionÖ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, en son teknoloji nesne tespit modellerini belirli görevler için özelleştirmenin güçlü bir yolunu sunar ve gelişmiş yapay zekayı daha erişilebilir hale getirerek daha geniş bir pratik uygulama yelpazesine uygun kılar.

Link to this sectionResmi sonuçları sıfırdan üretin (Deneysel)#

Link to this sectionVeri setlerini hazırlayın#

  • Eğitim verisi
Veri SetiTipÖrneklerKutularAçıklama Dosyaları
Objects365v1Tespit609k9621kobjects365_train.json
GQATemellendirme (Grounding)621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Val verisi
Veri SetiTipAçıklama Dosyaları
LVIS minivalTespitminival.txt

Link to this sectionSıfırdan eğitimi başlat#

Not

WorldTrainerFromScratch, yolo-world modellerinin hem tespit hem de grounding veri setleri üzerinde eş zamanlı olarak eğitilmesine olanak tanıyacak şekilde oldukça özelleştirilmiştir. Daha fazla detay için lütfen ultralytics.model.yolo.world.train_world.py dosyasına göz at.

Örnek
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,
)

Link to this sectionAlıntılar ve Teşekkür#

YOLO-World ile gerçek zamanlı açık kelimeli nesne tespiti konusundaki öncü çalışmaları için Tencent AILab Computer Vision Center ekibine teşekkürlerimizi sunarız:

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 okuma için, orijinal YOLO-World makalesine arXiv üzerinden ulaşabilirsin. Projenin kaynak koduna ve ek kaynaklara GitHub deposu üzerinden erişilebilir. Alanın ilerlemesine olan bağlılıkları ve değerli içgörülerini toplulukla paylaşmaları nedeniyle kendilerine teşekkür ederiz.

Link to this sectionSSS#

Link to this sectionYOLO-World modeli nedir ve nasıl çalışır?#

YOLO-World modeli, Ultralytics YOLOv8 çerçevesi tabanlı gelişmiş, gerçek zamanlı bir nesne tespit yaklaşımıdır. Tanımlayıcı metinlere dayalı olarak bir görüntüdeki nesneleri tanımlayarak Açık Kelimeli Tespit görevlerinde üstünlük sağlar. Görsel-dil modellemesi ve büyük veri setleri üzerinde ön eğitim kullanarak, YOLO-World yüksek verimlilik ve performans elde ederken hesaplama taleplerini önemli ölçüde azaltır, bu da onu çeşitli sektörlerdeki gerçek zamanlı uygulamalar için ideal hale getirir.

Link to this sectionYOLO-World özel komutlarla çıkarımı nasıl yönetir?#

YOLO-World, verimliliği artırmak için çevrimdışı bir kelime dağarcığından yararlanan bir "önce komut ver, sonra tespit et" stratejisini destekler. Açıklamalar veya belirli nesne kategorileri gibi özel komutlar önceden kodlanır ve çevrimdışı kelime dağarcığı embeddingleri olarak saklanır. Bu yaklaşım, yeniden eğitime ihtiyaç duymadan tespit sürecini kolaylaştırır. Aşağıda gösterildiği gibi, modeli belirli tespit görevlerine göre uyarlamak için bu komutları 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()

Link to this sectionNeden geleneksel Açık Kelimeli tespit modelleri yerine YOLO-World'ü seçmeliyim?#

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.

Link to this sectionKendi veri setimde bir YOLO-World modelini nasıl eğitirim?#

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=640

Link to this sectionHangi önceden eğitilmiş YOLO-World modelleri mevcuttur ve hangi görevleri desteklerler?#

Ultralytics, ç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ıklarDesteklenen GörevlerÇıkarımDoğrulamaEğitimDışa Aktar (Export)
YOLOv8s-worldyolov8s-world.ptNesne Tespiti
YOLOv8s-worldv2yolov8s-worldv2.ptNesne Tespiti
YOLOv8m-worldyolov8m-world.ptNesne Tespiti
YOLOv8m-worldv2yolov8m-worldv2.ptNesne Tespiti
YOLOv8l-worldyolov8l-world.ptNesne Tespiti
YOLOv8l-worldv2yolov8l-worldv2.ptNesne Tespiti
YOLOv8x-worldyolov8x-world.ptNesne Tespiti
YOLOv8x-worldv2yolov8x-worldv2.ptNesne Tespiti

Link to this sectionYOLO-World'ün resmi sonuçlarını sıfırdan nasıl yeniden elde edebilirim?#

Resmi sonuçları sıfırdan yeniden elde etmek için, veri setlerini 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ğitici 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)

Yorumlar