Ultralytics Rust için Inference#
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.
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,tensorrtBinary, 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 --halfYaygın seçenekler:
| Seçenek | Varsayılan | Açıklama |
|---|---|---|
--model, -m | yolo26n.onnx | Bir ONNX modelinin yolu; bilinen bir YOLO adı otomatik olarak indirilir. |
--task | detect | detect, segment, pose, obb, classify, semantic, depth değerlerinden biri. |
--source, -s | örnek | Görüntü, dizin, glob, video, web kamerası indeksi veya URL. |
--conf | 0.25 | Güven eşiği. |
--iou | 0.7 | NMS için IoU eşiği. |
--imgsz | model meta verileri | Inference görüntü boyutu. |
--device | cpu | Yürütme cihazı; örneğin cuda:0, coreml, tensorrt:0. |
--half | false | FP16 yarı hassasiyetli inference. |
--save | true | Açıklamalı sonuçları runs/<task>/predict konumuna kaydet. |
--show | false | Sonuçları bir pencerede görüntüle. |
--classes | tü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ılama | detect | Sınırlayıcı kutular ve sınıflar | yolo26n.onnx |
| Örnek segmentasyonu | segment | Kutular ve örnek başına maskeler | yolo26n-seg.onnx |
| Anlamsal segmentasyon | semantic | Piksel başına sınıf haritası | yolo26n-sem.onnx |
| Derinlik tahmini | depth | Metre cinsinden piksel başına derinlik haritası | yolo26n-depth.onnx |
| Sınıflandırma | classify | Sınıf olasılıkları | yolo26n-cls.onnx |
| Poz | pose | Kutular ve anahtar noktalar | yolo26n-pose.onnx |
| Yönlendirilmiş kutular | obb | Döndürülmüş sınırlayıcı kutular | yolo26n-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 ailesi | Otomatik indirilebilir varyantlar |
|---|---|
| YOLO26 | yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls, -sem ve -depth |
| YOLO11 | yolo11{n,s,m,l,x}.onnx, -seg, -pose, -obb ve -cls |
| YOLOv8 | yolov8{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 | Örnek | Notlar |
|---|---|---|
| Görüntü | image.jpg | Tek dosya. |
| Dizin | images/ | Klasördeki tüm görüntüler. |
| Glob | images/*.jpg | Shell tarzı desen. |
| Video | video.mp4 | video özelliğini gerektirir. |
| Web Kamerası | 0 | video özelliğini gerektirir. |
| Akış | rtsp://... | video özelliğini gerektirir. |
| URL | https://example.com/image.jpg | Uzak 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 dizesi | Device varyantı | Derleme özelliği | Donanım |
|---|---|---|---|
cpu | Device::Cpu | yerleşik | Herhangi bir CPU |
cuda:0 | Device::Cuda(0) | cuda | NVIDIA GPU |
tensorrt:0 | Device::TensorRt(0) | tensorrt | NVIDIA GPU, optimize edilmiş |
coreml | Device::CoreMl | coreml | Apple Silicon / macOS |
intel:cpu | Device::IntelCpu | openvino | Intel CPU |
intel:gpu | Device::IntelGpu | openvino | Intel GPU |
intel:npu | Device::IntelNpu | openvino | Intel NPU |
directml:0 | Device::DirectMl(0) | directml | Windows GPU |
rocm:0 | Device::Rocm(0) | rocm | AMD GPU |
xnnpack | Device::Xnnpack | xnnpack | Optimize edilmiş CPU |
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrtGPU 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-preprocessAş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 preprocessingcuda-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.
| Özellik | Varsayılan | Amaç |
|---|---|---|
annotate | evet | Kutuları, maskeleri, anahtar noktaları ve etiketleri çiz; --save için gereklidir. |
visualize | evet | --show için gerçek zamanlı pencere görüntüleme. |
video | hayır | Video dosyalarını oku ve yaz (FFmpeg 7+ gerektirir). |
cuda | hayır | NVIDIA CUDA execution provider. |
tensorrt | hayır | NVIDIA TensorRT execution provider. |
cuda-preprocess | hayır | Sıfır kopyalı girişle birleştirilmiş GPU ön işleme (cuda, tensorrt'i gerektirir). |
coreml | hayır | Apple CoreML execution provider. |
openvino | hayır | Intel OpenVINO execution provider. |
rocm | hayır | AMD ROCm execution provider. |
directml | hayır | Windows 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 resultAlt 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.
Ö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--savetarafından gereklidir.visualize,--showiç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-featuresile 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.