Link to this sectionUltralytics Inference для Rust#
Ultralytics Inference — это высокопроизводительная библиотека для инференса YOLO и инструмент командной строки, написанный на Rust. Она запускает экспортированные ONNX модели через ONNX Runtime для обеспечения быстрых и безопасных для памяти предсказаний на изображениях, видео, веб-камерах и потоках без необходимости наличия среды выполнения Python во время инференса.
Проект поставляется в виде единого крейта ultralytics-inference, который ты можешь использовать двумя способами: как CLI для быстрых предсказаний и пакетных заданий или как библиотеку, встроенную непосредственно в твое Rust-приложение. Он поддерживает все задачи Ultralytics и широкий набор аппаратных бэкендов через унифицированный интерфейс устройств.
Link to this sectionПочему инференс на Rust?#
- Родная скорость и малый объем. Компилируется в нативный бинарный файл без интерпретатора, что идеально подходит для серверов, контейнеров и периферийных устройств.
- Безопасность памяти. Модель владения Rust устраняет целые классы ошибок времени выполнения без использования сборщика мусора.
- Все задачи YOLO. Детекция, сегментация, поиск ключевых точек (pose), OBB, классификация и семантическая сегментация через один API.
- Широкая аппаратная поддержка. CPU плюс провайдеры выполнения CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm и XNNPACK, выбираемые во время сборки.
- Препроцессинг на стороне GPU. Опциональное объединенное ядро CUDA выполняет letterbox, нормализацию и преобразование компоновки (layout) на устройстве для пути ввода с нулевым копированием.
- Автоматическая загрузка. Известные имена моделей YOLO и примеры данных загружаются автоматически при первом использовании.
Эта страница посвящена отдельному Rust-крейту. Для Python-воркфлоу (обучение, валидация, экспорт и предсказание) смотри основное Руководство по быстрому старту и Режим предсказания. Экспортируй любую модель Ultralytics в ONNX с помощью интеграции ONNX, а затем запусти её здесь.
Link to this sectionУстановка#
Требуется Rust 1.89 или новее. Для функции video дополнительно требуется установленный в системе FFmpeg 7+.
# 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Бинарный файл размещается по пути ~/.cargo/bin/ultralytics-inference (Linux и macOS) или %USERPROFILE%\.cargo\bin\ в Windows.
Link to this sectionБыстрый старт CLI#
CLI предоставляет подкоманду predict. Без аргументов он загружает модель детектирования nano и примеры изображений, выполняет инференс и сохраняет аннотированные результаты в 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
# 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Общие флаги:
| Флаг | По умолчанию | Описание |
|---|---|---|
--model, -m | yolo26n.onnx | Путь к модели ONNX; известное имя YOLO загружается автоматически. |
--task | detect | Одно из: detect, segment, pose, obb, classify, semantic. |
--source, -s | пример | Изображение, директория, glob, видео, индекс веб-камеры или URL. |
--conf | 0.25 | Порог уверенности. |
--iou | 0.7 | Порог IoU для подавления немаксимумов (NMS). |
--imgsz | метаданные модели | Размер входного изображения для инференса. |
--device | cpu | Устройство для выполнения, например cuda:0, coreml, tensorrt:0. |
--half | false | Инференс с половинной точностью FP16. |
--save | true | Сохранить аннотированные результаты в runs/<task>/predict. |
--show | false | Отобразить результаты в окне. |
--classes | все | Фильтр детекций по ID классов, например "0,1,2". |
Link to this sectionБыстрый старт библиотеки#
Загрузи модель и запусти предсказание. Метаданные модели, такие как имена классов, тип задачи и размер изображения, считываются автоматически из файла 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(())
}Используй InferenceConfig для управления порогами, размером изображения, точностью и устройством с помощью билдер-API:
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")?;Каждая задача заполняет соответствующее поле в Results. Каждая вкладка ниже — это готовая к запуску программа; модель и примеры входных данных загружаются автоматически при первом запуске. Замени predict_default() на predict("image.jpg") для запуска на своих собственных файлах.
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(())
}Link to this sectionПоддерживаемые задачи#
Поддерживаются все задачи Ultralytics. Если --model опущено, автоматически загружается соответствующая nano-модель для выбранной задачи.
| Задача | --task | Выходные данные | Модель по умолчанию |
|---|---|---|---|
| Детектирование | detect | Ограничивающие рамки (Bounding boxes) и классы | yolo26n.onnx |
| Сегментация экземпляров | segment | Рамки плюс маски для каждого экземпляра | yolo26n-seg.onnx |
| Поза | pose | Рамки плюс ключевые точки | yolo26n-pose.onnx |
| Ориентированные рамки | obb | Повернутые ограничивающие рамки | yolo26n-obb.onnx |
| Классификация | classify | Вероятности классов | yolo26n-cls.onnx |
| Семантическая сегментация | semantic | Карта классов для каждого пикселя | yolo26n-sem.onnx |
Link to this sectionСовместимость моделей#
Любая модель Ultralytics, экспортированная в ONNX, может быть загружена из локального файла. Автозагрузка доступна для стандартных имен моделей YOLO26, YOLO11 и YOLOv8 в размерах n, s, m, l и x:
| Семейство моделей | Варианты с автозагрузкой |
|---|---|
| YOLO26 | yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls и -sem |
| YOLO11 | yolo11{n,s,m,l,x}.onnx, -seg, -pose, -obb и -cls |
| YOLOv8 | yolov8{n,s,m,l,x}.onnx, -seg, -pose, -obb и -cls |
Семантическая сегментация (-sem) доступна только для YOLO26.
Link to this sectionИсточники ввода#
Аргумент --source (и тип Source в библиотеке) принимает множество видов ввода, автоматически определяемых по строке:
| Источник | Пример | Примечания |
|---|---|---|
| Изображение | image.jpg | Один файл. |
| Директория | images/ | Все изображения в папке. |
| Glob | images/*.jpg | Паттерн в стиле shell. |
| Видео | video.mp4 | Требует функции video. |
| Веб-камера | 0 | Требует функции video. |
| Поток | rtsp://... | Требует функции video. |
| URL | https://example.com/image.jpg | Удаленная загрузка изображения. |
Link to this sectionУстройства и провайдеры выполнения#
Инференс по умолчанию выполняется на CPU. GPU и бэкенды ускорителей компилируются как функции Cargo и выбираются во время выполнения с помощью --device (CLI) или Device (библиотека).
| Строка устройства | Вариант Device | Функция сборки | Оборудование |
|---|---|---|---|
cpu | Device::Cpu | встроено | Любой CPU |
cuda:0 | Device::Cuda(0) | cuda | GPU NVIDIA |
tensorrt:0 | Device::TensorRt(0) | tensorrt | GPU NVIDIA, оптимизировано |
coreml | Device::CoreMl | coreml | Apple Silicon / macOS |
openvino | Device::OpenVino | openvino | Intel CPU / iGPU |
directml:0 | Device::DirectMl(0) | directml | GPU Windows |
rocm:0 | Device::Rocm(0) | rocm | GPU AMD |
xnnpack | Device::Xnnpack | xnnpack | Оптимизированный CPU |
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrtLink to this sectionУскорение GPU и предобработка CUDA#
На оборудовании NVIDIA функция cuda активирует провайдер выполнения CUDA, а tensorrt добавляет провайдер TensorRT для дополнительной оптимизации. Для достижения минимальной задержки функция cuda-preprocess переносит предобработку на GPU.
cuda-preprocess выполняет изменение размера letterbox, нормализацию и преобразование макета HWC в CHW в виде единого объединенного ядра CUDA, а затем передает результат в модель как тензор устройства с нулевым копированием. Это устраняет затраты на предобработку CPU для каждого изображения и копирование с хоста на устройство, что наиболее важно для высокопроизводительных пакетов и потоков в реальном времени.
# Build with fused GPU preprocessing (implies cuda + tensorrt)
cargo build --release --features cuda-preprocessБыстрый путь используется автоматически, без изменения API, при выполнении всех следующих условий: функция скомпилирована, устройство — CUDA или TensorRT, задача — detect, segment, pose, OBB или семантическая сегментация, а модель использует входные данные FP32. Он включен по умолчанию и может быть отключен для каждой модели отдельно:
use ultralytics_inference::{Device, InferenceConfig};
let config = InferenceConfig::new()
.with_device(Device::TensorRt(0))
.with_cuda_preprocess(false); // force CPU preprocessingcuda-preprocess требует соответствующего набора инструментов CUDA во время сборки и использует NVRTC во время выполнения для ядра объединенной предобработки. Ознакомься с руководством по ускорению CUDA и TensorRT для получения информации о версиях и устранении неполадок.
Link to this sectionФункции Cargo#
Функции включаются во время сборки. Значения по умолчанию охватывают аннотирование и демонстрацию в реальном времени.
| Функция | По умолчанию | Цель |
|---|---|---|
annotate | да | Отрисовка рамок, масок, ключевых точек и меток; необходимо для --save. |
visualize | да | Отображение окна в реальном времени для --show. |
video | нет | Чтение и запись видеофайлов (требуется FFmpeg 7+). |
cuda | нет | Провайдер выполнения NVIDIA CUDA. |
tensorrt | нет | Провайдер выполнения NVIDIA TensorRT. |
cuda-preprocess | нет | Объединенная предобработка GPU с вводом с нулевым копированием (включает cuda, tensorrt). |
coreml | нет | Провайдер выполнения Apple CoreML. |
openvino | нет | Провайдер выполнения Intel OpenVINO. |
rocm | нет | Провайдер выполнения AMD ROCm. |
directml | нет | Провайдер выполнения Windows DirectML. |
Группы удобства объединяют связанные провайдеры: nvidia (cuda, tensorrt), amd (rocm, migraphx), intel (openvino, onednn), mobile (nnapi, coreml, qnn) и all (annotate, visualize, video). Доступны и другие провайдеры, такие как nnapi, qnn, xnnpack, webgpu и прочие.
Включи функции при установке CLI или добавлении библиотеки:
cargo install ultralytics-inference --features video
cargo install ultralytics-inference --features cuda,tensorrt[dependencies]
ultralytics-inference = { version = "0.0.18", features = ["video"] }Link to this sectionВывод и сохранение#
По умолчанию прогнозы аннотируются и сохраняются в автоматически создаваемой директории выполнения:
runs/
└── detect/
└── predict/ # then predict2, predict3, ...
└── image.jpg # annotated resultПодпапка соответствует задаче (runs/segment/, runs/pose/ и так далее). Для видеоисточников аннотированный результат записывается как видеофайл; используй --save-frames для записи отдельных кадров. Для задачи semantic параметр --save-json записывает PNG-файлы карт классов для каждого пикселя в подпапку results/. Сохранение аннотированных изображений и видео требует функции annotate; экспорт PNG-карт семантических классов этого не требует. Ввод и вывод видео требуют функции video.
Link to this sectionFAQ#
Link to this sectionНужно ли мне устанавливать Python?#
Нет. Крейт запускает экспортированные модели ONNX напрямую через ONNX Runtime. Python нужен только если ты заранее обучаешь или экспортируешь модели с помощью пакета Ultralytics.
Link to this sectionКакие модели я могу запускать?#
Любую модель Ultralytics YOLO, экспортированную в ONNX, включая YOLO26, YOLO11 и YOLOv8. Известные имена моделей загружаются автоматически; ты также можешь указать --model на любой локальный файл .onnx.
Link to this sectionКак мне получить файл модели?#
Экспортируй его из пакета Python, например, с помощью интеграции ONNX, или позволь CLI загрузить стандартную nano-модель для выбранной задачи при первом запуске.
Link to this sectionПоддерживается ли видео?#
Да, при включенной функции video и установленном в системе FFmpeg 7+. Это охватывает видеофайлы, веб-камеры и потоки RTSP/RTMP/HTTP.
Link to this sectionЧто делают функции annotate и visualize?#
Обе включены по умолчанию. annotate рисует рамки, маски, ключевые точки и метки классов на изображении и требуется для того, чтобы --save мог записывать аннотированные результаты. visualize открывает окно в реальном времени для --show. Для более компактной сборки без графического интерфейса, которая возвращает результаты только программно, отключи их с помощью cargo build --no-default-features (добавляй обратно отдельные функции по мере необходимости).
Link to this sectionГде находится полная справочная документация по API?#
Эта страница является общим обзором. Полная справочная документация по API с описанием всех публичных структур, методов и параметров конфигурации опубликована на docs.rs и генерируется напрямую из исходного кода.