Rust için Ultralytics Inference#
Ultralytics Inference, Rust ile yazılmış yüksek performanslı bir YOLO çıkarım kütüphanesi ve komut satırı aracıdır. Çıkarım anında Python çalışma zamanına ihtiyaç duymadan; görüntüler, videolar, web kameraları ve akışlar üzerinde hızlı, bellek açısından güvenli tahminler sunmak için dışarı aktarılmış ONNX modellerini ONNX Runtime üzerinden çalıştırır.
Bu proje, iki şekilde kullanabileceğiniz tek bir ultralytics-inference kasası (crate) olarak gelir: hızlı tahminler ve toplu işler için bir CLI veya doğrudan Rust uygulamanıza gömülmüş bir kütüphane olarak. Tek tip bir cihaz arayüzü aracılığıyla her Ultralytics görevini ve geniş bir donanım arka plan programı setini destekler.
Neden Rust ile çıkarım?#
- Yerel hız ve küçük ayak izi. Sunucular, konteynerler ve uç cihazlar için ideal olan, yorumlayıcı olmadan yerel bir ikili dosyaya derlenir.
- Bellek güvenliği. Rust'ın sahiplik modeli, çöp toplayıcı olmadan çalışma zamanı hatalarının tüm sınıflarını ortadan kaldırır.
- Tüm YOLO görevleri. Tek bir API'den nesne tespiti, segmentasyon, anlamsal segmentasyon, derinlik tahmini, sınıflandırma, poz tahmini ve OBB.
- Geniş donanım desteği. CPU'nun yanı sıra derleme zamanında seçilen CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm ve XNNPACK yürütme sağlayıcıları.
- GPU tarafında ön işleme. İsteğe bağlı bir birleşik CUDA çekirdeği; sıfır kopyalı bir giriş yolu için letterbox, normalleştirme ve düzen dönüştürmeyi cihaz üzerinde tutar.
- Otomatik indirme. Bilinen YOLO model adları ve örnek varlıklar ilk kullanımda otomatik olarak indirilir.
Bu sayfa, bağımsız Rust kasasını kapsar. Python iş akışı (eğitim, doğrulama, dışarı aktarma ve tahmin) için ana Hızlı Başlangıç ve Tahmin modu belgelerine bakın. Herhangi bir Ultralytics modelini ONNX entegrasyonu ile ONNX'e aktarın, ardından burada çalıştırın.
Kurulum#
Rust 1.89 veya üstü 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İkili dosya ~/.cargo/bin/ultralytics-inference (Linux ve macOS) veya Windows üzerinde %USERPROFILE%\.cargo\bin\ konumuna yerleştirilir.
CLI hızlı başlangıç#
CLI, bir predict alt komutu sunar. Argümansız olduğunda nano nesne tespiti modeli ile örnek görseller indirir, çıkarım çalıştırır ve açıklama eklenmiş 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 bayraklar:
| Bayrak | 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 öğelerinden biri. |
--source, -s | örnek | Görüntü, dizin, glob, video, web kamerası dizini veya URL. |
--conf | 0.25 | Güven eşiği. |
--iou | 0.7 | Maksimum olmayan bastırma (NMS) için IoU eşiği. |
--imgsz | model meta verileri | Çıkarım görüntü boyutu. |
--device | cpu | Çalıştırma cihazı, örneğin cuda:0, coreml, tensorrt:0. |
--half | false | FP16 yarı hassasiyetli çıkarım. |
--save | true | Açıklama eklenmiş sonuçları runs/<task>/predict konumuna kaydet. |
--show | false | Sonuçları bir pencerede göster. |
--classes | tümü | Algılamaları 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örsel boyutunu, hassasiyeti ve cihazı bir oluşturucu (builder) API ile kontrol etmek için InferenceConfig kullanın:
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 eksiksiz, çalıştırılabilir bir programdır; model ve örnek girdiler ilk çalıştırıldığında otomatik olarak indirilir. Kendi dosyalarınızda çalıştırmak için predict_default() değerini predict("image.jpg") ile değiştirin.
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 atlandığında, seçilen görev için eşleşen nano modeli otomatik olarak indirilir.
| Görev | --task | Çıktı | Varsayılan model |
|---|---|---|---|
| Tespit | detect | Sınırlayıcı kutular ve sınıflar | yolo26n.onnx |
| Örnek segmentasyonu | segment | Kutular artı ö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 |
| Pose | pose | Kutular artı 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ılan herhangi bir Ultralytics modeli yerel bir dosyadan yüklenebilir. n, s, m, l ve x boyutlarındaki standart YOLO26, YOLO11 ve YOLOv8 model adları için 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 |
Anlamsal segmentasyon (-sem) ve derinlik tahmini (-depth) yalnızca YOLO26'ya özeldir.
Giriş kaynakları#
--source argümanı (ve kütüphanedeki Source türü), dizeden otomatik olarak algılanan birçok girdi türünü kabul eder:
| Kaynak | Örnek | Notlar |
|---|---|---|
| Görsel | image.jpg | Tek dosya. |
| Dizin | images/ | Klasördeki tüm görüntüler. |
| Glob | images/*.jpg | Kabuk stili desen. |
| Video | video.mp4 | video özelliğini gerektirir. |
| Web kamerası | 0 | video özelliğini gerektirir. |
| Stream | rtsp://... | video özelliğini gerektirir. |
| URL | https://example.com/image.jpg | Uzak görüntü indirme. |
Cihazlar ve yürütme sağlayıcıları#
Çıkarım varsayılan olarak CPU üzerinde çalışır. GPU ve hızlandırıcı arka plan programları Cargo özellikleri olarak derlenir ve çalışma zamanında --device (CLI) veya Device (kütüphane) ile seçilir.
| Cihaz dizesi | Device varyantı | Derleme özelliği | Donanım |
|---|---|---|---|
cpu | Device::Cpu | dahili | 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ırma ve CUDA ön işleme#
NVIDIA donanımında, cuda özelliği CUDA yürütme sağlayıcısını etkinleştirir ve tensorrt daha fazla optimizasyon için TensorRT sağlayıcısı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ırma, normalleştirme ve HWC'den CHW'ye düzen dönüştürmesini tek bir birleştirilmiş CUDA çekirdeği olarak çalıştırır, ardından sonucu modele sıfır kopyalı bir cihaz tensörü olarak besler. Bu, özellikle yüksek verimli toplu işler (batch) ve gerçek zamanlı akışlar için en önemli husus olan görsel başına CPU ön işleme maliyetini ve ana bilgisayardan cihaza kopyalama maliyetini ortadan kaldırır.
# Build with fused GPU preprocessing (implies cuda + tensorrt)
cargo build --release --features cuda-preprocessHızlı yol, aşağıdakilerin tümü geçerli olduğunda API değişikliği olmadan otomatik olarak kullanılır: özellik derlenmişse, cihaz CUDA veya TensorRT ise, görev tespit, segmentasyon, poz tahmini, OBB, anlamsal segmentasyon veya derinlik tahmini ise ve model FP32 girdi kullanıyorsa. Varsayılan olarak etkindir ve model bazında 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ç takımı gerektirir ve birleştirilmiş ön işleme çekirdeğ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ın.
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 çizer; --save için gereklidir. |
visualize | evet | --show için gerçek zamanlı pencere ekranı. |
video | hayır | Video dosyalarını okuma ve yazma (FFmpeg 7+ gerektirir). |
cuda | hayır | NVIDIA CUDA yürütme sağlayıcısı. |
tensorrt | hayır | NVIDIA TensorRT yürütme sağlayıcısı. |
cuda-preprocess | hayır | Sıfır kopyalı giriş ile birleşik GPU ön işleme (cuda, tensorrt içerir). |
coreml | hayır | Apple CoreML yürütme sağlayıcısı. |
openvino | hayır | Intel OpenVINO yürütme sağlayıcısı. |
rocm | hayır | AMD ROCm yürütme sağlayıcısı. |
directml | hayır | Windows DirectML yürütme sağlayıcısı. |
Kolaylık sağlayan gruplar ilgili sağlayıcı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 ve diğerleri gibi ek sağlayıcılar da mevcuttur.
CLI'yı kurarken 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.33", features = ["video"] }Çıktı ve kaydetme#
Varsayılan olarak, tahminler açıklama eklenmiş halde otomatik artan bir çalışma dizinine kaydedilir:
runs/
└── detect/
└── predict/ # then predict2, predict3, ...
└── image.jpg # annotated resultAlt klasör göreve karşılık gelir (runs/segment/, runs/pose/ vb.). Video kaynakları için açıklama eklenmiş çıktı bir video dosyası olarak yazılır; bunun yerine ayrı kareler yazmak için --save-frames aktarın. semantic görevi için --save-json, bir results/ alt klasörü altında piksel başına sınıf haritası PNG'leri yazar. depth görevi için renkli derinlik haritası, Ultralytics Python plot() çıktısıyla eşleşecek şekilde kaynak görsel üzerine harmanlanır. Açıklama eklenmiş görsel ve video kaydetme annotate özelliğini gerektirir; anlamsal sınıf haritası PNG dışa aktarımı gerektirmez. Video girişi ve çıkışı video özelliğini gerektirir.
SSS#
Hayır. Kasa, dışarı aktarılan ONNX modellerini doğrudan ONNX Runtime aracılığıyla çalıştırır. Python yalnızca önceden Ultralytics paketi ile modelleri eğitirseniz veya dışarı aktarırsanız gereklidir.
Örneğin ONNX entegrasyonu ile Python paketinden dışarı aktarın veya CLI'nin ilk çalıştırmada seçilen görev için standart bir nano model indirmesine izin verin.
videoözelliği etkinleştirilmiş ve sistemde FFmpeg 7+ kuruluysa evet. Bu, video dosyalarını, web kamalarını ve RTSP/RTMP/HTTP akışlarını kapsar.İkisi de varsayılan olarak etkindir.
annotategörsel üzerine kutular, maskeler, anahtar noktalar ve sınıf etiketleri çizer;--saveöğesinin açıklama eklenmiş sonuçları yazabilmesi için gereklidir.visualize,--showiçin canlı bir pencere açar. Yalnızca programatik olarak sonuçlar döndüren daha küçük, başlıksız (headless) bir derleme için bunlarıcargo build --no-default-featuresile devre dışı bırakın (gerektikçe bireysel özellikleri tekrar ekleyin).Bu sayfa üst düzey bir genel bakıştır. Her genel yapı, metot ve yapılandırma seçeneği için eksiksiz, tür bazlı API referansı, doğrudan kaynaktan oluşturularak docs.rs üzerinde yayınlanmaktadır.