Ultralytics Inference для Rust#
Ultralytics Inference — это высокопроизводительная библиотека инференса YOLO и инструмент командной строки, написанный на Rust. Она запускает экспортированные модели ONNX через ONNX Runtime, обеспечивая быстрые и безопасные по памяти предсказания для изображений, видео, веб-камер и потоков без необходимости в среде выполнения Python во время инференса.
Проект поставляется как единый crate ultralytics-inference, который можно использовать двумя способами: как CLI для быстрых предсказаний и пакетных заданий или как библиотеку, напрямую встраиваемую в приложение на Rust. Он поддерживает каждую задачу Ultralytics и широкий набор аппаратных бэкендов через единый интерфейс устройств.
Зачем нужен инференс на Rust?#
- Нативная скорость и небольшой размер. Компилируется в нативный бинарный файл без интерпретатора — идеально для серверов, контейнеров и периферийных устройств.
- Безопасность памяти. Модель владения Rust устраняет целые классы ошибок времени выполнения без сборщика мусора.
- Все задачи YOLO. Детекция, сегментация, семантическая сегментация, оценка глубины, классификация, определение позы и OBB через единый API.
- Широкая поддержка оборудования. CPU, а также CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm и XNNPACK в качестве провайдеров выполнения, выбираемых во время сборки.
- Предобработка на GPU. Дополнительное объединённое ядро CUDA выполняет letterbox, нормализацию и преобразование формата на устройстве, обеспечивая путь обработки входных данных без копирования.
- Автоматическая загрузка. Известные имена моделей YOLO и демонстрационные ресурсы автоматически загружаются при первом использовании.
На этой странице описывается автономный crate Rust. О рабочем процессе Python (обучение, валидация, экспорт и предсказание) смотри основной раздел Quickstart и режим Predict. Экспортируй любую модель Ultralytics в ONNX с помощью интеграции ONNX, а затем запусти её здесь.
Установка#
Требуется 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.
Быстрый старт CLI#
CLI предоставляет подкоманду predict. Без аргументов она загружает небольшую модель детекции и демонстрационные изображения, выполняет инференс и сохраняет аннотированные результаты в 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Распространённые флаги:
| Флаг | По умолчанию | Описание |
|---|---|---|
--model, -m | yolo26n.onnx | Путь к модели ONNX; известное имя YOLO загружается автоматически. |
--task | detect | Одно из значений detect, segment, pose, obb, classify, semantic, depth. |
--source, -s | sample | Изображение, каталог, glob-шаблон, видео, индекс веб-камеры или URL. |
--conf | 0.25 | Порог уверенности. |
--iou | 0.7 | Порог IoU для немаксимального подавления. |
--imgsz | Метаданные модели | Размер изображения для инференса. |
--device | cpu | Устройство выполнения, например cuda:0, coreml, tensorrt:0. |
--half | false | Инференс в половинной точности FP16. |
--save | true | Сохранить аннотированные результаты в runs/<task>/predict. |
--show | false | Показывать результаты в окне. |
--classes | all | Фильтровать детекции по идентификаторам классов, например "0,1,2". |
Быстрый старт библиотеки#
Загрузи модель и выполни предсказание. Метаданные модели, такие как имена классов, тип задачи и размер изображения, автоматически считываются из файла 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, чтобы управлять порогами, размером изображения, точностью и устройством через builder 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(())
}Поддерживаемые задачи#
Поддерживаются все задачи Ultralytics. Если --model не указан, соответствующая небольшая модель для выбранной задачи загружается автоматически.
| Задача | --task | Результат | Модель по умолчанию |
|---|---|---|---|
| Обнаружение | detect | Ограничивающие рамки и классы | yolo26n.onnx |
| Сегментация экземпляров | segment | Рамки и маски для каждого экземпляра | yolo26n-seg.onnx |
| Семантическая сегментация | semantic | Карта классов для каждого пикселя | yolo26n-sem.onnx |
| Оценка глубины | depth | Карта глубины для каждого пикселя в метрах | yolo26n-depth.onnx |
| Классификация | classify | Вероятности классов | yolo26n-cls.onnx |
| Позы | pose | Рамки и ключевые точки | yolo26n-pose.onnx |
| Ориентированные рамки | obb | Повернутые ограничивающие рамки | yolo26n-obb.onnx |
Совместимость моделей#
Любую модель Ultralytics, экспортированную в ONNX, можно загрузить из локального файла. Автоматическая загрузка доступна для стандартных имён моделей YOLO26, YOLO11 и YOLOv8 в размерах n, s, m, l и x:
| Семейство моделей | Варианты с автоматической загрузкой |
|---|---|
| YOLO26 | yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls, -sem и -depth |
| 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) и оценка глубины (-depth) доступны только в YOLO26.
Источники входных данных#
Аргумент --source (и тип Source в библиотеке) принимает множество типов входных данных, автоматически определяемых по строке:
| Источник | Пример | Примечания |
|---|---|---|
| Изображение | image.jpg | Один файл. |
| Каталог | images/ | Все изображения в папке. |
| Glob | images/*.jpg | Шаблон в стиле shell. |
| Видео | video.mp4 | Требует функции video. |
| Веб-камера | 0 | Требует функции video. |
| Поток | rtsp://... | Требует функции video. |
| URL | https://example.com/image.jpg | Загрузка удалённого изображения. |
Устройства и провайдеры выполнения#
По умолчанию инференс выполняется на CPU. Бэкенды GPU и ускорителей компилируются как функции Cargo и выбираются во время выполнения с помощью --device (CLI) или Device (библиотека).
| Строка устройства | Вариант Device | Функция сборки | Аппаратное обеспечение |
|---|---|---|---|
cpu | Device::Cpu | встроено | Любой CPU |
cuda:0 | Device::Cuda(0) | cuda | Графический процессор NVIDIA |
tensorrt:0 | Device::TensorRt(0) | tensorrt | GPU NVIDIA, оптимизированный |
coreml | Device::CoreMl | coreml | Apple Silicon / macOS |
intel:cpu | Device::IntelCpu | openvino | CPU Intel |
intel:gpu | Device::IntelGpu | openvino | GPU Intel |
intel:npu | Device::IntelNpu | openvino | NPU Intel |
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,tensorrtУскорение на 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, semantic segmentation или depth estimation, а модель использует входные данные FP32. Он включён по умолчанию и может быть отключён для каждой модели:
use ultralytics_inference::{Device, InferenceConfig};
let config = InferenceConfig::new()
.with_device(Device::TensorRt(0))
.with_cuda_preprocess(false); // force CPU preprocessingcuda-preprocess требует совместимый CUDA Toolkit во время сборки и использует NVRTC во время выполнения для объединённого ядра предобработки. Требования к версиям и сведения об устранении неполадок смотри в руководстве по ускорению CUDA и TensorRT.
Функции 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.35", features = ["video"] }Вывод и сохранение#
По умолчанию предсказания получают аннотации и сохраняются в каталог запусков с автоматически увеличивающимся номером:
runs/
└── detect/
└── predict/ # then predict2, predict3, ...
└── image.jpg # annotated resultИмя подпапки соответствует задаче (runs/segment/, runs/pose/ и так далее). Для видеоисточников аннотированный результат записывается в видеофайл; передай --save-frames, чтобы вместо этого сохранить отдельные кадры. Для задачи semantic PNG-файлы карт классов для каждого пикселя записываются в подпапку results/ с помощью --save-json. Для задачи depth цветная карта глубины накладывается на исходное изображение, как в результате plot() Ultralytics Python. Для сохранения аннотированных изображений и видео требуется функция annotate; экспорт PNG-карт семантических классов этого не требует. Для ввода и вывода видео требуется функция video.
Часто задаваемые вопросы#
Нет. Crate напрямую запускает экспортированные модели ONNX через ONNX Runtime. Python нужен только в том случае, если ты заранее обучаешь или экспортируешь модели с помощью пакета Ultralytics.
Экспортируй модель из пакета Python, например с помощью интеграции ONNX, или позволь CLI при первом запуске скачать стандартную nano-модель для выбранной задачи.
Да, если включена функция
videoи в системе установлен FFmpeg 7+. Поддерживаются видеофайлы, веб-камеры и потоки RTSP/RTMP/HTTP.Обе функции включены по умолчанию.
annotateдобавляет на изображение рамки, маски, ключевые точки и метки классов и требуется функции--saveдля записи аннотированных результатов.visualizeоткрывает окно в реальном времени для--show. Чтобы получить меньшую сборку без графического интерфейса, которая только возвращает результаты программным способом, отключи их с помощьюcargo build --no-default-features(при необходимости добавь отдельные функции обратно).Эта страница содержит обзор на высоком уровне. Полная справка по API для каждого публичного типа, метода и параметра конфигурации опубликована на docs.rs и сгенерирована непосредственно из исходного кода.