Ultralytics YOLO27:

Ultralytics Inference для Rust#

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

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 и демонстрационные ресурсы автоматически загружаются при первом использовании.
Ищешь пакет Python?

На этой странице описывается автономный 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, -myolo26n.onnxПуть к модели ONNX; известное имя YOLO загружается автоматически.
--taskdetectОдно из значений detect, segment, pose, obb, classify, semantic, depth.
--source, -ssampleИзображение, каталог, glob-шаблон, видео, индекс веб-камеры или URL.
--conf0.25Порог уверенности.
--iou0.7Порог IoU для немаксимального подавления.
--imgszМетаданные моделиРазмер изображения для инференса.
--devicecpuУстройство выполнения, например cuda:0, coreml, tensorrt:0.
--halffalseИнференс в половинной точности FP16.
--savetrueСохранить аннотированные результаты в runs/<task>/predict.
--showfalseПоказывать результаты в окне.
--classesallФильтровать детекции по идентификаторам классов, например "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:

Семейство моделейВарианты с автоматической загрузкой
YOLO26yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls, -sem и -depth
YOLO11yolo11{n,s,m,l,x}.onnx, -seg, -pose, -obb и -cls
YOLOv8yolov8{n,s,m,l,x}.onnx, -seg, -pose, -obb и -cls

Семантическая сегментация (-sem) и оценка глубины (-depth) доступны только в YOLO26.

Источники входных данных#

Аргумент --source (и тип Source в библиотеке) принимает множество типов входных данных, автоматически определяемых по строке:

ИсточникПримерПримечания
Изображениеimage.jpgОдин файл.
Каталогimages/Все изображения в папке.
Globimages/*.jpgШаблон в стиле shell.
Видеоvideo.mp4Требует функции video.
Веб-камера0Требует функции video.
Потокrtsp://...Требует функции video.
URLhttps://example.com/image.jpgЗагрузка удалённого изображения.

Устройства и провайдеры выполнения#

По умолчанию инференс выполняется на CPU. Бэкенды GPU и ускорителей компилируются как функции Cargo и выбираются во время выполнения с помощью --device (CLI) или Device (библиотека).

Строка устройстваВариант DeviceФункция сборкиАппаратное обеспечение
cpuDevice::CpuвстроеноЛюбой CPU
cuda:0Device::Cuda(0)cudaГрафический процессор NVIDIA
tensorrt:0Device::TensorRt(0)tensorrtGPU NVIDIA, оптимизированный
coremlDevice::CoreMlcoremlApple Silicon / macOS
intel:cpuDevice::IntelCpuopenvinoCPU Intel
intel:gpuDevice::IntelGpuopenvinoGPU Intel
intel:npuDevice::IntelNpuopenvinoNPU Intel
directml:0Device::DirectMl(0)directmlGPU Windows
rocm:0Device::Rocm(0)rocmGPU AMD
xnnpackDevice::XnnpackxnnpackОптимизированный 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 preprocessing
Сопоставь версию CUDA Toolkit

cuda-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.

  • Любую модель Ultralytics YOLO, экспортированную в ONNX, включая YOLO26, YOLO11 и YOLOv8. Известные имена моделей скачиваются автоматически; также можно указать для --model любой локальный файл .onnx.

  • Экспортируй модель из пакета Python, например с помощью интеграции ONNX, или позволь CLI при первом запуске скачать стандартную nano-модель для выбранной задачи.

  • Да, если включена функция video и в системе установлен FFmpeg 7+. Поддерживаются видеофайлы, веб-камеры и потоки RTSP/RTMP/HTTP.

  • Обе функции включены по умолчанию. annotate добавляет на изображение рамки, маски, ключевые точки и метки классов и требуется функции --save для записи аннотированных результатов. visualize открывает окно в реальном времени для --show. Чтобы получить меньшую сборку без графического интерфейса, которая только возвращает результаты программным способом, отключи их с помощью cargo build --no-default-features (при необходимости добавь отдельные функции обратно).

  • Эта страница содержит обзор на высоком уровне. Полная справка по API для каждого публичного типа, метода и параметра конфигурации опубликована на docs.rs и сгенерирована непосредственно из исходного кода.

Комментарии