Ultralytics YOLO27:

Ultralytics Rust için Inference#

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

Ultralytics Inference, Rust ile yazılmış, yüksek performanslı bir YOLO inference kütüphanesi ve komut satırı aracıdır. Dışa aktarılmış ONNX modellerini ONNX Runtime üzerinden çalıştırarak görüntüler, videolar, web kameraları ve akışlarda, inference sırasında Python çalışma zamanı gerektirmeden hızlı ve bellek açısından güvenli tahminler sunar.

Proje, ultralytics-inference adlı tek bir crate olarak sunulur ve iki şekilde kullanılabilir: hızlı tahminler ve toplu işler için CLI olarak veya doğrudan Rust uygulamana gömülen bir kütüphane olarak. Her Ultralytics görevini ve ortak bir cihaz arayüzü üzerinden çok çeşitli donanım arka uçlarını destekler.

Neden Rust ile inference?#

  • Yerel hız ve küçük ayak izi. Yorumlayıcı olmadan yerel bir binary'ye derlenir; sunucular, container'lar ve uç cihazlar için idealdir.
  • Bellek güvenliği. Rust'ın sahiplik modeli, çöp toplayıcı olmadan çalışma zamanı hatalarının birçok sınıfını ortadan kaldırır.
  • Tüm YOLO görevleri. Tek bir API üzerinden detect, segment, semantic segmentation, depth estimation, classify, pose ve OBB.
  • Geniş donanım desteği. CPU'nun yanı sıra CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm ve XNNPACK execution provider'ları derleme zamanında seçilir.
  • GPU tarafında ön işleme. İsteğe bağlı birleştirilmiş CUDA kernel'i letterbox, normalize ve layout dönüşümünü cihaz üzerinde tutarak sıfır kopyalı bir giriş yolu sağlar.
  • Otomatik indirme. Bilinen YOLO model adları ve örnek varlıklar ilk kullanımda otomatik olarak indirilir.
Python paketini mi arıyorsun?

Bu sayfa bağımsız Rust crate'ini ele alır. Python iş akışı (eğitim, doğrulama, dışa aktarma ve tahmin) için ana Quickstart ve Predict mode sayfalarına bak. Herhangi bir Ultralytics modelini ONNX entegrasyonu ile ONNX'e aktar, ardından burada çalıştır.

Kurulum#

Rust 1.89 veya daha yeni bir sürüm gereklidir. video özelliği ayrıca sistemde FFmpeg 7+ kurulu olmasını gerektirir.

# 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

Binary, Linux ve macOS'ta ~/.cargo/bin/ultralytics-inference, Windows'ta ise %USERPROFILE%\.cargo\bin\ konumuna yerleştirilir.

CLI hızlı başlangıç#

CLI, predict alt komutunu sunar. Argüman verilmediğinde bir nano detect modeli ile örnek görüntüleri indirir, inference çalıştırır ve açıklamalı sonuçları runs/detect/predict konumuna kaydeder.

# 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

Yaygın seçenekler:

SeçenekVarsayılanAçıklama
--model, -myolo26n.onnxBir ONNX modelinin yolu; bilinen bir YOLO adı otomatik olarak indirilir.
--taskdetectdetect, segment, pose, obb, classify, semantic, depth değerlerinden biri.
--source, -sörnekGörüntü, dizin, glob, video, web kamerası indeksi veya URL.
--conf0.25Güven eşiği.
--iou0.7NMS için IoU eşiği.
--imgszmodel meta verileriInference görüntü boyutu.
--devicecpuYürütme cihazı; örneğin cuda:0, coreml, tensorrt:0.
--halffalseFP16 yarı hassasiyetli inference.
--savetrueAçıklamalı sonuçları runs/<task>/predict konumuna kaydet.
--showfalseSonuçları bir pencerede görüntüle.
--classestümüTespitleri sınıf kimliklerine göre filtrele; örneğin "0,1,2".

Kütüphane hızlı başlangıç#

Bir model yükle ve tahmin çalıştır. Sınıf adları, görev türü ve görüntü boyutu gibi model meta verileri ONNX dosyasından otomatik olarak okunur.

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

Eşik değerlerini, görüntü boyutunu, hassasiyeti ve cihazı bir builder API ile denetlemek için InferenceConfig kullan:

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

Her görev, Results üzerinde farklı bir alanı doldurur. Aşağıdaki her sekme, çalıştırılmaya hazır eksiksiz bir programdır; model ve örnek girdiler ilk çalıştırmada otomatik olarak indirilir. Kendi dosyalarında çalıştırmak için predict_default() yerine predict("image.jpg") yaz.

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

Desteklenen görevler#

Tüm Ultralytics görevleri desteklenir. --model belirtilmediğinde, seçilen görev için eşleşen nano model otomatik olarak indirilir.

Görev--taskÇıktıVarsayılan model
AlgılamadetectSınırlayıcı kutular ve sınıflaryolo26n.onnx
Örnek segmentasyonusegmentKutular ve örnek başına maskeleryolo26n-seg.onnx
Anlamsal segmentasyonsemanticPiksel başına sınıf haritasıyolo26n-sem.onnx
Derinlik tahminidepthMetre cinsinden piksel başına derinlik haritasıyolo26n-depth.onnx
SınıflandırmaclassifySınıf olasılıklarıyolo26n-cls.onnx
PozposeKutular ve anahtar noktalaryolo26n-pose.onnx
Yönlendirilmiş kutularobbDöndürülmüş sınırlayıcı kutularyolo26n-obb.onnx

Model uyumluluğu#

ONNX'e aktarılmış herhangi bir Ultralytics modeli yerel bir dosyadan yüklenebilir. Standart YOLO26, YOLO11 ve YOLOv8 model adları için n, s, m, l ve x boyutlarında otomatik indirme kullanılabilir:

Model ailesiOtomatik indirilebilir varyantlar
YOLO26yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls, -sem ve -depth
YOLO11yolo11{n,s,m,l,x}.onnx, -seg, -pose, -obb ve -cls
YOLOv8yolov8{n,s,m,l,x}.onnx, -seg, -pose, -obb ve -cls

Semantic segmentation (-sem) ve depth estimation (-depth) yalnızca YOLO26'ya özeldir.

Girdi kaynakları#

--source bağımsız değişkeni (ve kütüphanedeki Source türü), dizeden otomatik olarak algılanan birçok girdi türünü kabul eder:

KaynakÖrnekNotlar
Görüntüimage.jpgTek dosya.
Dizinimages/Klasördeki tüm görüntüler.
Globimages/*.jpgShell tarzı desen.
Videovideo.mp4video özelliğini gerektirir.
Web Kamerası0video özelliğini gerektirir.
Akışrtsp://...video özelliğini gerektirir.
URLhttps://example.com/image.jpgUzak görüntü indirme.

Cihazlar ve execution provider'ları#

Inference varsayılan olarak CPU üzerinde çalışır. GPU ve hızlandırıcı arka uçları Cargo özellikleri olarak derlenir ve çalışma zamanında CLI için --device, kütüphane için Device ile seçilir.

Cihaz dizesiDevice varyantıDerleme özelliğiDonanım
cpuDevice::CpuyerleşikHerhangi bir CPU
cuda:0Device::Cuda(0)cudaNVIDIA GPU
tensorrt:0Device::TensorRt(0)tensorrtNVIDIA GPU, optimize edilmiş
coremlDevice::CoreMlcoremlApple Silicon / macOS
intel:cpuDevice::IntelCpuopenvinoIntel CPU
intel:gpuDevice::IntelGpuopenvinoIntel GPU
intel:npuDevice::IntelNpuopenvinoIntel NPU
directml:0Device::DirectMl(0)directmlWindows GPU
rocm:0Device::Rocm(0)rocmAMD GPU
xnnpackDevice::XnnpackxnnpackOptimize edilmiş CPU
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrt

GPU hızlandırması ve CUDA ön işleme#

NVIDIA donanımında cuda özelliği CUDA execution provider'ını etkinleştirir, tensorrt ise daha ileri optimizasyon için TensorRT provider'ını ekler. Mümkün olan en düşük gecikme için cuda-preprocess özelliği ön işlemeyi GPU'ya taşır.

cuda-preprocess, letterbox yeniden boyutlandırmayı, normalizasyonu ve HWC'den CHW'ye layout dönüşümünü tek bir birleştirilmiş CUDA kernel'i olarak çalıştırır, ardından sonucu modele sıfır kopyalı bir cihaz tensörü olarak iletir. Bu, görüntü başına CPU ön işleme maliyetini ve ana makineden cihaza kopyalamayı ortadan kaldırır; bu durum özellikle yüksek verimli toplu işlemler ve gerçek zamanlı akışlar için önemlidir.

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

Aşağıdaki koşulların tümü sağlandığında hızlı yol API değişikliği olmadan otomatik olarak kullanılır: özellik derlenmiş olmalı, cihaz CUDA veya TensorRT olmalı, görev detect, segment, pose, OBB, semantic segmentation veya depth estimation olmalı ve model FP32 girdisi kullanmalıdır. Varsayılan olarak etkindir ve model başına kapatılabilir:

use ultralytics_inference::{Device, InferenceConfig};

let config = InferenceConfig::new()
    .with_device(Device::TensorRt(0))
    .with_cuda_preprocess(false); // force CPU preprocessing
CUDA araç setini eşleştir

cuda-preprocess, derleme zamanında eşleşen bir CUDA araç seti gerektirir ve birleştirilmiş ön işleme kernel'i için çalışma zamanında NVRTC kullanır. Sürüm gereksinimleri ve sorun giderme için CUDA ve TensorRT hızlandırma kılavuzuna bak.

Cargo özellikleri#

Özellikler derleme zamanında etkinleştirilir. Varsayılanlar açıklama ekleme ve canlı görüntülemeyi kapsar.

ÖzellikVarsayılanAmaç
annotateevetKutuları, maskeleri, anahtar noktaları ve etiketleri çiz; --save için gereklidir.
visualizeevet--show için gerçek zamanlı pencere görüntüleme.
videohayırVideo dosyalarını oku ve yaz (FFmpeg 7+ gerektirir).
cudahayırNVIDIA CUDA execution provider.
tensorrthayırNVIDIA TensorRT execution provider.
cuda-preprocesshayırSıfır kopyalı girişle birleştirilmiş GPU ön işleme (cuda, tensorrt'i gerektirir).
coremlhayırApple CoreML execution provider.
openvinohayırIntel OpenVINO execution provider.
rocmhayırAMD ROCm execution provider.
directmlhayırWindows DirectML execution provider.

Kolaylık grupları, ilgili provider'ları bir araya getirir: nvidia (cuda, tensorrt), amd (rocm, migraphx), intel (openvino, onednn), mobile (nnapi, coreml, qnn) ve all (annotate, visualize, video). nnapi, qnn, xnnpack, webgpu gibi ek provider'lar ve diğerleri de kullanılabilir.

CLI'yi yüklerken veya kütüphaneyi eklerken özellikleri etkinleştir:

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

Çıktı ve kaydetme#

Varsayılan olarak tahminler açıklanır ve otomatik olarak artan bir çalıştırma dizinine kaydedilir:

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

Alt klasör görevle eşleşir (runs/segment/, runs/pose/ ve bu şekilde devam eder). Video kaynakları için açıklamalı çıktı bir video dosyası olarak yazılır; bunun yerine tek tek kareleri yazmak için --save-frames değerini ilet. semantic görevi için --save-json, piksel başına sınıf haritası PNG'lerini bir results/ alt klasörünün altına yazar. depth görevi için renklendirilmiş derinlik haritası kaynak görüntü üzerine harmanlanır ve Ultralytics Python plot() çıktısıyla eşleşir. Açıklamalı görüntü ve video kaydetme için annotate özelliği gerekir; anlamsal sınıf haritası PNG dışa aktarımı için gerekmez. Video girişi ve çıktısı için video özelliği gerekir.

SSS#

  • Hayır. Crate, dışa aktarılmış ONNX modellerini doğrudan ONNX Runtime üzerinden çalıştırır. Öncesinde Ultralytics paketiyle model eğitiyor veya dışa aktarıyorsan yalnızca Python gerekir.

  • YOLO26, YOLO11 ve YOLOv8 dahil olmak üzere ONNX'e dışa aktarılmış tüm Ultralytics YOLO modellerini çalıştırabilirsin. Bilinen model adları otomatik olarak indirilir; ayrıca --model değerini herhangi bir yerel .onnx dosyasına yönlendirebilirsin.

  • Örneğin ONNX entegrasyonu ile Python paketinden dışa aktarabilir veya CLI'nin ilk çalıştırmada seçilen görev için standart bir nano modeli indirmesine izin verebilirsin.

  • Evet, video özelliği etkinleştirilmiş ve sistemde FFmpeg 7+ yüklü olmalıdır. Bu; video dosyalarını, web kameralarını ve RTSP/RTMP/HTTP akışlarını kapsar.

  • Her ikisi de varsayılan olarak etkindir. annotate, görüntünün üzerine kutuları, maskeleri, anahtar noktaları ve sınıf etiketlerini çizer ve açıklamalı sonuçları yazmak için --save tarafından gereklidir. visualize, --show için canlı bir pencere açar. Yalnızca sonuçları program aracılığıyla döndüren daha küçük, başsız bir derleme için bunları cargo build --no-default-features ile devre dışı bırakabilirsin (gerektikçe tek tek özellikleri yeniden ekleyebilirsin).

  • Bu sayfa üst düzey bir genel bakıştır. Herkese açık tüm struct'lar, yöntemler ve yapılandırma seçenekleri için tür bazında eksiksiz API referansı docs.rs üzerinde yayımlanır ve doğrudan kaynak koddan oluşturulur.

Yorumlar