Ultralytics YOLO27:
Get Started

Inferenza Ultralytics per Rust#

Ultralytics Inference GitHub Ultralytics Inference Crates.io Ultralytics Inference docs.rs Ultralytics Inference Downloads Ultralytics Inference MSRV

Ultralytics Inference è una libreria di inferenza YOLO ad alte prestazioni e uno strumento a riga di comando scritto in Rust. Esegue modelli ONNX esportati tramite ONNX Runtime per fornire previsioni rapide e sicure per la memoria su immagini, video, webcam e flussi, senza richiedere un runtime Python durante l'inferenza.

Il progetto è distribuito come un singolo crate, ultralytics-inference, utilizzabile in due modi: come CLI per previsioni rapide e processi in batch oppure come libreria integrata direttamente nella tua applicazione Rust. Supporta tutte le attività Ultralytics e un'ampia gamma di backend hardware tramite un'interfaccia uniforme per i dispositivi. Per l'inferenza nel browser, lo stesso repository pubblica il pacchetto npm @ultralytics/yolo; consulta la guida alla configurazione.

Perché usare Rust per l'inferenza?#

  • Velocità nativa e ingombro ridotto. Viene compilato in un binario nativo senza interprete, ideale per server, container e dispositivi edge.
  • Sicurezza della memoria. Il modello di proprietà di Rust elimina intere categorie di errori in fase di esecuzione senza un garbage collector.
  • Tutte le attività YOLO. Rilevamento, segmentazione, segmentazione semantica, stima della profondità, classificazione, posa e OBB tramite un'unica API.
  • Ampio supporto hardware. CPU più provider di esecuzione CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm e XNNPACK, selezionabili in fase di compilazione.
  • Preelaborazione sulla GPU. Un kernel CUDA fuso facoltativo esegue letterbox, normalizzazione e conversione del layout sulla GPU e passa il risultato al modello senza uscire dal dispositivo.
  • Download automatico. I nomi noti dei modelli YOLO e gli asset di esempio vengono scaricati automaticamente al primo utilizzo.
Cerchi il pacchetto Python?

Questa pagina descrive il crate Rust autonomo. Per il flusso di lavoro Python (addestramento, convalida, esportazione e previsione), consulta la Guida rapida principale e la modalità Predict. Esporta qualsiasi modello Ultralytics in ONNX con l'integrazione ONNX, quindi eseguilo qui.

Installazione#

È richiesto Rust 1.89 o versione successiva. La funzionalità video richiede inoltre FFmpeg dalla versione 6 alla 9 installato nel sistema.

# Install the command-line tool from crates.io
cargo install ultralytics-inference

# Or with GPU support compiled in
cargo install ultralytics-inference --features cuda,tensorrt

Il binario si trova in ~/.cargo/bin/ultralytics-inference (Linux e macOS) oppure in %USERPROFILE%\.cargo\bin\ su Windows.

Guida rapida alla CLI#

La CLI espone un sottocomando predict. Senza argomenti, scarica un modello di rilevamento nano e immagini di esempio, esegue l'inferenza e salva i risultati annotati in runs/detect/predict.

# Detect on the built-in samples (downloads model and images)
ultralytics-inference predict

# Detect on your own image
ultralytics-inference predict --model yolo26n.onnx --source image.jpg

# Segmentation (auto-downloads yolo26n-seg.onnx)
ultralytics-inference predict --task segment --source image.jpg

# Pose on a video, shown live in a window
ultralytics-inference predict --task pose --source video.mp4 --show

# Depth estimation (auto-downloads yolo26n-depth.onnx)
ultralytics-inference predict --task depth --source image.jpg

# Tune thresholds and filter to specific classes
ultralytics-inference predict --source image.jpg --conf 0.5 --iou 0.45 --classes "0,1,2"

# Run a whole folder on the GPU in half precision
ultralytics-inference predict --source images/ --device cuda:0 --quantize 16

Flag comuni:

FlagPredefinitoDescrizione
--model, -myolo26n.onnxPercorso di un modello ONNX; un nome YOLO riconosciuto viene scaricato automaticamente.
--taskdetectUno tra detect, segment, semantic, depth, classify, pose, obb.
--source, -sesempioImmagine, directory, glob, video, indice della webcam o URL.
--conf0.25Soglia di confidenza.
--iou0.7Soglia IoU per la soppressione dei non massimi.
--imgszmetadati del modelloDimensione dell'immagine per l'inferenza.
--deviceautomaticoDispositivo di esecuzione, ad esempio cuda:0, coreml, tensorrt:0.
--max-det300Numero massimo di rilevamenti per immagine.
--recttrueInferenza rettangolare con padding minimo.
--batch1Dimensione del batch per l'inferenza.
--quantizepredefinito del modelloPrecisione dell'inferenza: 8/int8, 16/fp16, 32/fp32, w8a16 oppure w8a32.
--savetrueSalva i risultati annotati in runs/<task>/predict.
--save-framesfalseSalva i singoli fotogrammi per l'input video invece di un file video.
--save-jsonfalseSalva le mappe di classe PNG della segmentazione semantica.
--showfalseMostra i risultati in una finestra.
--verbosetrueStampa i risultati e i tempi per ogni immagine.
--classestuttiFiltra i rilevamenti in base agli ID delle classi, ad esempio "0,1,2".

Guida rapida alla libreria#

Carica un modello ed esegui una previsione. I metadati del modello, come i nomi delle classi, il tipo di attività e le dimensioni dell'immagine, vengono letti automaticamente dal file ONNX.

use ultralytics_inference::YOLOModel;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Metadata (classes, task, imgsz) is parsed from the model.
    let mut model = YOLOModel::load("yolo26n.onnx")?;

    let results = model.predict("image.jpg")?;

    for result in &results {
        if let Some(boxes) = &result.boxes {
            for i in 0..boxes.len() {
                let class_id = boxes.cls()[i] as usize;
                let conf = boxes.conf()[i];
                let name = result.names.get(&class_id).map_or("unknown", |s| s.as_str());
                println!("{name} {conf:.2}");
            }
        }
    }

    Ok(())
}

Usa InferenceConfig per controllare soglie, dimensioni dell'immagine, precisione e dispositivo con un'API basata su builder:

use ultralytics_inference::{Device, InferenceConfig, Quantization, YOLOModel};

let config = InferenceConfig::new()
    .with_confidence(0.5)
    .with_iou(0.45)
    .with_imgsz(640, 640)
    .with_device(Device::Cuda(0))
    .with_quantize(Quantization::Fp16);

let mut model = YOLOModel::load_with_config("yolo26n.onnx", config)?;
let results = model.predict("image.jpg")?;

Ogni attività popola un campo diverso in Results. Ogni scheda qui sotto è un programma completo ed eseguibile; il modello e gli input di esempio vengono scaricati automaticamente alla prima esecuzione. Sostituisci predict_default() con predict("image.jpg") per lavorare con i tuoi file.

use ultralytics_inference::YOLOModel;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut model = YOLOModel::load("yolo26n.onnx")?;
    let results = model.predict_default()?;

    for result in &results {
        if let Some(boxes) = &result.boxes {
            println!("{} detections", boxes.len());
            let xyxy = boxes.xyxy(); // rows of [x1, y1, x2, y2]
            for i in 0..boxes.len() {
                let class_id = boxes.cls()[i] as usize;
                let name = result.names.get(&class_id).map_or("unknown", |s| s.as_str());
                println!("  {name} {:.2} {:?}", boxes.conf()[i], xyxy.row(i).to_vec());
            }
        }
    }

    Ok(())
}

Attività supportate#

Sono supportate tutte le attività di Ultralytics. Se ometti --model, viene scaricato automaticamente il modello nano corrispondente all'attività selezionata.

Attività--taskOutputModello predefinito
RilevamentodetectRiquadri di delimitazione e classiyolo26n.onnx
Segmentazione di istanzesegmentRiquadri e maschere per ogni istanzayolo26n-seg.onnx
Segmentazione semanticasemanticMappa delle classi per pixelyolo26n-sem.onnx
Stima della profonditàdepthMappa di profondità per pixel in metriyolo26n-depth.onnx
ClassificazioneclassifyProbabilità delle classiyolo26n-cls.onnx
PosaposeRiquadri e punti chiaveyolo26n-pose.onnx
Riquadri orientatiobbRiquadri di delimitazione ruotatiyolo26n-obb.onnx

Compatibilità dei modelli#

Qualsiasi modello Ultralytics esportato in ONNX può essere caricato da un file locale. Il download automatico è disponibile per i nomi standard dei modelli YOLO26, YOLO11 e YOLOv8 nelle dimensioni n, s, m, l e x:

Famiglia di modelliVarianti scaricabili automaticamente
YOLO26yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls, -sem e -depth
YOLO11yolo11{n,s,m,l,x}.onnx, -seg, -pose, -obb e -cls
YOLOv8yolov8{n,s,m,l,x}.onnx, -seg, -pose, -obb e -cls

La segmentazione semantica (-sem) e la stima della profondità (-depth) sono disponibili solo con YOLO26. I modelli di rilevamento RT-DETR funzionano, ma non vengono scaricati automaticamente: prima esportane uno in ONNX.

Sorgenti di input#

L'argomento --source (e il tipo Source nella libreria) accetta molti tipi di input, rilevati automaticamente a partire dalla stringa:

OrigineEsempioNote
Immagineimage.jpgFile singolo.
Directoryimages/Tutte le immagini nella cartella.
Globimages/*.jpgPattern in stile shell.
Videovideo.mp4Richiede la funzionalità video.
Webcam0Richiede la funzionalità video.
Streamrtsp://...Richiede la funzionalità video.
URLhttps://example.com/image.jpgDownload di immagini remote.

Dispositivi e provider di esecuzione#

I backend GPU e acceleratori vengono compilati come funzionalità Cargo e selezionati in fase di esecuzione con --device (CLI) o Device (libreria). Se non specifichi un dispositivo, i provider compilati nella build vengono registrati seguendo un ordine di preferenza fisso (prima TensorRT, poi CUDA e così via); pertanto, una build con solo le funzionalità predefinite viene eseguita su CPU.

Stringa del dispositivoVariante DeviceFunzionalità di buildHardware
cpuDevice::CpuintegratoQualsiasi CPU
cuda:0Device::Cuda(0)cudaGPU NVIDIA
tensorrt:0Device::TensorRt(0)tensorrtGPU NVIDIA, ottimizzata
coremlDevice::CoreMlcoremlApple Silicon / macOS
intel:cpuDevice::IntelCpuopenvinoCPU Intel
intel:gpuDevice::IntelGpuopenvinoGPU Intel
intel:npuDevice::IntelNpuopenvinoNPU Intel
directml:0Device::DirectMl(0)directmlGPU Windows
rocm:0Device::Rocm(0)rocmGPU AMD
xnnpackDevice::XnnpackxnnpackCPU ottimizzata
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrt

Accelerazione GPU e preelaborazione CUDA#

Sull'hardware NVIDIA, la funzionalità cuda abilita il provider di esecuzione CUDA, mentre tensorrt aggiunge il provider TensorRT per un'ulteriore ottimizzazione. Per ottenere la latenza più bassa possibile, la funzionalità cuda-preprocess trasferisce la preelaborazione sulla GPU.

cuda-preprocess esegue il ridimensionamento letterbox, la normalizzazione e la conversione del layout da HWC a CHW come un unico kernel CUDA fuso, quindi passa il risultato al modello come tensore del dispositivo senza copie. Il fotogramma grezzo a 8 bit viene comunque caricato sulla GPU, attraverso un buffer di staging bloccato sulle GPU discrete; il kernel elimina il ridimensionamento, la normalizzazione e la conversione del layout sulla CPU, oltre al caricamento separato del tensore preelaborato, con vantaggi soprattutto per i batch ad alto throughput e gli stream in tempo reale.

# Build with fused GPU preprocessing (implies cuda + tensorrt)
cargo build --release --features cuda-preprocess

Il percorso rapido viene usato automaticamente, senza modifiche all'API, se sono soddisfatte tutte le seguenti condizioni: la funzionalità è compilata, il dispositivo è CUDA o TensorRT, l'attività è detect, segment, pose, OBB, segmentazione semantica (solo immagini singole) o stima della profondità e il modello usa input FP32. È abilitato per impostazione predefinita e può essere disattivato per ogni modello:

use ultralytics_inference::{Device, InferenceConfig};

let config = InferenceConfig::new()
    .with_device(Device::TensorRt(0))
    .with_cuda_preprocess(false); // force CPU preprocessing
Fai corrispondere il tuo toolkit CUDA

cuda-preprocess richiede un toolkit CUDA corrispondente in fase di compilazione e usa NVRTC in fase di esecuzione per il kernel di preelaborazione fuso. Consulta la guida all'accelerazione CUDA e TensorRT per i requisiti delle versioni e la risoluzione dei problemi.

Funzionalità Cargo#

Le funzionalità vengono abilitate in fase di compilazione. Le impostazioni predefinite includono l'annotazione e la visualizzazione dal vivo.

CaratteristicaPredefinitoScopo
annotatesìDisegna riquadri, maschere, punti chiave ed etichette; necessario per --save.
visualizesìVisualizzazione in tempo reale in una finestra per --show.
videonoLeggi e scrivi file video (richiede FFmpeg dalla versione 6 alla 9).
cudanoProvider di esecuzione NVIDIA CUDA.
tensorrtnoProvider di esecuzione NVIDIA TensorRT.
cuda-preprocessnoPreelaborazione GPU fusa (implica cuda, tensorrt).
coremlnoProvider di esecuzione Apple CoreML.
openvinonoProvider di esecuzione Intel OpenVINO.
rocmnoProvider di esecuzione AMD ROCm.
directmlnoProvider di esecuzione Windows DirectML.

I gruppi di utilità riuniscono provider correlati: nvidia (cuda, tensorrt), amd (rocm, migraphx), intel (openvino, onednn), mobile (nnapi, coreml, qnn) e all (annotate, visualize, video). Sono disponibili anche altri provider, come nnapi, qnn, xnnpack, webgpu e altri ancora.

Abilita le funzionalità durante l'installazione della CLI o l'aggiunta della libreria:

cargo install ultralytics-inference --features video
cargo install ultralytics-inference --features cuda,tensorrt
[dependencies]
ultralytics-inference = { version = "0.0.50", features = ["video"] }

Output e salvataggio#

Per impostazione predefinita, le previsioni vengono annotate e salvate in una directory di esecuzione con numerazione incrementale automatica:

runs/
└── detect/
    └── predict/          # then predict2, predict3, ...
        └── image.jpg     # annotated result

La sottocartella corrisponde all'attività (runs/segment/, runs/pose/ e così via). Per le sorgenti video, l'output annotato viene scritto come file video; passa --save-frames per scrivere invece i singoli fotogrammi. Per l'attività semantic, --save-json scrive mappe di classe PNG per pixel in una sottocartella results/. Per l'attività depth, la mappa di profondità colorata viene sovrapposta all'immagine sorgente, come nell'output plot() di Ultralytics Python. Il salvataggio di immagini e video annotati richiede la funzionalità annotate; l'esportazione delle mappe di classe semantiche in PNG non la richiede. L'input e l'output video richiedono la funzionalità video.

Domande frequenti#

  • No. Il crate esegue direttamente i modelli ONNX esportati tramite ONNX Runtime. Python serve solo se prima addestri o esporti i modelli con il pacchetto Ultralytics.

  • Qualsiasi modello YOLO di Ultralytics esportato in ONNX, inclusi YOLO26, YOLO11 e YOLOv8. I nomi dei modelli riconosciuti vengono scaricati automaticamente; puoi anche indicare a --model qualsiasi file .onnx locale.

  • Esporta dal pacchetto Python, ad esempio con l'integrazione ONNX, oppure lascia che la CLI scarichi alla prima esecuzione un modello nano standard per l'attività scelta.

  • Sì, con la funzionalità video abilitata e FFmpeg dalla versione 6 alla 9 installato sul sistema. Sono supportati file video, webcam e flussi RTSP/RTMP/HTTP.

  • Entrambe sono abilitate per impostazione predefinita. annotate disegna riquadri, maschere, punti chiave ed etichette delle classi sull'immagine ed è necessaria affinché --save scriva i risultati annotati. visualize apre una finestra live per --show. Per una build più leggera e senza interfaccia grafica, che restituisce i risultati solo a livello programmatico, disabilitale con cargo build --no-default-features (riabilita le singole funzionalità secondo necessità).

  • Questa pagina offre una panoramica generale. Il riferimento API completo, suddiviso per tipo, per ogni struct pubblica, metodo e opzione di configurazione è pubblicato su docs.rs e generato direttamente dal codice sorgente.

Commenti