Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics Inference для Rust#

GitHub Crates.io docs.rs Downloads MSRV

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

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

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

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

Link to this sectionИсточники ввода#

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

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

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

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

Строка устройстваВариант DeviceФункция сборкиОборудование
cpuDevice::CpuвстроеноЛюбой CPU
cuda:0Device::Cuda(0)cudaGPU NVIDIA
tensorrt:0Device::TensorRt(0)tensorrtGPU NVIDIA, оптимизировано
coremlDevice::CoreMlcoremlApple Silicon / macOS
openvinoDevice::OpenVinoopenvinoIntel CPU / iGPU
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

Link 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 preprocessing
Соответствие твоего набора инструментов CUDA

cuda-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 и генерируется напрямую из исходного кода.

Авторы

Комментарии