Model voorspelling met Ultralytics YOLO
Inleiding
In de wereld van machine learning en computer vision wordt het proces om visuele gegevens zinvol te maken 'inferentie' of 'voorspelling' genoemd. Ultralytics YOLOv8 biedt een krachtige functie die bekend staat als de predict modus en die op maat is gemaakt voor krachtige, real-time inferentie op een breed scala aan gegevensbronnen.
Kijken: Hoe de uitvoer te extraheren uit Ultralytics YOLOv8 Model voor aangepaste projecten.
Toepassingen in de echte wereld
Productie | Sport | Veiligheid |
---|---|---|
Opsporing reserveonderdelen voertuig | Detectie voetbalspeler | Mensen Valdetectie |
Waarom Ultralytics YOLO gebruiken voor inferentie?
Dit is waarom je de predict modus van YOLOv8 zou moeten overwegen voor je verschillende inferentiebehoeften:
- Veelzijdigheid: Kan conclusies trekken uit afbeeldingen, video's en zelfs live streams.
- Prestaties: Ontworpen voor real-time verwerking op hoge snelheid zonder aan nauwkeurigheid in te boeten.
- Gebruiksgemak: Intuïtieve Python en CLI interfaces voor snelle implementatie en testen.
- Zeer aanpasbaar: Diverse instellingen en parameters om het inferentiegedrag van het model af te stemmen op jouw specifieke eisen.
Belangrijkste kenmerken van de modus Voorspellen
YOLOv8De voorspellingsmodus is ontworpen om robuust en veelzijdig te zijn, met:
- Compatibiliteit met meerdere gegevensbronnen: Of je gegevens nu in de vorm van afzonderlijke afbeeldingen, een verzameling afbeeldingen, videobestanden of realtime videostreams zijn, met de voorspellingsmodus zit je goed.
- Streamingmodus: Gebruik de streamingfunctie om een geheugenefficiënte generator van
Results
objecten. Schakel dit in doorstream=True
in de aanroepmethode van de voorspeller. - Batchverwerking: De mogelijkheid om meerdere afbeeldingen of videoframes in een enkele batch te verwerken, waardoor de inferentietijd nog verder wordt versneld.
- Integratievriendelijk: Eenvoudig te integreren met bestaande datapijplijnen en andere softwarecomponenten dankzij de flexibele API.
Ultralytics YOLO modellen geven ofwel een Python lijst van Results
objecten, of een geheugenefficiënte Python generator van Results
objecten wanneer stream=True
wordt doorgegeven aan het model tijdens inferentie:
Voorspel
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(['im1.jpg', 'im2.jpg']) # return a list of Results objects
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename='result.jpg') # save to disk
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(['im1.jpg', 'im2.jpg'], stream=True) # return a generator of Results objects
# Process results generator
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename='result.jpg') # save to disk
Inferentiebronnen
YOLOv8 kan verschillende soorten invoerbronnen verwerken voor inferentie, zoals weergegeven in de onderstaande tabel. De bronnen omvatten statische afbeeldingen, videostreams en verschillende gegevensformaten. De tabel geeft ook aan of elke bron kan worden gebruikt in streaming modus met het argument stream=True
✅. De modus Streaming is gunstig voor het verwerken van video's of live streams omdat het een generator van resultaten maakt in plaats van alle frames in het geheugen te laden.
Tip
Gebruik stream=True
voor het verwerken van lange video's of grote datasets om het geheugen efficiënt te beheren. Wanneer stream=False
worden de resultaten voor alle frames of gegevenspunten in het geheugen opgeslagen, wat snel kan oplopen en fouten buiten het geheugen kan veroorzaken bij grote invoer. In tegenstelling, stream=True
gebruikt een generator, die alleen de resultaten van het huidige frame of gegevenspunt in het geheugen bewaart, waardoor het geheugenverbruik aanzienlijk wordt verminderd en out-of-memory problemen worden voorkomen.
Bron | Argument | Type | Opmerkingen |
---|---|---|---|
afbeelding | 'image.jpg' |
str of Path |
Enkel afbeeldingsbestand. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL naar een afbeelding. |
schermafbeelding | 'screen' |
str |
Maak een schermafbeelding. |
PIL | Image.open('im.jpg') |
PIL.Image |
HWC-indeling met RGB-kanalen. |
OpenCV | cv2.imread('im.jpg') |
np.ndarray |
HWC-indeling met BGR-kanalen uint8 (0-255) . |
numpy | np.zeros((640,1280,3)) |
np.ndarray |
HWC-indeling met BGR-kanalen uint8 (0-255) . |
torch | torch.zeros(16,3,320,640) |
torch.Tensor |
BCHW-indeling met RGB-kanalen float32 (0.0-1.0) . |
CSV | 'sources.csv' |
str of Path |
CSV-bestand met paden naar afbeeldingen, video's of mappen. |
video ✅ | 'video.mp4' |
str of Path |
Videobestand in formaten als MP4, AVI, etc. |
map ✅ | 'path/' |
str of Path |
Pad naar een map met afbeeldingen of video's. |
bol ✅ | 'path/*.jpg' |
str |
Glob patroon om meerdere bestanden te matchen. Gebruik de * teken als jokerteken. |
YouTube | 'https://youtu.be/LNwODJXcvt4' |
str |
URL naar een YouTube-video. |
stream ✅ | 'rtsp://example.com/media.mp4' |
str |
URL voor streaming protocollen zoals RTSP, RTMP, TCP of een IP-adres. |
multi-stroom ✅ | 'list.streams' |
str of Path |
*.streams tekstbestand met één stream URL per rij, d.w.z. 8 streams worden uitgevoerd met batchgrootte 8. |
Hieronder staan codevoorbeelden voor het gebruik van elk brontype:
Voorspellingsbronnen
Inferentie uitvoeren op een afbeeldingsbestand.
Inferentie uitvoeren op de huidige scherminhoud als schermafbeelding.
Inferentie uitvoeren op een afbeelding of video die op afstand wordt gehost via een URL.
Inferentie uitvoeren op een afbeelding die is geopend met Python Imaging Library (PIL).
Inferentie uitvoeren op een afbeelding die is gelezen met OpenCV.
Voer inferentie uit op een afbeelding die wordt weergegeven als een numpy array.
import numpy as np
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')
# Run inference on the source
results = model(source) # list of Results objects
Inferentie uitvoeren op een afbeelding die wordt weergegeven als een PyTorch tensor .
import torch
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
# Run inference on the source
results = model(source) # list of Results objects
Voer inferentie uit op een verzameling afbeeldingen, URL's, video's en mappen in een CSV-bestand.
Inferentie uitvoeren op een videobestand. Door stream=True
kun je een generator van resultatenobjecten maken om het geheugengebruik te verminderen.
Voer inferentie uit op alle afbeeldingen en video's in een map. Gebruik een glob-patroon om ook afbeeldingen en video's in submappen vast te leggen, bijv. path/to/dir/**/*
.
Voer inferentie uit op alle afbeeldingen en video's die overeenkomen met een glob expressie met *
tekens.
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Define a glob search for all JPG files in a directory
source = 'path/to/dir/*.jpg'
# OR define a recursive glob search for all JPG files including subdirectories
source = 'path/to/dir/**/*.jpg'
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Inferentie uitvoeren op een YouTube-video. Door stream=True
kun je een generator van Resultaatobjecten maken om het geheugengebruik voor lange video's te verminderen.
Inferentie uitvoeren op externe streamingbronnen met RTSP, RTMP, TCP en IP-adresprotocollen. Als er meerdere streams worden aangeboden in een *.streams
tekstbestand dan wordt de inferentie in batches uitgevoerd, d.w.z. 8 streams worden uitgevoerd met een batchgrootte van 8, anders worden enkele streams uitgevoerd met een batchgrootte van 1.
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Single stream with batch-size 1 inference
source = 'rtsp://example.com/media.mp4' # RTSP, RTMP, TCP or IP streaming address
# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = 'path/to/list.streams' # *.streams text file with one streaming address per row
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Argumenten voor gevolgtrekkingen
model.predict()
accepteert meerdere argumenten die kunnen worden doorgegeven op het moment van inferentie om de standaardwaarden op te heffen:
Voorbeeld
Inferentie argumenten:
Argument | Type | Standaard | Beschrijving |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Specificeert de gegevensbron voor inferentie. Kan een afbeeldingspad, videobestand, map, URL of apparaat-ID voor live feeds zijn. Ondersteunt een breed scala aan formaten en bronnen, zodat het flexibel kan worden toegepast op verschillende soorten invoer. |
conf |
float |
0.25 |
Stelt de minimale betrouwbaarheidsdrempel voor detecties in. Objecten die worden gedetecteerd met een betrouwbaarheid onder deze drempel worden genegeerd. Het aanpassen van deze waarde kan helpen bij het verminderen van vals-positieven. |
iou |
float |
0.7 |
Intersection Over Union (IoU) drempelwaarde voor niet-maximale onderdrukking (NMS). Lagere waarden resulteren in minder detecties door overlappende vakjes te elimineren, handig om duplicaten te verminderen. |
imgsz |
int or tuple |
640 |
Definieert de afbeeldingsgrootte voor inferentie. Kan een geheel getal zijn 640 voor vierkant formaat of een (hoogte, breedte) tupel. De juiste grootte kan de detectienauwkeurigheid en verwerkingssnelheid verbeteren. |
half |
bool |
False |
Maakt inferentie met halve precisie (FP16) mogelijk, wat modelinferentie op ondersteunde GPU's kan versnellen met minimale invloed op nauwkeurigheid. |
device |
str |
None |
Specificeert het apparaat voor inferentie (bijv, cpu , cuda:0 of 0 ). Hiermee kunnen gebruikers kiezen tussen CPU, een specifieke GPU of andere rekenapparaten voor het uitvoeren van modellen. |
max_det |
int |
300 |
Maximum aantal toegestane detecties per afbeelding. Beperkt het totale aantal objecten dat het model kan detecteren in een enkele inferentie, waardoor buitensporige uitvoer in dichte scènes wordt voorkomen. |
vid_stride |
int |
1 |
Frame stride voor video-ingangen. Hiermee kunnen frames in video's worden overgeslagen om de verwerking te versnellen ten koste van de temporele resolutie. Een waarde van 1 verwerkt elk frame, hogere waarden slaan frames over. |
stream_buffer |
bool |
False |
Bepaalt of alle frames gebufferd moeten worden bij het verwerken van videostreams (True ), of als het model het meest recente frame moet teruggeven (False ). Nuttig voor real-time toepassingen. |
visualize |
bool |
False |
Activeert visualisatie van modeleigenschappen tijdens inferentie, waardoor inzicht wordt verkregen in wat het model "ziet". Nuttig voor foutopsporing en modelinterpretatie. |
augment |
bool |
False |
Maakt testtijdvergroting (TTA) mogelijk voor voorspellingen, waardoor de robuustheid van detectie mogelijk verbetert ten koste van de inferentiesnelheid. |
agnostic_nms |
bool |
False |
Maakt klasse-agnostische Non-Maximum Suppression (NMS) mogelijk, die overlappende vakken van verschillende klassen samenvoegt. Nuttig in detectiescenario's met meerdere klassen waar overlappende klassen vaak voorkomen. |
classes |
list[int] |
None |
Filtert voorspellingen op een set klasse-ID's. Alleen detecties die behoren tot de opgegeven klassen worden geretourneerd. Nuttig om te focussen op relevante objecten in detectietaken met meerdere klassen. |
retina_masks |
bool |
False |
Gebruikt hoge-resolutie segmentatiemaskers indien beschikbaar in het model. Dit kan de maskerkwaliteit voor segmentatietaken verbeteren, waardoor fijnere details worden verkregen. |
embed |
list[int] |
None |
Specificeert de lagen waaruit kenmerkvectoren of inbeddingen moeten worden geëxtraheerd. Nuttig voor downstream taken zoals clusteren of zoeken naar overeenkomsten. |
Visualisatie argumenten:
Argument | Type | Standaard | Beschrijving |
---|---|---|---|
show |
bool |
False |
Als True geeft de geannoteerde afbeeldingen of video's weer in een venster. Handig voor directe visuele feedback tijdens het ontwikkelen of testen. |
save |
bool |
False |
Maakt het mogelijk om de geannoteerde afbeeldingen of video's op te slaan in een bestand. Handig voor documentatie, verdere analyse of het delen van resultaten. |
save_frames |
bool |
False |
Bij het verwerken van video's worden individuele frames opgeslagen als afbeeldingen. Handig voor het extraheren van specifieke frames of voor gedetailleerde frame-voor-frame analyse. |
save_txt |
bool |
False |
Slaat detectieresultaten op in een tekstbestand volgens het formaat [class] [x_center] [y_center] [width] [height] [confidence] . Handig voor integratie met andere analysegereedschappen. |
save_conf |
bool |
False |
Inclusief vertrouwensscores in de opgeslagen tekstbestanden. Verbetert de beschikbare details voor nabewerking en analyse. |
save_crop |
bool |
False |
Bewaart bijgesneden afbeeldingen van detecties. Nuttig voor het vergroten van datasets, analyse of het maken van gerichte datasets voor specifieke objecten. |
show_labels |
bool |
True |
Toont labels voor elke detectie in de visuele uitvoer. Biedt direct inzicht in gedetecteerde objecten. |
show_conf |
bool |
True |
Toont de betrouwbaarheidsscore voor elke detectie naast het label. Geeft inzicht in de zekerheid van het model voor elke detectie. |
show_boxes |
bool |
True |
Tekent begrenzende vakken rond gedetecteerde objecten. Essentieel voor visuele identificatie en locatie van objecten in afbeeldingen of videoframes. |
line_width |
None or int |
None |
Bepaalt de lijndikte van bounding boxes. Als None De lijndikte wordt automatisch aangepast op basis van de afbeeldingsgrootte. Biedt visuele aanpassing voor duidelijkheid. |
Beeld- en videoformaten
YOLOv8 ondersteunt verschillende afbeeldings- en videoformaten, zoals gespecificeerd in ultralytics/data/utils .py. Zie de tabellen hieronder voor de geldige achtervoegsels en voorbeeld voorspellingscommando's.
Afbeeldingen
De onderstaande tabel bevat geldige Ultralytics afbeeldingsformaten.
Achtervoegsels voor afbeeldingen | Voorbeeld voorspelopdracht | Referentie |
---|---|---|
.bmp |
yolo predict source=image.bmp |
Microsoft BMP-bestandsindeling |
.dng |
yolo predict source=image.dng |
Adobe DNG |
.jpeg |
yolo predict source=image.jpeg |
JPEG |
.jpg |
yolo predict source=image.jpg |
JPEG |
.mpo |
yolo predict source=image.mpo |
Meervoudig beeldobject |
.png |
yolo predict source=image.png |
Draagbare netwerk afbeeldingen |
.tif |
yolo predict source=image.tif |
Tag Afbeeldingsbestandsformaat |
.tiff |
yolo predict source=image.tiff |
Tag Afbeeldingsbestandsformaat |
.webp |
yolo predict source=image.webp |
WebP |
.pfm |
yolo predict source=image.pfm |
Draagbare FloatMap |
Video's
De onderstaande tabel bevat geldige Ultralytics videoformaten.
Video Achtervoegsels | Voorbeeld voorspelopdracht | Referentie |
---|---|---|
.asf |
yolo predict source=video.asf |
Formaat geavanceerde systemen |
.avi |
yolo predict source=video.avi |
Audio-Video Interleave |
.gif |
yolo predict source=video.gif |
Grafisch uitwisselingsformaat |
.m4v |
yolo predict source=video.m4v |
MPEG-4 deel 14 |
.mkv |
yolo predict source=video.mkv |
Matroska |
.mov |
yolo predict source=video.mov |
QuickTime bestandsformaat |
.mp4 |
yolo predict source=video.mp4 |
MPEG-4 Deel 14 - Wikipedia |
.mpeg |
yolo predict source=video.mpeg |
MPEG-1 deel 2 |
.mpg |
yolo predict source=video.mpg |
MPEG-1 deel 2 |
.ts |
yolo predict source=video.ts |
MPEG transportstroom |
.wmv |
yolo predict source=video.wmv |
Windows Media Video |
.webm |
yolo predict source=video.webm |
WebM Project |
Werken met resultaten
Alle Ultralytics predict()
oproepen zullen een lijst van Results
objecten:
Resultaten
Results
objecten hebben de volgende attributen:
Attribuut | Type | Beschrijving |
---|---|---|
orig_img |
numpy.ndarray |
De originele afbeelding als een numpy array. |
orig_shape |
tuple |
De oorspronkelijke afbeeldingsvorm in (hoogte, breedte) formaat. |
boxes |
Boxes, optional |
Een Boxes object met de detectie bounding boxes. |
masks |
Masks, optional |
Een Maskers object dat de detectiemaskers bevat. |
probs |
Probs, optional |
Een Probs-object met waarschijnlijkheden van elke klasse voor de classificatietaak. |
keypoints |
Keypoints, optional |
Een object met sleutelpunten dat gedetecteerde sleutelpunten bevat voor elk object. |
obb |
OBB, optional |
Een OBB-object met georiënteerde bounding boxes. |
speed |
dict |
Een woordenboek met snelheden voor preprocessing, inferentie en postprocessing in milliseconden per afbeelding. |
names |
dict |
Een woordenboek met klassennamen. |
path |
str |
Het pad naar het afbeeldingsbestand. |
Results
objecten hebben de volgende methoden:
Methode | Type terugkeer | Beschrijving |
---|---|---|
update() |
None |
Werk de kenmerken van de vakken, maskers en probs van het object Resultaten bij. |
cpu() |
Results |
Retourneert een kopie van het Results-object met alle tensoren in het CPU-geheugen. |
numpy() |
Results |
Retourneert een kopie van het Results object met alle tensoren als numpy arrays. |
cuda() |
Results |
Retourneert een kopie van het Results-object met alle tensoren in het GPU-geheugen. |
to() |
Results |
Retourneert een kopie van het Results-object met tensoren op het opgegeven apparaat en dtype. |
new() |
Results |
Retourneert een nieuw Results-object met dezelfde afbeelding, hetzelfde pad en dezelfde namen. |
plot() |
numpy.ndarray |
Tekent de detectieresultaten. Geeft een numpy array van de geannoteerde afbeelding. |
show() |
None |
Toon geannoteerde resultaten op het scherm. |
save() |
None |
Geannoteerde resultaten opslaan in een bestand. |
verbose() |
str |
Geef een logstring terug voor elke taak. |
save_txt() |
None |
Sla voorspellingen op in een txt-bestand. |
save_crop() |
None |
Bijgesneden voorspellingen opslaan in save_dir/cls/file_name.jpg . |
tojson() |
str |
Converteer het object naar JSON formaat. |
Zie voor meer informatie de Results
klassendocumentatie.
Dozen
Boxes
object kan worden gebruikt om bounding boxes te indexeren, manipuleren en converteren naar verschillende formaten.
Dozen
Hier is een tabel voor de Boxes
Methoden en eigenschappen van de klasse, inclusief hun naam, type en beschrijving:
Naam | Type | Beschrijving |
---|---|---|
cpu() |
Methode | Verplaats het object naar het CPU-geheugen. |
numpy() |
Methode | Converteer het object naar een numpy array. |
cuda() |
Methode | Verplaats het object naar het CUDA geheugen. |
to() |
Methode | Verplaats het object naar het opgegeven apparaat. |
xyxy |
Eigendom (torch.Tensor ) |
Geef de vakken terug in xyxy formaat. |
conf |
Eigendom (torch.Tensor ) |
Geeft de betrouwbaarheidswaarden van de vakken. |
cls |
Eigendom (torch.Tensor ) |
Geeft de klassewaarden van de vakken terug. |
id |
Eigendom (torch.Tensor ) |
Geef de track-ID's van de boxen terug (indien beschikbaar). |
xywh |
Eigendom (torch.Tensor ) |
Stuur de dozen terug in xywh formaat. |
xyxyn |
Eigendom (torch.Tensor ) |
Geef de vakken terug in xyxy formaat genormaliseerd door de originele afbeeldingsgrootte. |
xywhn |
Eigendom (torch.Tensor ) |
Retourneer de vakken in xywh formaat genormaliseerd door de originele afbeeldingsgrootte. |
Zie voor meer informatie de Boxes
klassendocumentatie.
Maskers
Masks
object kan worden gebruikt om maskers te indexeren, manipuleren en converteren naar segmenten.
Maskers
Hier is een tabel voor de Masks
Methoden en eigenschappen van de klasse, inclusief hun naam, type en beschrijving:
Naam | Type | Beschrijving |
---|---|---|
cpu() |
Methode | Geeft de maskers tensor op het CPU-geheugen. |
numpy() |
Methode | Geeft de maskers tensor terug als een numpy array. |
cuda() |
Methode | Geeft de maskers tensor op het GPU-geheugen. |
to() |
Methode | Geeft de maskers tensor met het opgegeven apparaat en dtype. |
xyn |
Eigendom (torch.Tensor ) |
Een lijst van genormaliseerde segmenten weergegeven als tensoren. |
xy |
Eigendom (torch.Tensor ) |
Een lijst van segmenten in pixelcoördinaten, voorgesteld als tensors. |
Zie voor meer informatie de Masks
klassendocumentatie.
Kernpunten
Keypoints
object kan worden gebruikt om coördinaten te indexeren, manipuleren en normaliseren.
Kernpunten
Hier is een tabel voor de Keypoints
Methoden en eigenschappen van de klasse, inclusief hun naam, type en beschrijving:
Naam | Type | Beschrijving |
---|---|---|
cpu() |
Methode | Geeft de sleutelpunten tensor op het CPU-geheugen. |
numpy() |
Methode | Geeft de sleutelpunten tensor terug als een numpy array. |
cuda() |
Methode | Geeft de sleutelpunten tensor op het GPU-geheugen. |
to() |
Methode | Geeft de toetspunten tensor met het opgegeven apparaat en dtype. |
xyn |
Eigendom (torch.Tensor ) |
Een lijst van genormaliseerde sleutelpunten weergegeven als tensoren. |
xy |
Eigendom (torch.Tensor ) |
Een lijst met sleutelpunten in pixelcoördinaten, voorgesteld als tensors. |
conf |
Eigendom (torch.Tensor ) |
Geeft betrouwbaarheidswaarden van toetspunten indien beschikbaar, anders geen. |
Zie voor meer informatie de Keypoints
klassendocumentatie.
Probs
Probs
object kan worden gebruikt index, get top1
en top5
indices en scores van classificatie.
Probs
Hier is een tabel met een overzicht van de methoden en eigenschappen voor de Probs
klasse:
Naam | Type | Beschrijving |
---|---|---|
cpu() |
Methode | Geeft een kopie van de probs tensor op het CPU-geheugen. |
numpy() |
Methode | Geeft een kopie van de probs tensor als een numpy array. |
cuda() |
Methode | Geeft een kopie van de probs tensor op het GPU-geheugen. |
to() |
Methode | Geeft een kopie van de probs tensor met het opgegeven apparaat en dtype. |
top1 |
Eigendom (int ) |
Index van de topklasse 1. |
top5 |
Eigendom (list[int] ) |
Indices van de top 5 klassen. |
top1conf |
Eigendom (torch.Tensor ) |
Vertrouwen van de top 1 klasse. |
top5conf |
Eigendom (torch.Tensor ) |
Vertrouwelijkheden van de top 5 klassen. |
Zie voor meer informatie de Probs
klassendocumentatie.
OBB
OBB
object kan worden gebruikt om georiënteerde bounding boxes te indexeren, manipuleren en converteren naar verschillende formaten.
OBB
Hier is een tabel voor de OBB
Methoden en eigenschappen van de klasse, inclusief hun naam, type en beschrijving:
Naam | Type | Beschrijving |
---|---|---|
cpu() |
Methode | Verplaats het object naar het CPU-geheugen. |
numpy() |
Methode | Converteer het object naar een numpy array. |
cuda() |
Methode | Verplaats het object naar het CUDA geheugen. |
to() |
Methode | Verplaats het object naar het opgegeven apparaat. |
conf |
Eigendom (torch.Tensor ) |
Geeft de betrouwbaarheidswaarden van de vakken. |
cls |
Eigendom (torch.Tensor ) |
Geeft de klassewaarden van de vakken terug. |
id |
Eigendom (torch.Tensor ) |
Geef de track-ID's van de boxen terug (indien beschikbaar). |
xyxy |
Eigendom (torch.Tensor ) |
Geef de horizontale vakken terug in xyxy formaat. |
xywhr |
Eigendom (torch.Tensor ) |
Geef de geroteerde vakken terug in xywhr formaat. |
xyxyxyxy |
Eigendom (torch.Tensor ) |
Geeft de geroteerde vakken terug in xyxyxyxy-formaat. |
xyxyxyxyn |
Eigendom (torch.Tensor ) |
Retourneert de geroteerde vakken in xyxyxyxy-formaat genormaliseerd door de afbeeldingsgrootte. |
Zie voor meer informatie de OBB
klassendocumentatie.
Resultaten plotten
De plot()
methode in Results
objecten vergemakkelijkt de visualisatie van voorspellingen door gedetecteerde objecten (zoals bounding boxes, maskers, sleutelpunten en waarschijnlijkheden) op de oorspronkelijke afbeelding te leggen. Deze methode retourneert de geannoteerde afbeelding als een NumPy array, zodat deze eenvoudig kan worden weergegeven of opgeslagen.
Plotten
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Run inference on 'bus.jpg'
results = model(['bus.jpg', 'zidane.jpg']) # results list
# Visualize the results
for i, r in enumerate(results):
# Plot results image
im_bgr = r.plot() # BGR-order numpy array
im_rgb = Image.fromarray(im_bgr[..., ::-1]) # RGB-order PIL image
# Show results to screen (in supported environments)
r.show()
# Save results to disk
r.save(filename=f'results{i}.jpg')
plot()
Methode Parameters
De plot()
De methode ondersteunt verschillende argumenten om de uitvoer aan te passen:
Argument | Type | Beschrijving | Standaard |
---|---|---|---|
conf |
bool |
Betrouwbaarheidsscores voor detectie opnemen. | True |
line_width |
float |
Lijnbreedte van begrenzende vakken. Schaalt met de afbeeldingsgrootte als None . |
None |
font_size |
float |
Lettergrootte tekst. Schaalt met de afbeeldingsgrootte als None . |
None |
font |
str |
Lettertypenaam voor tekstannotaties. | 'Arial.ttf' |
pil |
bool |
Retourneert de afbeelding als een PIL-afbeeldingsobject. | False |
img |
numpy.ndarray |
Alternatieve afbeelding voor plotten. Gebruikt de originele afbeelding als None . |
None |
im_gpu |
torch.Tensor |
GPU-versnelde afbeelding voor het sneller plotten van maskers. Vorm: (1, 3, 640, 640). | None |
kpt_radius |
int |
Straal voor getekende toetspunten. | 5 |
kpt_line |
bool |
Verbind sleutelpunten met lijnen. | True |
labels |
bool |
Klasse-labels opnemen in annotaties. | True |
boxes |
bool |
Overlay bounding boxes op de afbeelding. | True |
masks |
bool |
Maskers over de afbeelding leggen. | True |
probs |
bool |
Neem classificatiekansen op. | True |
show |
bool |
Geef de geannoteerde afbeelding direct weer met de standaard afbeeldingsviewer. | False |
save |
bool |
Sla de geannoteerde afbeelding op in een bestand gespecificeerd door filename . |
False |
filename |
str |
Pad en naam van het bestand om de geannoteerde afbeelding op te slaan als save is True . |
None |
Thread-veilige inferentie
Het garanderen van thread safety tijdens inferentie is cruciaal als je meerdere YOLO modellen parallel uitvoert op verschillende threads. Thread-safe inferentie garandeert dat de voorspellingen van elke thread geïsoleerd zijn en niet met elkaar interfereren, waardoor race condities worden vermeden en consistente en betrouwbare uitvoer wordt gegarandeerd.
Bij het gebruik van YOLO modellen in een toepassing met meerdere threads, is het belangrijk om aparte modelobjecten te instantiëren voor elke thread of thread-lokale opslag te gebruiken om conflicten te voorkomen:
Thread-veilige inferentie
Installeer een enkel model in elke thread voor thread-veilige inferentie:
from ultralytics import YOLO
from threading import Thread
def thread_safe_predict(image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
local_model = YOLO("yolov8n.pt")
results = local_model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()
Voor een diepgaande blik op thread-safe inferentie met YOLO modellen en stapsgewijze instructies, kun je onze YOLO Thread-Safe Inference Guide raadplegen. Deze gids geeft je alle benodigde informatie om veelvoorkomende valkuilen te vermijden en ervoor te zorgen dat je multi-threaded inferentie soepel verloopt.
Streaming bron for
-lus
Hier is een Python script dat OpenCV gebruikt (cv2
) en YOLOv8 om inferentie op videoframes uit te voeren. Dit script gaat ervan uit dat je de benodigde pakketten al hebt geïnstalleerd (opencv-python
en ultralytics
).
Streaming for-lus
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO('yolov8n.pt')
# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
Dit script voert voorspellingen uit op elk frame van de video, visualiseert de resultaten en toont ze in een venster. De lus kan worden verlaten door op 'q' te drukken.
Aangemaakt 2023-11-12, Bijgewerkt 2024-05-03
Auteurs: glenn-jocher (18), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)