YOLO Vision 2026:

Ultralytics Inference para Rust#

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

Ultralytics Inference é uma biblioteca de inferência e ferramenta de linha de comando de alto desempenho para YOLO escrita em Rust. Ela executa modelos ONNX exportados por meio do ONNX Runtime para entregar previsões rápidas e seguras em termos de memória em imagens, vídeos, webcams e transmissões, sem a necessidade de um ambiente de execução Python no momento da inferência.

O projeto é distribuído como um único crate, ultralytics-inference, que podes usar de duas formas: como uma CLI para previsões rápidas e tarefas em lote, ou como uma biblioteca integrada diretamente na tua aplicação Rust. Ele suporta todas as tarefas da Ultralytics e um amplo conjunto de backends de hardware através de uma interface de dispositivo uniforme.

Por que inferência em Rust?#

  • Velocidade nativa e baixo consumo. Compila para um binário nativo sem interpretador, ideal para servidores, contentores e dispositivos de borda.
  • Segurança de memória. O modelo de ownership do Rust elimina classes inteiras de erros de runtime sem a necessidade de um coletor de lixo.
  • Todas as tarefas do YOLO. Detecção, segmentação, segmentação semântica, estimativa de profundidade, classificação, pose e OBB a partir de uma única API.
  • Amplo suporte a hardware. CPU além de CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm e provedores de execução XNNPACK selecionados no momento da compilação.
  • Pré-processamento no lado da GPU. Um kernel CUDA fundido opcional mantém o letterbox, normalização e conversão de layout no dispositivo para um caminho de entrada zero-copy.
  • Download automático. Nomes de modelos YOLO conhecidos e assets de exemplo são descarregados automaticamente na primeira utilização.
À procura do pacote Python?

Esta página aborda o crate independente em Rust. Para o fluxo de trabalho em Python (treinamento, validação, exportação e predição), consulta os guias principais Quickstart e Predict mode. Exporta qualquer modelo da Ultralytics para ONNX com a ONNX integration e, em seguida, executa-o aqui.

Instalação#

É necessário o Rust 1.89 ou mais recente. O recurso de vídeo também exige o FFmpeg 7+ instalado no 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

O binário é colocado em ~/.cargo/bin/ultralytics-inference (Linux e macOS) ou %USERPROFILE%\.cargo\bin\ no Windows.

Quickstart da CLI#

A CLI expõe um subcomando predict. Sem argumentos, ele descarrega um modelo de detecção nano e imagens de amostra, executa a inferência e guarda os resultados anotados em 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 --half

Flags comuns:

FlagPredefiniçãoDescrição
--model, -myolo26n.onnxCaminho para um modelo ONNX; um nome YOLO conhecido é descarregado automaticamente.
--taskdetectUm de detect, segment, pose, obb, classify, semantic, depth.
--source, -ssampleImagem, diretório, glob, vídeo, índice de webcam ou URL.
--conf0.25Limiar de confiança.
--iou0.7Limiar de IoU para supressão não-máxima.
--imgszmetadados do modeloTamanho da imagem de inferência.
--devicecpuDispositivo de execução, por exemplo cuda:0, coreml, tensorrt:0.
--halffalseInferência em meia-precisão FP16.
--savetrueGuardar resultados anotados em runs/<task>/predict.
--showfalseExibir resultados numa janela.
--classesallFiltrar detecções por IDs de classe, por exemplo "0,1,2".

Quickstart da biblioteca#

Carrega um modelo e executa uma previsão. Metadados do modelo como nomes de classes, tipo de tarefa e tamanho da imagem são lidos automaticamente a partir do ficheiro 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 para controlar limiares, tamanho da imagem, precisão e dispositivo com uma API de construtor:

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

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

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

Cada tarefa preenche um campo diferente em Results. Cada aba abaixo é um programa completo e executável; o modelo e as entradas de amostra são descarregados automaticamente na primeira execução. Substitui predict_default() por predict("image.jpg") para executar com os teus próprios ficheiros.

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

Tarefas suportadas#

Todas as tarefas da Ultralytics são suportadas. Quando --model é omitido, o modelo nano correspondente para a tarefa selecionada é descarregado automaticamente.

Tarefa--taskSaídaModelo padrão
DeteçãodetectCaixas delimitadoras e classesyolo26n.onnx
Segmentação de instânciassegmentCaixas mais máscaras por instânciayolo26n-seg.onnx
Segmentação semânticasemanticMapa de classes por píxelyolo26n-sem.onnx
Estimativa de profundidadedepthMapa de profundidade por pixel em metrosyolo26n-depth.onnx
ClassificaçãoclassifyProbabilidades de classeyolo26n-cls.onnx
PoseposeCaixas mais pontos-chaveyolo26n-pose.onnx
Caixas orientadasobbCaixas delimitadoras rotacionadasyolo26n-obb.onnx

Compatibilidade de modelos#

Qualquer modelo da Ultralytics exportado para ONNX pode ser carregado a partir de um ficheiro local. O descarregamento automático está disponível para os nomes de modelos padrão YOLO26, YOLO11 e YOLOv8 nos tamanhos n, s, m, l e x:

Família de modelosVariantes de download automático
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

A segmentação semântica (-sem) e a estimativa de profundidade (-depth) são exclusivas do YOLO26.

Fontes de entrada#

O argumento --source (e o tipo Source na biblioteca) aceita vários tipos de entrada, detectados automaticamente a partir da string:

OrigemExemploNotas
Imagemimage.jpgFicheiro único.
Diretórioimages/Todas as imagens na pasta.
Globimages/*.jpgPadrão estilo shell.
Vídeovideo.mp4Requer o recurso video.
Webcam0Requer o recurso video.
Streamrtsp://...Requer o recurso video.
URLhttps://example.com/image.jpgDownload de imagem remota.

Dispositivos e provedores de execução#

A inferência é executada na CPU por predefinição. Os backends de GPU e aceleradores são compilados como recursos do Cargo e selecionados em tempo de execução com --device (CLI) ou Device (biblioteca).

String do dispositivoVariante DeviceFuncionalidade de compilaçãoHardware
cpuDevice::CpuintegradoQualquer CPU
cuda:0Device::Cuda(0)cudaGPU NVIDIA
tensorrt:0Device::TensorRt(0)tensorrtGPU NVIDIA, otimizado
coremlDevice::CoreMlcoremlApple Silicon / macOS
intel:cpuDevice::IntelCpuopenvinoIntel CPU
intel:gpuDevice::IntelGpuopenvinoIntel GPU
intel:npuDevice::IntelNpuopenvinoIntel NPU
directml:0Device::DirectMl(0)directmlGPU Windows
rocm:0Device::Rocm(0)rocmGPU AMD
xnnpackDevice::XnnpackxnnpackCPU otimizado
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrt

Aceleração por GPU e pré-processamento CUDA#

Em hardware NVIDIA, o recurso cuda ativa o provedor de execução CUDA, e tensorrt adiciona o provedor TensorRT para otimização adicional. Para a menor latência possível, o recurso cuda-preprocess move o pré-processamento para a GPU.

cuda-preprocess executa o redimensionamento letterbox, a normalização e a conversão de layout HWC para CHW como um único kernel CUDA fundido, enviando depois o resultado para o modelo como um tensor de dispositivo zero-copy. Isso remove o custo de pré-processamento de CPU por imagem e a cópia de host para dispositivo, o que é mais importante para lotes de alto rendimento e transmissões em tempo real.

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

O caminho rápido é usado automaticamente, sem alterações na API, quando todas as condições a seguir são atendidas: o recurso está compilado, o dispositivo é CUDA ou TensorRT, a tarefa é detect, segment, pose, OBB, segmentação semântica ou estimativa de profundidade, e o modelo usa entrada FP32. Ele é habilitado por padrão e pode ser desativado por modelo:

use ultralytics_inference::{Device, InferenceConfig};

let config = InferenceConfig::new()
    .with_device(Device::TensorRt(0))
    .with_cuda_preprocess(false); // force CPU preprocessing
Combine o seu toolkit CUDA

cuda-preprocess requer um kit de ferramentas CUDA correspondente no momento da compilação e usa o NVRTC em tempo de execução para o kernel de pré-processamento fundido. Consulta o guia de aceleração CUDA e TensorRT para requisitos de versão e resolução de problemas.

Funcionalidades Cargo#

As funcionalidades são ativadas no momento da compilação. Os padrões cobrem anotação e exibição ao vivo.

FuncionalidadePredefiniçãoObjetivo
annotatesimDesenha caixas, máscaras, pontos-chave e rótulos; necessário para --save.
visualizesimExibição de janela em tempo real para --show.
videonãoLê e grava arquivos de vídeo (requer FFmpeg 7+).
cudanãoProvedor de execução NVIDIA CUDA.
tensorrtnãoProvedor de execução NVIDIA TensorRT.
cuda-preprocessnãoPré-processamento de GPU fundido com entrada zero-copy (implica cuda, tensorrt).
coremlnãoProvedor de execução Apple CoreML.
openvinonãoProvedor de execução Intel OpenVINO.
rocmnãoProvedor de execução AMD ROCm.
directmlnãoProvedor de execução Windows DirectML.

Grupos de conveniência agrupam provedores relacionados: nvidia (cuda, tensorrt), amd (rocm, migraphx), intel (openvino, onednn), mobile (nnapi, coreml, qnn) e all (annotate, visualize, video). Provedores adicionais como nnapi, qnn, xnnpack, webgpu e outros também estão disponíveis.

Habilite funcionalidades ao instalar a CLI ou adicionar a biblioteca:

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

Saída e salvamento#

Por padrão, as predições são anotadas e salvas em um diretório de execução com incremento automático:

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

A subpasta corresponde à tarefa (runs/segment/, runs/pose/, e assim por diante). Para fontes de vídeo, a saída anotada é gravada como um ficheiro de vídeo; passa --save-frames para gravar fotogramas individuais em vez disso. Para a tarefa semantic, --save-json grava PNGs de mapas de classe por pixel sob uma subpasta results/. Para a tarefa depth, o mapa de profundidade colorido é misturado sobre a imagem de origem, correspondendo à saída plot() do Python da Ultralytics. Guardar imagens e vídeos anotados requer o recurso annotate; a exportação de PNG de mapas de classe semânticos não requer. A entrada e saída de vídeo requerem o recurso video.

FAQ#

  • Não. O crate executa modelos ONNX exportados diretamente através do ONNX Runtime. O Python só é necessário se treinares ou exportares modelos com o pacote Ultralytics antecipadamente.

  • Qualquer modelo YOLO da Ultralytics exportado para ONNX, incluindo YOLO26, YOLO11 e YOLOv8. Nomes de modelos conhecidos são descarregados automaticamente; também podes apontar --model para qualquer ficheiro local .onnx.

  • Exporta a partir do pacote Python, por exemplo com a ONNX integration, ou deixa a CLI descarregar um modelo nano padrão para a tarefa escolhida na primeira execução.

  • Sim, com o recurso video ativado e o FFmpeg 7+ instalado no sistema. Isto abrange ficheiros de vídeo, webcams e transmissões RTSP/RTMP/HTTP.

  • Ambos estão ativados por predefinição. annotate desenha caixas, máscaras, pontos-chave e rótulos de classe na imagem e é necessário para que --save escreva os resultados anotados. visualize abre uma janela ao vivo para --show. Para uma compilação menor e sem cabeça que apenas retorna resultados programaticamente, desativa-os com cargo build --no-default-features (adiciona de volta os recursos individuais conforme necessário).

  • Esta página é uma visão geral de alto nível. A referência de API completa e detalhada para cada struct, método e opção de configuração pública é publicada no docs.rs, gerada diretamente a partir do código-fonte.

Comentários