Ultralytics YOLO27:

Rust向けUltralytics Inference#

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

Ultralytics Inferenceは、Rustで記述された、高性能なYOLO推論ライブラリ兼コマンドラインツールです。ONNXモデルをONNX Runtime経由で実行し、推論時にPythonランタイムを必要とせず、画像、動画、Webカメラ、ストリームに対して高速でメモリ安全な予測を実行します。

このプロジェクトは単一のcrate、ultralytics-inferenceとして提供され、2通りの方法で使用できます。迅速な予測やバッチジョブ向けのCLIとして使用する方法と、Rustアプリケーションに直接組み込むライブラリとして使用する方法です。すべてのUltralytics タスクに対応し、統一されたデバイスインターフェースを通じて幅広いハードウェアバックエンドを利用できます。

Rust推論を使用する理由#

  • **ネイティブ速度と小さなフットプリント。**インタープリターを必要とせず、ネイティブバイナリにコンパイルされます。サーバー、コンテナ、エッジデバイスに適しています。
  • **メモリ安全性。**Rustの所有権モデルにより、ガベージコレクターなしで、実行時エラーの多くの種類を排除できます。
  • **すべてのYOLOタスク。**1つのAPIから、検出、インスタンスセグメンテーション、セマンティックセグメンテーション、深度推定、分類、ポーズ、OBBを実行できます。
  • **幅広いハードウェアサポート。**CPUに加えて、CUDA、TensorRT、CoreML、OpenVINO、DirectML、ROCm、XNNPACKのExecution Providerに対応し、ビルド時に選択できます。
  • **GPU側の前処理。**オプションの融合CUDAカーネルにより、レターボックス処理、正規化、レイアウト変換をデバイス上で実行し、ゼロコピーの入力パスを実現します。
  • **自動ダウンロード。**既知のYOLOモデル名とサンプルアセットは、初回使用時に自動的にダウンロードされます。
Pythonパッケージをお探しですか?

このページではスタンドアロンのRust crateについて説明します。Pythonワークフロー(トレーニング、検証、エクスポート、予測)については、メインのクイックスタートPredictモードを参照してください。ONNX統合を使用して任意のUltralyticsモデルをONNXにエクスポートし、ここで実行できます。

インストール#

Rust 1.89以降が必要です。video featureを使用する場合は、システムに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

バイナリは、LinuxおよびmacOSでは~/.cargo/bin/ultralytics-inferenceに、Windowsでは%USERPROFILE%\.cargo\bin\に配置されます。

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

# 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.onnxONNXモデルへのパスです。既知のYOLO名を指定すると自動的にダウンロードされます。
--taskdetectdetectsegmentposeobbclassifysemanticdepthのいずれかです。
--source-ssample画像、ディレクトリ、glob、動画、Webカメラのインデックス、またはURLです。
--conf0.25信頼度しきい値です。
--iou0.7non-maximum suppressionのIoUしきい値です。
--imgszモデルメタデータ推論画像サイズです。
--devicecpu実行デバイスです。例:cuda:0coremltensorrt:0
--halffalseFP16半精度推論です。
--savetrue注釈付きの結果をruns/<task>/predictに保存します。
--showfalse結果をウィンドウに表示します。
--classesallクラスIDで検出結果をフィルタリングします。例:"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を省略すると、選択したタスクに対応するnanoモデルが自動的にダウンロードされます。

タスク--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

モデル互換性#

ONNXにエクスポートされた任意のUltralyticsモデルを、ローカルファイルから読み込めます。標準のYOLO26、YOLO11、YOLOv8モデル名については、nsmlxのサイズで自動ダウンロードを利用できます。

モデルファミリー自動ダウンロード可能なバリアント
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シェル形式のパターンです。
動画video.mp4video featureが必要です。
Webcam0video featureが必要です。
ストリームrtsp://...video featureが必要です。
URLhttps://example.com/image.jpgリモート画像のダウンロードです。

デバイスとExecution Provider#

推論はデフォルトでCPU上で実行されます。GPUおよびアクセラレーターのバックエンドはCargo featuresとしてビルド時に組み込まれ、--device(CLI)またはDevice(ライブラリ)で実行時に選択されます。

デバイス文字列Deviceバリアントビルドfeatureハードウェア
cpuDevice::Cpu組み込み済み任意のCPU
cuda:0Device::Cuda(0)cudaNVIDIA GPU
tensorrt:0Device::TensorRt(0)tensorrtNVIDIA GPU、最適化済み
coremlDevice::CoreMlcoremlApple Silicon / macOS
intel:cpuDevice::IntelCpuopenvinoIntel CPU
intel:gpuDevice::IntelGpuopenvinoIntel GPU
intel:npuDevice::IntelNpuopenvinoIntel NPU
directml:0Device::DirectMl(0)directmlWindows GPU
rocm:0Device::Rocm(0)rocmAMD GPU
xnnpackDevice::Xnnpackxnnpack最適化CPU
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrt

GPUアクセラレーションとCUDA前処理#

NVIDIAハードウェアでは、cuda featureによってCUDA Execution Providerが有効になり、tensorrtによってさらなる最適化のためのTensorRT Providerが追加されます。可能な限り低いレイテンシーを実現するには、cuda-preprocess featureによって前処理をGPU上に移します。

cuda-preprocessは、レターボックスリサイズ、正規化、HWCからCHWへのレイアウト変換を単一の融合CUDAカーネルとして実行し、その結果をゼロコピーのデバイステンソルとしてモデルに入力します。これにより、画像ごとのCPU前処理コストとホストからデバイスへのコピーが不要になります。これは、高スループットのバッチやリアルタイムストリームで特に効果的です。

# Build with fused GPU preprocessing (implies cuda + tensorrt)
cargo build --release --features cuda-preprocess

以下の条件をすべて満たす場合、高速パスがAPIを変更せずに自動的に使用されます。featureがコンパイルに組み込まれていること、デバイスが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 and TensorRT acceleration guideを参照してください。

Cargo features#

Featuresはビルド時に有効化されます。デフォルトでは、注釈付けとライブ表示が有効です。

機能デフォルト目的
annotateはいボックス、マスク、キーポイント、ラベルを描画します。--saveに必要です。
visualizeはい--showのリアルタイムウィンドウ表示です。
videoいいえ動画ファイルの読み書きを行います(FFmpeg 7以降が必要です)。
cudaいいえNVIDIA CUDA Execution Providerです。
tensorrtいいえNVIDIA TensorRT Execution Providerです。
cuda-preprocessいいえゼロコピー入力による融合GPU前処理です(cuda、tensorrtを含みます)。
coremlいいえApple CoreML Execution Providerです。
openvinoいいえIntel OpenVINO Execution Providerです。
rocmいいえAMD ROCm Execution Providerです。
directmlいいえWindows DirectML Execution Providerです。

便利なグループには、関連するProviderがまとめられています。nvidia(cuda、tensorrt)、amd(rocm、migraphx)、intel(openvino、onednn)、mobile(nnapi、coreml、qnn)、all(annotate、visualize、video)があります。nnapiqnnxnnpackwebgpuなど、その他のProviderも利用できます。

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 タスクでは、--save-json により、results/ サブフォルダー内にピクセルごとのクラスマップPNGが書き込まれます。depth タスクでは、カラー化された深度マップがソース画像上にブレンドされ、Ultralytics Pythonの plot() 出力と一致します。アノテーション付き画像および動画の保存には annotate 機能が必要ですが、セマンティッククラスマップPNGのエクスポートには必要ありません。動画の入力と出力には video 機能が必要です。

FAQ#

  • いいえ。このcrateはONNX Runtimeを介してエクスポート済みのONNXモデルを直接実行します。事前にUltralyticsパッケージでモデルをトレーニングまたはエクスポートする場合にのみ、Pythonが必要です。

  • YOLO26YOLO11YOLOv8を含む、ONNXにエクスポートされた任意のUltralytics YOLOモデルを実行できます。既知のモデル名は自動的にダウンロードされます。また、任意のローカル .onnx ファイルを --model に指定することもできます。

  • たとえばONNXインテグレーションを使用してPythonパッケージからエクスポートするか、初回実行時にCLIで選択したタスク用の標準nanoモデルをダウンロードします。

  • はい。video 機能を有効にし、システムにFFmpeg 7以降をインストールする必要があります。動画ファイル、Webカメラ、RTSP/RTMP/HTTPストリームに対応しています。

  • どちらもデフォルトで有効になっています。annotate は画像上にボックス、マスク、キーポイント、クラスラベルを描画し、--save でアノテーション付きの結果を書き込むために必要です。visualize--show 用のライブウィンドウを開きます。プログラムから結果を返すだけの、より小規模なヘッドレスビルドにするには、cargo build --no-default-features でこれらを無効にします(必要に応じて個別の機能を追加してください)。

  • このページは概要です。公開されているすべてのstruct、メソッド、設定オプションについて、型ごとに整理した完全なAPIリファレンスが、ソースから直接生成されてdocs.rsで公開されています。

コメント