Overslaan naar inhoud

YOLO-Wereldmodel

Het YOLO-Wereldmodel introduceert een geavanceerd, real-time Ultralytics YOLOv8-gebaseerde benadering voor Open woordenschatdetectietaken. Deze innovatie maakt het mogelijk om elk object in een afbeelding te detecteren op basis van beschrijvende teksten. Door de rekenkundige eisen aanzienlijk te verlagen met behoud van concurrerende prestaties, ontpopt YOLO-World zich als een veelzijdig hulpmiddel voor talloze vision-gebaseerde toepassingen.



Kijken: YOLO Wereld trainingsworkflow op aangepaste dataset

YOLO-Overzicht architectuur wereldmodel

Overzicht

YOLO-World pakt de uitdagingen aan van traditionele Open-Vocabulaire detectiemodellen, die vaak afhankelijk zijn van omslachtige Transformer-modellen die veel rekenkracht vereisen. De afhankelijkheid van deze modellen van vooraf gedefinieerde objectcategorieën beperkt ook hun bruikbaarheid in dynamische scenario's. YOLO World blaast het YOLOv8 framework nieuw leven in met open woordenschatdetectiemogelijkheden, maakt gebruik van vision-taalmodellering en pre-training op uitgebreide datasets om uit te blinken in het identificeren van een breed scala aan objecten in zero-shot scenario's met ongeëvenaarde efficiëntie.

Belangrijkste kenmerken

  1. Real-time oplossing: Door gebruik te maken van de berekeningssnelheid van CNN's levert YOLO-World een snelle oplossing voor het detecteren van open woordenschat, voor industrieën die onmiddellijke resultaten nodig hebben.

  2. Efficiëntie en prestaties: YOLO-World verlaagt de rekenkracht en de benodigde bronnen zonder dat dit ten koste gaat van de prestaties en biedt een robuust alternatief voor modellen als SAM , maar tegen een fractie van de rekenkosten, waardoor real-time toepassingen mogelijk zijn.

  3. Inferentie met offline woordenschat: YOLO-World introduceert een "prompt-then-detect" strategie, waarbij een offline woordenschat wordt gebruikt om de efficiëntie verder te verbeteren. Deze aanpak maakt het mogelijk om aangepaste aanwijzingen die vooraf zijn berekend, inclusief bijschriften of categorieën, te coderen en op te slaan als offline woordenschat, waardoor het detectieproces wordt gestroomlijnd.

  4. Aangedreven door YOLOv8: Gebouwd op Ultralytics YOLOv8YOLO-World maakt gebruik van de nieuwste ontwikkelingen in realtime objectdetectie om open woordenschat met ongeëvenaarde nauwkeurigheid en snelheid te detecteren.

  5. Uitmuntende benchmarks: YOLO-World presteert beter dan bestaande detectoren met een open woordenschat, waaronder MDETR en de GLIP-serie, in termen van snelheid en efficiëntie op standaardbenchmarks. YOLOv8 laat de superieure mogelijkheden zien op een enkele NVIDIA V100 GPU.

  6. Veelzijdige toepassingen: YOLO-Worlds innovatieve benadering ontsluit nieuwe mogelijkheden voor een veelheid aan vision-taken en levert snelheidsverbeteringen van grootteordes ten opzichte van bestaande methoden.

Beschikbare modellen, ondersteunde taken en bedrijfsmodi

In dit gedeelte worden de beschikbare modellen beschreven met hun specifieke voorgetrainde gewichten, de taken die ze ondersteunen en hun compatibiliteit met verschillende bedrijfsmodi zoals Inferentie, Validatie, Training en Exporteren, aangeduid met ✅ voor ondersteunde modi en ❌ voor niet-ondersteunde modi.

Opmerking

Alle gewichten van YOLOv8-World zijn direct gemigreerd vanuit de officiële YOLO-World repository, waarmee hun uitstekende bijdragen worden benadrukt.

Type model Voorgetrainde gewichten Ondersteunde taken Inferentie Validatie Training Exporteer
YOLOv8s-wereld yolov8s-world.pt Objectdetectie
YOLOv8s-wereldv2 yolov8s-wereldv2.pt Objectdetectie
YOLOv8m-wereld yolov8m-world.pt Objectdetectie
YOLOv8m-wereldv2 yolov8m-wereldv2.pt Objectdetectie
YOLOv8l-wereld yolov8l-world.pt Objectdetectie
YOLOv8l-wereldv2 yolov8l-wereldv2.pt Objectdetectie
YOLOv8x-wereld yolov8x-world.pt Objectdetectie
YOLOv8x-wereldv2 yolov8x-wereldv2.pt Objectdetectie

Nul-overdracht op COCO-dataset

Type model mAP mAP50 mAP75
yolov8s-wereld 37.4 52.0 40.6
yolov8s-wereldv2 37.7 52.2 41.0
yolov8m-wereld 42.0 57.0 45.6
yolov8m-wereldv2 43.0 58.4 46.8
yolov8l-wereld 45.7 61.3 49.8
yolov8l-wereldv2 45.8 61.3 49.8
yolov8x-wereld 47.0 63.0 51.2
yolov8x-wereldv2 47.1 62.8 51.4

Voorbeelden

De YOLO-wereldmodellen zijn eenvoudig te integreren in je Python toepassingen. Ultralytics biedt gebruiksvriendelijke Python API en CLI commando's om de ontwikkeling te stroomlijnen.

Treingebruik

Tip

We raden sterk aan om yolov8-worldv2 model voor aangepaste training, omdat het deterministische training ondersteunt en ook gemakkelijk andere formaten kan exporteren, zoals onnx/tensorrt.

Objectdetectie is eenvoudig met de train methode, zoals hieronder geïllustreerd:

Voorbeeld

PyTorch voorgetraind *.pt modellen en configuratie *.yaml bestanden kunnen worden doorgegeven aan de YOLOWorld() klasse om een instantie van een model te maken in python:

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 YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Gebruik voorspellen

Objectdetectie is eenvoudig met de predict methode, zoals hieronder geïllustreerd:

Voorbeeld

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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

Dit fragment laat de eenvoud zien van het laden van een voorgetraind model en het uitvoeren van een voorspelling op een afbeelding.

Val Gebruik

Modelvalidatie op een dataset wordt als volgt gestroomlijnd:

Voorbeeld

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")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640

Spoorgebruik

Het volgen van objecten met YOLO-Wereldmodel op een video/afbeelding wordt als volgt gestroomlijnd:

Voorbeeld

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")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video/file.mp4"

Opmerking

De YOLO-World modellen die worden geleverd door Ultralytics zijn vooraf geconfigureerd met COCO dataset categorieën als onderdeel van hun offline vocabulaire, waardoor de efficiëntie voor onmiddellijke toepassing wordt verbeterd. Door deze integratie kunnen de YOLOv8-World modellen direct de 80 standaard categorieën uit de COCO dataset herkennen en voorspellen zonder dat er extra instellingen of aanpassingen nodig zijn.

Aanwijzingen instellen

YOLO-Overzicht met namen van wereldpromptklassen

Het YOLO-World raamwerk maakt het mogelijk om klassen dynamisch te specificeren via aangepaste aanwijzingen, waardoor gebruikers het model kunnen aanpassen aan hun specifieke behoeften zonder opnieuw te hoeven trainen. Deze functie is vooral handig voor het aanpassen van het model aan nieuwe domeinen of specifieke taken die oorspronkelijk geen deel uitmaakten van de trainingsgegevens. Door aangepaste aanwijzingen in te stellen, kunnen gebruikers de aandacht van het model richten op objecten die van belang zijn, waardoor de relevantie en nauwkeurigheid van de detectieresultaten worden verbeterd.

Als je toepassing bijvoorbeeld alleen 'persoon' en 'bus' objecten moet detecteren, dan kun je deze klassen direct specificeren:

Voorbeeld

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

Je kunt een model ook opslaan nadat je aangepaste klassen hebt ingesteld. Door dit te doen maak je een versie van het YOLO-World model dat gespecialiseerd is voor jouw specifieke gebruik. Dit proces voegt je aangepaste klassedefinities direct in het modelbestand in, waardoor het model klaar is voor gebruik met je gespecificeerde klassen zonder verdere aanpassingen. Volg deze stappen om je aangepaste YOLOv8 model op te slaan en te laden:

Voorbeeld

Laad eerst een YOLO-World model, stel er aangepaste klassen voor in en sla het op:

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

Na het opslaan gedraagt het aangepaste_yolov8s.pt model zich als elk ander voorgetraind YOLOv8 model, maar met een belangrijk verschil: het is nu geoptimaliseerd om alleen de door jou gedefinieerde klassen te detecteren. Deze aanpassing kan de detectieprestaties en -efficiëntie voor jouw specifieke toepassingsscenario's aanzienlijk verbeteren.

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

Voordelen van besparen met aangepaste woordenschat

  • Efficiëntie: Stroomlijnt het detectieproces door zich te richten op relevante objecten, waardoor de computationele overhead wordt verminderd en de inferentie wordt versneld.
  • Flexibiliteit: Het model kan eenvoudig worden aangepast aan nieuwe detectietaken of niche-detectietaken zonder dat uitgebreide hertraining of gegevensverzameling nodig is.
  • Eenvoud: Vereenvoudigt de implementatie doordat het niet meer nodig is om tijdens runtime herhaaldelijk aangepaste klassen te specificeren, waardoor het model direct bruikbaar is met het ingebedde vocabulaire.
  • Prestaties: Verbetert de detectienauwkeurigheid voor gespecificeerde klassen door de aandacht en bronnen van het model te richten op het herkennen van de gedefinieerde objecten.

Deze benadering biedt een krachtige manier om geavanceerde objectdetectiemodellen aan te passen aan specifieke taken, waardoor geavanceerde AI toegankelijker wordt en toepasbaar in een breder scala aan praktische toepassingen.

Officiële resultaten vanaf nul reproduceren (Experimenteel)

Datasets voorbereiden

  • Treingegevens
Dataset Type Monsters Dozen Annotatiebestanden
Objecten365v1 Opsporing 609k 9621k objecten365_train.json
GQA Aarding 621k 3681k eind_gemengde_training_geen_coco.json
Flickr30k Aarding 149k 641k eind_flickr_separateGT_train.json
  • Waarde gegevens
Dataset Type Annotatiebestanden
LVIS minival Opsporing minival.txt

Start training vanaf nul

Opmerking

WorldTrainerFromScratch is in hoge mate aangepast om tegelijkertijd yolo-wereldmodellen te kunnen trainen op zowel detectie datasets als aardings datasets. Kijk voor meer details op ultralytics.model.yolo.world.train_world.py.

Voorbeeld

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

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)

Citaten en Erkenningen

Onze dank gaat uit naar het Tencent AILab Computer Vision Center voor hun pionierswerk op het gebied van realtime objectdetectie met open woordenschat met YOLO-World:

@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}
}

Het originele YOLO-World artikel is beschikbaar op arXiv. De broncode van het project en aanvullende bronnen zijn toegankelijk via hun GitHub repository. We waarderen hun inzet om het veld vooruit te helpen en hun waardevolle inzichten met de gemeenschap te delen.

FAQ

Wat is het YOLO-Wereldmodel en hoe werkt het?

Het YOLO-World model is een geavanceerde, realtime objectdetectiemethode gebaseerd op het Ultralytics YOLOv8 raamwerk. Het blinkt uit in Open-Vocabulary Detection-taken door objecten in een afbeelding te identificeren op basis van beschrijvende teksten. Door gebruik te maken van vision-taalmodellering en pre-training op grote datasets, bereikt YOLO-World hoge efficiëntie en prestaties met aanzienlijk lagere computereisen, waardoor het ideaal is voor real-time toepassingen in verschillende industrieën.

Hoe gaat YOLO-World om met inferentie met aangepaste prompts?

YOLO-World ondersteunt een "vraag-dan-detecteer" strategie, die gebruik maakt van een offline woordenschat om de efficiëntie te verbeteren. Aangepaste prompts zoals bijschriften of specifieke objectcategorieën worden vooraf gecodeerd en opgeslagen als offline woordenschat. Deze aanpak stroomlijnt het detectieproces zonder de noodzaak voor hertraining. Je kunt deze aanwijzingen dynamisch instellen binnen het model om het aan te passen aan specifieke detectietaken, zoals hieronder getoond:

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

Waarom zou ik YOLO-World kiezen boven traditionele Open-Vocabulaire detectiemodellen?

YOLO-World biedt verschillende voordelen ten opzichte van traditionele Open-Vocabulaire detectiemodellen:

  • Real-time prestaties: Het maakt gebruik van de berekeningssnelheid van CNN's om snelle, efficiënte detectie te bieden.
  • Efficiëntie en lage behoefte aan middelen: YOLO-World behoudt hoge prestaties terwijl het de benodigde rekenkracht en middelen aanzienlijk vermindert.
  • Aanpasbare prompts: Het model ondersteunt dynamische promptinstellingen, zodat gebruikers aangepaste detectieklassen kunnen specificeren zonder hertraining.
  • Uitmuntende benchmarks: Het presteert beter dan andere detectoren met een open woordenschat zoals MDETR en GLIP in zowel snelheid als efficiëntie op standaard benchmarks.

Hoe train ik een YOLO-Wereldmodel op mijn dataset?

Het trainen van een YOLO-World model op je dataset is eenvoudig via de meegeleverde Python API of CLI commando's. Hier lees je hoe je kunt beginnen met het trainen met Python:

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)

Of met CLI:

yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Wat zijn de beschikbare voorgetrainde YOLO-Wereldmodellen en hun ondersteunde taken?

Ultralytics biedt meerdere voorgetrainde YOLO-wereldmodellen die verschillende taken en bedrijfsmodi ondersteunen:

Type model Voorgetrainde gewichten Ondersteunde taken Inferentie Validatie Training Exporteer
YOLOv8s-wereld yolov8s-world.pt Objectdetectie
YOLOv8s-wereldv2 yolov8s-wereldv2.pt Objectdetectie
YOLOv8m-wereld yolov8m-world.pt Objectdetectie
YOLOv8m-wereldv2 yolov8m-wereldv2.pt Objectdetectie
YOLOv8l-wereld yolov8l-world.pt Objectdetectie
YOLOv8l-wereldv2 yolov8l-wereldv2.pt Objectdetectie
YOLOv8x-wereld yolov8x-world.pt Objectdetectie
YOLOv8x-wereldv2 yolov8x-wereldv2.pt Objectdetectie

Hoe reproduceer ik de officiële resultaten van YOLO-World vanuit het niets?

Om de officiële resultaten vanaf nul te reproduceren, moet je de datasets voorbereiden en de training starten met behulp van de meegeleverde code. De trainingsprocedure bestaat uit het maken van een data dictionary en het uitvoeren van de train methode met een aangepaste trainer:

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

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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)


Aangemaakt 2024-02-14, Bijgewerkt 2024-07-04
Auteurs: glenn-jocher (9), RizwanMunawar (3), Burhan-Q (1), Laughing-q (4)

Reacties