Rust用 Ultralytics Inference#
Ultralytics Inference は、Rust で記述された高性能な YOLO 推論ライブラリおよびコマンドラインツールです。エクスポートされた ONNX モデルを ONNX Runtime 経由で実行し、推論時に Python ランタイムを必要とせずに、画像、動画、ウェブカメラ、ストリームに対して高速でメモリ安全な予測を提供します。
このプロジェクトは単一のクレート ultralytics-inference として提供されており、迅速な予測やバッチジョブ用の CLI、または Rust アプリケーションに直接組み込む ライブラリ という2つの方法で使用できます。Ultralytics のすべてのタスクと、統一されたデバイスインターフェイスを通じた幅広いハードウェアバックエンドをサポートしています。
Rustでの推論を選ぶ理由は?#
- ネイティブの速度と小さなフットプリント。 インタープリタなしでネイティブバイナリにコンパイルされるため、サーバー、コンテナ、エッジデバイスに最適です。
- メモリ安全性。 Rust の所有権モデルにより、ガベージコレクタなしで実行時エラーの全クラスを除去します。
- すべてのYOLOタスク。 1つのAPIで検出、セグメンテーション、セマンティックセグメンテーション、深度推定、分類、姿勢推定、OBBを行います。
- 幅広いハードウェアサポート。 CPU に加え、ビルド時に選択可能な CUDA、TensorRT、CoreML、OpenVINO、DirectML、ROCm、XNNPACK 実行プロバイダーをサポートします。
- GPUサイドの前処理。 オプションの融合 CUDA カーネルにより、レターボックス処理、正規化、レイアウト変換をデバイス上で保持し、ゼロコピーの入力パスを実現します。
- 自動ダウンロード。 よく知られた YOLO モデル名とサンプルアセットは、初回使用時に自動的にダウンロードされます。
インストール#
Rust 1.89 以降が必要です。ビデオ機能にはさらに、システムに 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)または Windows上の %USERPROFILE%\.cargo\bin\ に配置されます。
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 | サンプル | 画像、ディレクトリ、glob、動画、Webカメラのインデックス、または URL。 |
--conf | 0.25 | 信頼度の閾値。 |
--iou | 0.7 | 非最大値抑制(NMS)のための IoU 閾値。 |
--imgsz | モデルメタデータ | 推論画像サイズ。 |
--device | cpu | 実行デバイス。例:cuda:0、coreml、tensorrt:0。 |
--half | false | FP16 半精度推論。 |
--save | true | 注釈付きの結果を runs/<task>/predict に保存します。 |
--show | false | ウィンドウに結果を表示します。 |
--classes | すべて | クラス 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(())
}ビルダー API を使用して、InferenceConfig でしきい値、画像サイズ、精度、デバイスを制御します。
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(姿勢推定) | pose | ボックスおよびキーポイント | yolo26n-pose.onnx |
| 指向性ボックス | obb | 回転バウンディングボックス | yolo26n-obb.onnx |
モデル互換性#
ONNX にエクスポートされた任意の Ultralytics モデルをローカルファイルからロードできます。標準の 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 | シェルスタイルのパターン。 |
| 動画 | video.mp4 | video 機能が必要です。 |
| Webcam | 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 GPU |
tensorrt:0 | Device::TensorRt(0) | tensorrt | NVIDIA GPU、最適化済み |
coreml | Device::CoreMl | coreml | Apple Silicon / macOS |
intel:cpu | Device::IntelCpu | openvino | Intel CPU |
intel:gpu | Device::IntelGpu | openvino | Intel GPU |
intel:npu | Device::IntelNpu | openvino | Intel NPU |
directml:0 | Device::DirectMl(0) | directml | Windows GPU |
rocm:0 | Device::Rocm(0) | rocm | AMD GPU |
xnnpack | Device::Xnnpack | xnnpack | 最適化済み CPU |
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrtGPU アクセラレーションおよび CUDA 前処理#
NVIDIA ハードウェアでは、cuda 機能によって CUDA 実行プロバイダが有効になり、tensorrt によってさらなる最適化のための TensorRT プロバイダが追加されます。可能な限り低いレイテンシを実現するために、cuda-preprocess 機能は前処理を GPU に移行します。
cuda-preprocess は、レターボックスのリサイズ、正規化、および HWC から CHW へのレイアウト変換を単一の融合された CUDA カーネルとして実行し、結果をゼロコピーのデバイステンスとしてモデルに供給します。これにより、画像ごとの CPU 前処理コストとホストからデバイスへのコピーが削減され、高スループットのバッチやリアルタイムストリームにとって最も重要になります。
# Build with fused GPU preprocessing (implies cuda + tensorrt)
cargo build --release --features cuda-preprocess高速パスは、以下の条件がすべて満たされる場合に、API を変更することなく自動的に使用されます。機能がコンパイル時に組み込まれていること、デバイスが CUDA または TensorRT であること、タスクが検出、セグメンテーション、姿勢推定、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 アクセラレーションガイドを参照してください。
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.33", features = ["video"] }出力と保存#
デフォルトでは、予測結果はアノテーションが付加され、自動的にインクリメントされる実行ディレクトリに保存されます:
runs/
└── detect/
└── predict/ # then predict2, predict3, ...
└── image.jpg # annotated resultサブフォルダはタスク(runs/segment/、runs/pose/ など)に対応します。ビデオソースの場合、注釈付きの出力はビデオファイルとして書き込まれます。個々のフレームを代わりに書き込むには --save-frames を渡します。semantic タスクの場合、--save-json はピクセルごとのクラスマップ PNG を results/ サブフォルダの下に書き込みます。depth タスクの場合、カラー化された深度マップがソース画像にブレンドされ、Ultralytics Python の plot() 出力と一致します。注釈付きの画像とビデオの保存には annotate 機能が必要ですが、セマンティッククラスマップ PNG のエクスポートには必要ありません。ビデオの入力と出力には video 機能が必要です。
よくある質問 (FAQ)#
いいえ。クレートは、エクスポートされた ONNX モデルを ONNX Runtime を介して直接実行します。Python は、Ultralytics パッケージを使用して事前にモデルをトレーニングまたはエクスポートする場合にのみ必要です。
Python パッケージから(ONNX 統合などを使用して)エクスポートするか、初回実行時に選択したタスクの標準ナノモデルを CLI にダウンロードさせます。
はい、
video機能が有効になっており、システムに FFmpeg 7 以降がインストールされている場合可能です。これには、ビデオファイル、Webカメラ、RTSP/RTMP/HTTP ストリームが含まれます。両方ともデフォルトで有効になっています。
annotateは画像にボックス、マスク、キーポイント、クラスラベルを描画し、--saveが注釈付きの結果を書き込むために必要です。visualizeは--showのライブウィンドウを開きます。結果をプログラムで返すだけの、より小さくヘッドレスなビルドにするには、cargo build --no-default-featuresでそれらを無効にします(必要に応じて個々の機能を再度追加します)。このページは高レベルの概要です。すべての公開されている構造体、メソッド、および設定オプションのための、タイプ別の完全な API リファレンスはソースから直接生成され、docs.rs で公開されています。