Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Inizia

Benchmark dei modelli con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Visualizzazione dei benchmark#

Introduzione#

Una volta addestrato e convalidato il modello, il passaggio successivo consiste nel valutare le sue prestazioni in fase di deployment. La modalità Benchmark di Ultralytics YOLO26 misura la velocità e la precisione del modello in diversi formati di esportazione.

Consulta l'anteprima non ancora rilasciata di YOLO27 per i benchmark preliminari della velocità.



Guarda: Benchmark dei modelli Ultralytics YOLO26 | Come confrontare le prestazioni dei modelli su hardware diversi?

Perché i benchmark sono fondamentali?#

  • Decisioni consapevoli: Comprendi i compromessi tra velocità e precisione.
  • Allocazione delle risorse: Scopri come si comportano i diversi formati di esportazione su hardware differenti.
  • Ottimizzazione: Scopri quale formato di esportazione offre le migliori prestazioni per il tuo caso d'uso specifico.
  • Efficienza dei costi: Sfrutta le risorse hardware in modo più efficiente in base ai risultati dei benchmark.

Metriche chiave nella modalità Benchmark#

Formati di esportazione supportati#

  • ONNX: Per prestazioni ottimali su CPU
  • TensorRT: Per la massima efficienza su GPU
  • OpenVINO: Per l'ottimizzazione su hardware Intel
  • CoreML, TensorFlow SavedModel e altri: Per diverse esigenze di distribuzione.
Suggerimento
  • Esporta in ONNX o OpenVINO per accelerare la CPU fino a 3 volte.
  • Esporta in TensorRT per accelerare la GPU fino a 5 volte.

Esempi d'uso#

Installazione consigliata

Installa Ultralytics con le dipendenze per l'esportazione prima di eseguire i benchmark, così da evitare pacchetti mancanti.

pip install "ultralytics[export]"

Esegui i benchmark di YOLO26n con tutti i formati di esportazione supportati (ONNX, TensorRT e così via).

Esempio
from ultralytics.utils.benchmarks import benchmark

# Esegui il benchmark su GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)

# Esegui il benchmark su un formato di esportazione specifico
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")

Argomenti#

Argomenti come model, data, imgsz, quantize, device, verbose e format ti consentono di adattare i benchmark alle tue esigenze e confrontare le prestazioni dei diversi formati di esportazione.

ChiaveValore predefinitoDescrizione
modelNoneSpecifica il percorso del file del modello. Accetta sia i formati .pt che .yaml, ad esempio "yolo26n.pt" per i modelli preaddestrati o i file di configurazione.
dataNonePercorso del file YAML del dataset per i benchmark, che in genere include i percorsi e le impostazioni dei dati di convalida. Esempio: "coco8.yaml". Per la classificazione, invece, accetta una directory del dataset o il nome di un dataset integrato (ad es. imagenet10).
imgsz640Dimensione dell'immagine di input per il modello. Deve essere un singolo intero per le immagini quadrate (ad es. 640); benchmark() supporta solo dimensioni quadrate.
quantizeNonePrecisione richiesta: 16 (FP16) o 8 (INT8; gli schemi PTQ richiedono i dati di calibrazione data/fraction, quelli basati solo sui pesi no); 32/non impostato corrisponde a FP32 quando il formato lo supporta: un formato che non può esportare in FP32 rifiuta un 32 esplicito oppure ripiega sulla precisione richiesta. La riga PyTorch nativa non viene esportata: solo 16 la influenza, selezionando l'inferenza FP16 al di fuori della CPU; altrimenti, viene eseguita in FP32. Ogni formato esegue quindi l'inferenza alla propria precisione di runtime. Sostituisce i flag deprecati half/int8.
deviceNoneDefinisce il dispositivo di calcolo per i benchmark, ad esempio "cpu" o "cuda:0"; se non è impostato, viene usata la prima GPU disponibile, oppure la CPU.
verboseFalseSe è impostato True o un valore float, gli errori dei benchmark (tranne le asserzioni) vengono sollevati invece di essere registrati come errori; un valore float come 0.25 verifica inoltre che la metrica di ogni formato eseguito correttamente superi tale soglia.
eps0.001Piccolo epsilon (in millisecondi) aggiunto al tempo di inferenza per immagine prima di convertirlo in FPS, per evitare la divisione per zero. Modificato raramente.
format''Esegue il benchmark solo sul formato di esportazione specificato (ad es. format=onnx). Lascialo vuoto per testare automaticamente tutti i formati supportati.
Valori predefiniti della funzione autonoma `benchmark()`

La funzione autonoma benchmark() (from ultralytics.utils.benchmarks import benchmark) usa i valori predefiniti della propria firma anziché quelli della tabella sopra, in particolare model="yolo26n.pt", imgsz=160 e device="cpu"; passa esplicitamente imgsz e device per ottenere gli stessi valori predefiniti della CLI yolo benchmark.

Formati di esportazione#

I benchmark proveranno a essere eseguiti automaticamente su tutti i formati di esportazione possibili elencati qui sotto. In alternativa, puoi eseguire i benchmark per un formato specifico usando l'argomento format, che accetta uno qualsiasi dei formati indicati qui sotto.

FormatoArgomento formatModelloMetadatiArgomenti
PyTorch-yolo26n.pt✅-
TorchScripttorchscriptyolo26n.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo11n_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None restituisce per impostazione predefinita output grezzi per la NMS esterna (YOLO26 mantiene la propria head senza NMS su Axelera). Imposta nms=False per selezionare una head senza NMS disponibile; i formati non supportati usano il proprio percorso di output nativo. Le voci nms qui sopra identificano i formati che possono incorporare la NMS con nms=True.

Consulta i dettagli completi di export nella pagina Esportazione.

Domande frequenti#

  • Ultralytics YOLO26 offre una modalità benchmark per valutare le prestazioni del tuo modello con diversi formati di esportazione. Questa modalità riporta metriche chiave come la precisione media media (mAP50-95), la precisione e il tempo di inferenza in millisecondi. Per eseguire i benchmark, puoi usare Python oppure i comandi CLI. Ad esempio, per eseguire un benchmark su una GPU:

    Esempio
    from ultralytics.utils.benchmarks import benchmark
    
    # Esegui il benchmark su GPU
    benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)

    Per maggiori dettagli sugli argomenti dei benchmark, consulta la sezione Argomenti.

  • Esportare i modelli YOLO26 in formati diversi, come ONNX, TensorRT e OpenVINO, ti consente di ottimizzare le prestazioni in base all'ambiente di distribuzione. Per esempio:

    • ONNX: Offre fino a 3 volte più velocità sulla CPU.
    • TensorRT: Offre fino a 5 volte più velocità sulla GPU.
    • OpenVINO: Ottimizzato specificamente per l'hardware Intel.

    Questi formati migliorano la velocità di inferenza sull'hardware di destinazione, rendendo i modelli più efficienti per varie applicazioni reali. Visita la pagina Esportazione per tutti i dettagli.

  • Eseguire benchmark sui modelli YOLO26 è essenziale per diversi motivi:

    • Decisioni consapevoli: Comprendi i compromessi tra velocità e precisione.
    • Allocazione delle risorse: Valuta le prestazioni sulle diverse opzioni hardware.
    • Ottimizzazione: Individua il formato di esportazione che offre le migliori prestazioni per casi d'uso specifici.
    • Efficienza dei costi: Ottimizza l'uso dell'hardware in base ai risultati dei benchmark.

    Metriche chiave come mAP50-95, la precisione Top-1 e il tempo di inferenza aiutano a effettuare queste valutazioni. Consulta la sezione Metriche chiave per saperne di più.

  • YOLO26 supporta diversi formati di esportazione, ciascuno pensato per specifici hardware e casi d'uso:

    • ONNX: Ideale per le prestazioni su CPU.
    • TensorRT: Ideale per l'efficienza su GPU.
    • OpenVINO: Ottimizzato per l'hardware Intel.
    • CoreML e TensorFlow: CoreML per i dispositivi Apple; i formati TensorFlow per il deployment su dispositivi mobili, sul Web e per l'ML in generale.

    Per l'elenco completo dei formati supportati e dei rispettivi vantaggi, consulta la sezione Formati di esportazione supportati.

  • Quando esegui i benchmark, puoi personalizzare diversi argomenti in base alle tue esigenze:

    • model: Percorso del file del modello (ad es. "yolo26n.pt").
    • data: Percorso del file YAML del dataset (ad es. "coco8.yaml"); per la classificazione, invece, accetta una directory del dataset o il nome di un dataset integrato (ad es. imagenet10).
    • imgsz: Dimensione quadrata dell'immagine di input, espressa come singolo intero, ad esempio 640. La modalità Benchmark usa la stessa dimensione quadrata per le immagini in PyTorch e nei formati esportati, per garantire un confronto equo.
    • quantize: Precisione richiesta: 16 per FP16, 8 per INT8 (utile per i dispositivi edge); 32/non impostato corrisponde a FP32 quando il formato lo supporta: un formato che non può esportare in FP32 rifiuta un 32 esplicito oppure ripiega sulla precisione richiesta. La riga PyTorch nativa non viene esportata: solo 16 la influenza, selezionando l'inferenza FP16 al di fuori della CPU; altrimenti, viene eseguita in FP32. Ogni formato esegue quindi l'inferenza alla propria precisione di runtime.
    • device: Specifica il dispositivo di calcolo (ad es. "cpu", "cuda:0").
    • verbose: Solleva un errore in caso di problemi con i benchmark anziché registrarli; passa un valore float per richiedere anche che la metrica di ciascun formato superi tale soglia.

    Per l'elenco completo degli argomenti, consulta la sezione Argomenti.

Commenti39

Fai una domanda, condividi i tuoi risultati o aiuta qualcun altro.

  1. bayda369bayda369GitHub

    Hi, I want to customize the yolov8 to detect and track only the objects determined by the user, like selecting 3 persons in different positions out of 10 persons in the video appears in the first frame of the video and ignore any other persons, what are your suggestions?

    1
    1. Paula DerrengerPaula DerrengerUltralytics

      @bayda369 hello,

      For customizing YOLOv8 to detect and track specific objects (like selecting certain individuals from a video), you can approach this by integrating a pre-processing step to identify and tag the objects of interest in the first frame. Here’s a brief outline on how you might proceed:

      1. Object Detection: Use YOLOv8 to detect all persons in the first frame.
      2. Object Selection: Implement a method to select the desired objects. This could be manual selection via bounding box coordinates or an automated method based on certain criteria.
      3. Tracking: Once the objects are tagged, you can use the tracking functionality to follow these objects across frames. You might need to modify the tracking logic to focus only on the tagged objects.

      For the tracking part, you can utilize the existing tracking capabilities of YOLOv8, which supports multiple tracking algorithms. You may need to customize the tracking code to ensure it only tracks the initially selected objects.

      This approach requires some custom coding, especially for the selection and modified tracking logic. If you need further guidance on the specific code modifications, feel free to ask!

    2. bayda369bayda369GitHub

      yes please, I need further guidance on the specific code modifications

    3. Paula DerrengerPaula DerrengerUltralytics(modificato)

      Hello @bayda369,

      Absolutely, I'd be happy to guide you through the code needed to track only selected objects in a video. The simplest way is to use the built-in tracker, which gives every person a persistent ID, and then keep only the IDs you selected in the first frame.

      Step-by-Step Guide

      1. Track persons: run tracking with classes=[0] (person).
      2. Select IDs: choose the IDs of the persons you want from the first frame (manually or by criteria).
      3. Filter: ignore every other ID in later frames.

      Code Example

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      
      selected_ids = None
      for r in model.track("path/to/your/video/file.mp4", classes=[0], persist=True, stream=True):
          if r.boxes.id is None:
              continue
          ids = r.boxes.id.int().tolist()
      
          if selected_ids is None:
              # For simplicity, select the first 3 persons; replace with your own selection method
              selected_ids = set(ids[:3])
      
          keep = [i for i, t in enumerate(ids) if t in selected_ids]
          boxes = r.boxes.xyxy[keep]  # boxes of the selected persons only
          track_ids = [ids[i] for i in keep]
          print(track_ids, boxes)

      Feel free to customize the selection method as per your requirements. If you need further assistance, don't hesitate to ask! 😊

  2. AA278-HUBAA278-HUBGitHub

    it seems benchmark only run on Linux System ,It couldn't run on Window Enviroment?

    1. Glenn JocherGlenn JocherUltralytics(modificato)

      It runs on Windows too—only some export formats are OS‑specific (e.g., CoreML, EdgeTPU and RKNN aren’t supported on Windows); try a single supported format to verify your setup:

      yolo benchmark model=yolo26n.pt data=coco8.yaml format=onnx device=cpu

      If it still fails, please paste the yolo checks output and the full traceback here; format/OS notes are summarized in the benchmarks reference at ultralytics.utils.benchmarks.

    2. Glenn JocherGlenn JocherUltralytics(modificato)

      Glad it helped! On Windows you can also benchmark a fast CPU path with OpenVINO:

      yolo benchmark model=yolo26n.pt data=coco8.yaml format=openvino

      Setup and tips are in the OpenVINO export guide.

  3. andyg2andyg2GitHub

    Which GPUs are used in these benchmarks? I imagine the result would be different between a GTX 1650 and an H100?

    1. Glenn JocherGlenn JocherUltralytics(modificato)

      @andyg2 you're absolutely right that benchmark results vary significantly between different GPU models. The documentation doesn't specify which exact GPUs were used for the benchmark results shown. For accurate performance metrics on your specific hardware, I'd recommend running the benchmarks directly on your system using:

      from ultralytics.utils.benchmarks import benchmark
      benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)

      This will give you hardware-specific results for your GTX 1650 or any other GPU you're using, which will be much more relevant for your deployment needs than generic benchmark numbers.

    2. Glenn JocherGlenn JocherUltralytics

      @andyg2 that's a very valid point! Benchmark results without hardware specifications are indeed not very meaningful for comparison purposes. You're absolutely right that performance metrics should always include the testing hardware context. For meaningful benchmarks, it's best to run tests on your specific hardware setup to get accurate performance expectations for your deployment environment.

    3. andyg2andyg2GitHub(modificato)

      @glenn-jocher Thanks for the reply. My problem is I need to purchase over 120 small GPUs for a computer vision project.

      I guess I need to buy 10 GPUs and see how each of them do, because nobody at Ultralytics can remember how they tested their own code.

      Sorry if I'm coming across a little sarcastic here, I'm just so flabbergasted, not that this information is not included - everyone makes mistakes in documentation, but that nobody there thinks it should be included.

    4. Glenn JocherGlenn JocherUltralytics

      @andyg2 you're absolutely right, and I completely understand your frustration. This is a valid oversight on our part - benchmark results without hardware specifications are essentially meaningless for making informed purchasing decisions, especially at your scale.

      For your project requiring 120 GPUs, I'd suggest focusing on a few key considerations: look for GPUs with sufficient VRAM for your model size (typically 8GB+ for larger YOLO models), prioritize newer architectures that support TensorRT optimization well (RTX 30/40 series, A-series), and consider power efficiency for large-scale deployments.

      Your approach of testing with 10 GPUs first is actually the most reliable path forward given the current documentation gap. This will give you real-world performance data specific to your models, datasets, and deployment constraints.

      Thank you for the feedback - this highlights an important area where our documentation needs improvement to better serve users making hardware decisions.

      1
  4. josiahkim29josiahkim29GitHub

    How do i proceed to calculate the mean Average Precision of the predictions? I have noted the predictions = model(10 sample images from COCO val2017 dataset)

    is a bit different especially when you want to get the classes and scores of the predictions

    for pred in predictions[0]:
    x, y, w, h, class_id, score = pred[:6]

    1. Glenn JocherGlenn JocherUltralytics

      To calculate mean Average Precision (mAP) for your predictions, you can use the val method in Ultralytics YOLO, which evaluates the model on a dataset and provides mAP metrics. For more details, refer to the benchmarking guide.

    2. josiahkim29josiahkim29GitHub

      @glenn-jocher thank you for the response. Based on the benchmarking guide I see that I need a custom.yaml file for this specific images I am using. Is this the case? If so how do you proceed to create a custom.yaml file.

    3. Glenn JocherGlenn JocherUltralytics

      To create a custom yaml file for your specific images, you'll need to define the dataset paths and class names. You can start by copying an existing dataset file like coco128.yaml and modifying it to suit your dataset structure. For detailed guidance, please refer to the dataset preparation section in the documentation.

  5. xpeedent289xpeedent289GitHub

    Hi there, I have a question that, which dataset is use to benchmark, train, val or test ?

  6. xpeedent289xpeedent289GitHub

    Hi sir! when I use benchmark for "yolov8n.pt", it auto exports TorchScript, ONNX,... and auto benchmark for these too, but I just wanna benchmark for yolov8n.pt, so how can I adjust it ?

    1. Glenn JocherGlenn JocherUltralytics(modificato)

      To benchmark only the yolov8n.pt model without exporting to other formats, you can use the format argument to limit the benchmark to the PyTorch model. Here's how you can do it:

      from ultralytics.utils.benchmarks import benchmark
      
      # Benchmark only the PyTorch model ("-" is the PyTorch format)
      benchmark(model="yolov8n.pt", data="coco8.yaml", imgsz=640, device=0, format="-")

      Or using the CLI:

      yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640 device=0 format=-

      This will ensure that only the PyTorch model is benchmarked. For more details, you can visit the benchmark documentation.

    2. themeowsketeerthemeowsketeerGitHub

      @glenn-jocher I got this error. TypeError: benchmark() got an unexpected keyword argument 'format' I don't think by default benchmark can accept custom format argument?

    3. Glenn JocherGlenn JocherUltralytics(modificato)

      The benchmark function supports a format argument that limits the run to one export format, e.g. format=onnx. To benchmark only the PyTorch model, use format="-", for example yolo benchmark model=yolov8n.pt data=coco8.yaml format=-. Leave format unset to benchmark all formats. See the benchmark documentation for details.

  7. themeowsketeerthemeowsketeerGitHub

    Greetings, I'm facing the following error when trying to benchmark using trained weight from RT-DeTR-L model, which is known to be fully supported by Ultralytics:

    KeyError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/ultralytics/utils/benchmarks.py:133, in benchmark(model, data, imgsz, half, int8, device, verbose) 132 assert i != 5 or platform.system() == "Darwin", "inference only supported on macOS>=10.13" # CoreML --> 133 exported_model.predict(ASSETS / "bus.jpg", imgsz=imgsz, device=device, half=half) 135 # Validate

    File /opt/conda/lib/python3.10/site-packages/ultralytics/engine/model.py:563, in Model.predict(self, source, stream, predictor, **kwargs) 562 self.predictor.set_prompts(prompts) --> 563 return self.predictor.predict_cli(source=source) if is_cli else self.predictor(source=source, stream=stream)

    File /opt/conda/lib/python3.10/site-packages/ultralytics/engine/predictor.py:168, in BasePredictor.call(self, source, model, stream, *args, **kwargs) 167 else: --> 168 return list(self.stream_inference(source, model, *args, **kwargs))

    File /opt/conda/lib/python3.10/site-packages/torch/utils/_contextlib.py:36, in _wrap_generator..generator_context(*args, **kwargs) 35 with ctx_factory(): ---> 36 response = gen.send(None) 38 while True:

    File /opt/conda/lib/python3.10/site-packages/ultralytics/engine/predictor.py:274, in BasePredictor.stream_inference(self, source, model, *args, **kwargs) 273 if self.args.verbose or self.args.save or self.args.save_txt or self.args.show: --> 274 s[i] += self.write_results(i, Path(paths[i]), im, s) 276 # Print batch results

    File /opt/conda/lib/python3.10/site-packages/ultralytics/engine/predictor.py:334, in BasePredictor.write_results(self, i, p, im, s) 333 result.save_dir = self.save_dir.str() # used in other locations --> 334 string += f"{result.verbose()}{result.speed['inference']:.1f}ms" 336 # Add predictions to image

    File /opt/conda/lib/python3.10/site-packages/ultralytics/engine/results.py:633, in Results.verbose(self) 632 n = (boxes.cls == c).sum() # detections per class --> 633 log_string += f"{n} {self.names[int(c)]}{'s' * (n > 1)}, " 634 return log_string

    KeyError: 25

    During handling of the above exception, another exception occurred:

    AssertionError Traceback (most recent call last) Cell In[11], line 3 1 from ultralytics.utils.benchmarks import benchmark ----> 3 benchmark( 4 model = "/kaggle/working/weight_rtdetr/last_rtdetr.pt", 5 data = "Yolo_path_fixed.yaml", 6 imgsz = 640, 7 device = 0, 8 half = False, 9 verbose = True 10 )

    File /opt/conda/lib/python3.10/site-packages/ultralytics/utils/benchmarks.py:146, in benchmark(model, data, imgsz, half, int8, device, verbose) 144 except Exception as e: 145 if verbose: --> 146 assert type(e) is AssertionError, f"Benchmark failure for {name}: {e}" 147 LOGGER.warning(f"ERROR ❌️ Benchmark failure for {name}: {e}") 148 y.append([name, emoji, round(file_size(filename), 1), None, None, None]) # mAP, t_inference

    AssertionError: Benchmark failure for PyTorch: 25

    Any idea how this exception is caused? My code snippet is as follows: from ultralytics.utils.benchmarks import benchmark

    benchmark( model = "/kaggle/working/weight_rtdetr/last_rtdetr.pt", data = "Yolo_path_fixed.yaml", imgsz = 640, device = 0, half = False, verbose = True )

    1. Glenn JocherGlenn JocherUltralytics

      @themeowsketeer thank you for reporting this issue. It seems like the error is related to a missing class name in the model's names attribute. Please ensure that your model and dataset are correctly configured and that the latest versions of the Ultralytics package are installed. If the issue persists, try running the benchmark with a different model or dataset to isolate the problem. For more details on benchmarking, you can refer to our documentation.

    2. themeowsketeerthemeowsketeerGitHub

      YOLO model works flawlessly with the command, while RT-DeTR models just do not work at all. AssertionError returns different error code everytime: 8, 13 or 25. Any other method I could try?

    3. Glenn JocherGlenn JocherUltralytics

      It seems like the issue might be related to the RT-DeTR model's class names. Please ensure your dataset and model are correctly configured, and try running the benchmark with the latest version of the Ultralytics package. If the problem persists, consider testing with a different model or dataset to isolate the issue. For more details, refer to our benchmarking documentation.

  8. WooFy11WooFy11GitHub

    @title Speed Tracker

    import cv2 import numpy as np from ultralytics import YOLO

    from ultralytics.utils.checks import check_imshow from ultralytics.utils.plotting import Annotator, colors

    from collections import defaultdict

    track_history = defaultdict(lambda: []) model = YOLO("/content/drive/MyDrive/DATASET_TUGASAKHIR/PlayerResults/weights/best.pt") names = model.model.names video_path = "/content/drive/MyDrive/DATASET_TUGASAKHIR/testvid/BDEvid1.mp4" cap = cv2.VideoCapture(video_path) assert cap.isOpened(), "Error reading video file"

    w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

    result = cv2.VideoWriter("SpeedTracker.avi", cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))

    time_per_frame = 1.0 / fps real_world_scale = 0.05 # Example: 0.05 meters per pixel

    while cap.isOpened(): success, frame = cap.read() if success: results = model.track(frame, persist=True, verbose=False, tracker="/content/drive/MyDrive/DATASET_TUGASAKHIR/Tracker/bytetrack.yaml") boxes = results[0].boxes.xyxy.cpu()

        if results[0].boxes.id is not None:
    
            # Extract prediction results
            clss = results[0].boxes.cls.cpu().tolist()
            track_ids = results[0].boxes.id.int().cpu().tolist()
            confs = results[0].boxes.conf.float().cpu().tolist()
    
            # Annotator Init
            annotator = Annotator(frame, line_width=2)
    
            for box, cls, track_id in zip(boxes, clss, track_ids):
                # Store tracking history
                track = track_history[track_id]
                track.append((int((box[0] + box[2]) / 2), int((box[1] + box[3]) / 2)))
                if len(track) > 30:
                    track.pop(0)
    
                if len(track) >= 2:
                    # Calculate pixel distance between the last and second to last points
                    dx = track[-1][0] - track[-2][0]
                    dy = track[-1][1] - track[-2][1]
                    pixel_distance = (dx ** 2 + dy ** 2) ** 0.5
                    real_distance = pixel_distance * real_world_scale
                    speed = real_distance / time_per_frame  # speed in meters per second
                    label = f"{names[int(cls)]} {track_id} {speed:.2f} m/s"
                    annotator.box_label(box, color=colors(int(cls), True), label=label)
    
                    # Plot tracks
                    points = np.array(track, dtype=np.int32).reshape((-1, 1, 2))
                    cv2.circle(frame, (track[-1]), 7, colors(int(cls), True), -1)
                    cv2.polylines(frame, [points], isClosed=False, color=colors(int(cls), True), thickness=2)
                else:
                    label = f"{names[int(cls)]} {track_id}"
                    annotator.box_label(box, color=colors(int(cls), True), label=label)
    
        result.write(frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

    result.release() cap.release() cv2.destroyAllWindows()

    how to collect the ground truth ID's from this code

  9. WooFy11WooFy11GitHub

    @title Speed Tracker

    import cv2 import numpy as np from ultralytics import YOLO

    from ultralytics.utils.checks import check_imshow from ultralytics.utils.plotting import Annotator, colors

    from collections import defaultdict

    track_history = defaultdict(lambda: []) model = YOLO("/content/drive/MyDrive/DATASET_TUGASAKHIR/PlayerResults/weights/best.pt") names = model.model.names video_path = "/content/drive/MyDrive/DATASET_TUGASAKHIR/testvid/BDEvid1.mp4" cap = cv2.VideoCapture(video_path) assert cap.isOpened(), "Error reading video file"

    w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

    result = cv2.VideoWriter("SpeedTracker.avi", cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))

    time_per_frame = 1.0 / fps real_world_scale = 0.05 # Example: 0.05 meters per pixel

    while cap.isOpened(): success, frame = cap.read() if success: results = model.track(frame, persist=True, verbose=False, tracker="/content/drive/MyDrive/DATASET_TUGASAKHIR/Tracker/bytetrack.yaml") boxes = results[0].boxes.xyxy.cpu()

        if results[0].boxes.id is not None:
    
            # Extract prediction results
            clss = results[0].boxes.cls.cpu().tolist()
            track_ids = results[0].boxes.id.int().cpu().tolist()
            confs = results[0].boxes.conf.float().cpu().tolist()
    
            # Annotator Init
            annotator = Annotator(frame, line_width=2)
    
            for box, cls, track_id in zip(boxes, clss, track_ids):
                # Store tracking history
                track = track_history[track_id]
                track.append((int((box[0] + box[2]) / 2), int((box[1] + box[3]) / 2)))
                if len(track) > 30:
                    track.pop(0)
    
                if len(track) >= 2:
                    # Calculate pixel distance between the last and second to last points
                    dx = track[-1][0] - track[-2][0]
                    dy = track[-1][1] - track[-2][1]
                    pixel_distance = (dx ** 2 + dy ** 2) ** 0.5
                    real_distance = pixel_distance * real_world_scale
                    speed = real_distance / time_per_frame  # speed in meters per second
                    label = f"{names[int(cls)]} {track_id} {speed:.2f} m/s"
                    annotator.box_label(box, color=colors(int(cls), True), label=label)
    
                    # Plot tracks
                    points = np.array(track, dtype=np.int32).reshape((-1, 1, 2))
                    cv2.circle(frame, (track[-1]), 7, colors(int(cls), True), -1)
                    cv2.polylines(frame, [points], isClosed=False, color=colors(int(cls), True), thickness=2)
                else:
                    label = f"{names[int(cls)]} {track_id}"
                    annotator.box_label(box, color=colors(int(cls), True), label=label)
    
        result.write(frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

    result.release() cap.release() cv2.destroyAllWindows()

    how do we benchmark the bytetrack perfomance per player ID?

  10. Zency-SunZency-SunGitHub

    Hi, what should I do if I want to benchmark using only Pytorch, ONNX, openvino and tensorRT?

    1. Paula DerrengerPaula DerrengerUltralytics(modificato)

      Hey there! 😊 To benchmark only PyTorch, ONNX, OpenVINO, and TensorRT, use the format argument of benchmark, which limits the run to one export format. Call it once per format ("-" is the PyTorch model):

      from ultralytics.utils.benchmarks import benchmark
      
      # "-" = PyTorch, then ONNX, OpenVINO (CPU only) and TensorRT (GPU only)
      for fmt, device in [("-", 0), ("onnx", 0), ("openvino", "cpu"), ("engine", 0)]:
          benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=device, format=fmt)

      And for CLI:

      yolo benchmark model=yolo26n.pt data=coco8.yaml imgsz=640 device=0 format=onnx
      yolo benchmark model=yolo26n.pt data=coco8.yaml imgsz=640 device=cpu format=openvino
      yolo benchmark model=yolo26n.pt data=coco8.yaml imgsz=640 device=0 format=engine

      Benchmark exports the model for you, so you don't need to export it first. Hope this helps! If there are more questions, feel free to ask.

      1
    2. Zency-SunZency-SunGitHub

      when I use the under code to deploy: ' model = YOLO("yolov8s.engine") metrics = model.val(data="ultralytics/cfg/datasets/coco128.yaml",device='cuda:0') ' but I meet the error,What should I do?,Thanks your reply!!!

      Traceback (most recent call last): File "/media/zency/SSD-Data/Codes/yolov8_v8.1.0/ultralytics/nn/autobackend.py", line 220, in init import tensorrt as trt # noqa https://developer.nvidia.com/nvidia-tensorrt-download File "/home/zency/anaconda3/envs/yolov8plus/lib/python3.9/site-packages/tensorrt/init.py", line 68, in from .tensorrt import * ImportError: libnvinfer.so.8: cannot open shared object file: No such file or directory

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last): File "/media/zency/SSD-Data/Codes/yolov8_v8.1.0/run_test.py", line 190, in yolo_mytest() File "/media/zency/SSD-Data/Codes/yolov8_v8.1.0/run_test.py", line 116, in yolo_mytest metrics = model.val(data="ultralytics/cfg/datasets/coco128.yaml",device='cuda:0') # cpu cuda:0 File "/media/zency/SSD-Data/Codes/yolov8_v8.1.0/ultralytics/engine/model.py", line 513, in val validator(model=self.model) File "/home/zency/anaconda3/envs/yolov8plus/lib/python3.9/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context return func(*args, **kwargs) File "/media/zency/SSD-Data/Codes/yolov8_v8.1.0/ultralytics/engine/validator.py", line 124, in call model = AutoBackend( File "/home/zency/anaconda3/envs/yolov8plus/lib/python3.9/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context return func(*args, **kwargs) File "/media/zency/SSD-Data/Codes/yolov8_v8.1.0/ultralytics/nn/autobackend.py", line 224, in init import tensorrt as trt # noqa File "/home/zency/anaconda3/envs/yolov8plus/lib/python3.9/site-packages/tensorrt/init.py", line 68, in from .tensorrt import * ImportError: libnvinfer.so.8: cannot open shared object file: No such file or directory Ultralytics YOLOv8.1.24 🚀 Python-3.9.18 torch-1.12.1 CUDA:0 (NVIDIA GeForce RTX 3090, 24268MiB) Loading yolov8s.engine for TensorRT inference...

    3. Zency-SunZency-SunGitHub

      I solved the problem above, but there is a new problem:

      [TRT] [W] CUDA initialization failure with error: 35

    4. Paula DerrengerPaula DerrengerUltralytics

      Hey there! 🌟 It looks like you've encountered the CUDA initialization failure error with code 35, which usually indicates a CUDA driver/runtime version mismatch or an issue with accessing your GPU.

      Here are a couple of steps you can try to resolve the issue:

      1. Check CUDA Compatibility: Ensure that the installed CUDA version is compatible with the version required by TensorRT.
      2. Update Drivers: Sometimes, simply updating your NVIDIA drivers can resolve such issues.
      3. Environment Check: Make sure your environment variables (like PATH and LD_LIBRARY_PATH for Linux) are correctly set to include paths to CUDA toolkit and libraries.

      If these steps don't help, could you provide a bit more context about your setup? Specifically:

      • The versions of CUDA, TensorRT, and PyTorch you're using.
      • The output of nvidia-smi to check if the GPU is being recognized properly.

      This information can help pinpoint the issue more accurately. Thanks for reaching out, and looking forward to getting you past this hurdle! 🚀

    5. Paula DerrengerPaula DerrengerUltralytics(modificato)

      @Zency-Sun i'm glad to hear you've resolved your previous issue! Regarding your question about model benchmarking, it's a great way to understand your model's performance across different formats. Here's a quick overview of what you might find useful:

      • Why Benchmark?: Helps you make informed decisions by understanding the trade-off between speed and accuracy across different formats and on varied hardware.
      • Key Metrics: Look at mAP50-95 for detection accuracy, and inference time for speed. This gives you a holistic view of how well your model performs.

      For benchmarking specific formats like PyTorch, ONNX, OpenVINO, and TensorRT, use the benchmark utility with the format argument. It exports the model for you:

      from ultralytics.utils.benchmarks import benchmark
      
      # "-" = PyTorch; OpenVINO runs on CPU, TensorRT on GPU
      for fmt, device in [("-", "cuda:0"), ("onnx", "cuda:0"), ("openvino", "cpu"), ("engine", "cuda:0")]:
          benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=device, format=fmt)

      And for CLI:

      yolo benchmark model=yolo26n.pt data=coco8.yaml imgsz=640 device=0 format=onnx
      # Repeat with format=openvino (device=cpu) and format=engine

      Remember, exporting to ONNX or OpenVINO can speed up CPU inference, and TensorRT is excellent for maximizing GPU efficiency. 🚀

      Let me know if there's anything else you need help with!