Ultralytics YOLO27:

Rust용 Ultralytics Inference#

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

Ultralytics InferenceRust로 작성된 고성능 YOLO 추론 라이브러리이자 명령줄 도구입니다. ONNX 모델을 ONNX Runtime을 통해 실행하여 추론 시 Python 런타임 없이 이미지, 동영상, 웹캠 및 스트림에서 빠르고 메모리 안전한 예측을 제공합니다.

이 프로젝트는 단일 crate인 ultralytics-inference으로 제공되며, 두 가지 방식으로 사용할 수 있습니다. 빠른 예측과 배치 작업을 위한 CLI로 사용하거나, Rust 애플리케이션에 직접 임베드되는 라이브러리로 사용할 수 있습니다. 모든 Ultralytics task를 지원하며, 통합된 디바이스 인터페이스를 통해 다양한 하드웨어 백엔드를 지원합니다.

Rust 추론을 사용하는 이유#

  • 네이티브 속도와 작은 풋프린트. 인터프리터 없이 네이티브 바이너리로 컴파일되므로 서버, 컨테이너 및 엣지 디바이스에 적합합니다.
  • 메모리 안전성. Rust의 소유권 모델은 가비지 컬렉터 없이도 다양한 런타임 오류를 원천적으로 제거합니다.
  • 모든 YOLO task. 하나의 API에서 detect, segment, semantic segmentation, depth estimation, classify, pose 및 OBB를 지원합니다.
  • 폭넓은 하드웨어 지원. CPU와 CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm 및 XNNPACK 실행 프로바이더를 빌드 시 선택할 수 있습니다.
  • GPU 측 전처리. 선택적 fused CUDA kernel을 사용하면 letterbox, normalize 및 레이아웃 변환을 디바이스에서 처리하여 zero-copy 입력 경로를 유지합니다.
  • 자동 다운로드. 알려진 YOLO 모델 이름과 샘플 asset은 처음 사용할 때 자동으로 다운로드됩니다.
Python 패키지를 찾고 계신가요?

이 페이지에서는 독립형 Rust crate를 다룹니다. Python 워크플로(학습, 검증, export 및 prediction)는 기본 QuickstartPredict mode를 참조하세요. ONNX integration을 사용하여 모든 Ultralytics 모델을 ONNX로 export한 다음 여기에서 실행할 수 있습니다.

설치#

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

바이너리는 ~/.cargo/bin/ultralytics-inference(Linux 및 macOS) 또는 Windows에서 %USERPROFILE%\.cargo\bin\에 배치됩니다.

CLI 빠른 시작#

CLI는 predict 하위 명령을 제공합니다. 인수를 지정하지 않으면 nano detection 모델과 샘플 이미지를 다운로드하고, 추론을 실행한 뒤 주석이 추가된 결과를 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 이름은 자동으로 다운로드됩니다.
--taskdetectdetect, segment, pose, obb, classify, semantic, depth 중 하나입니다.
--source, -s샘플이미지, 디렉터리, glob, 동영상, 웹캠 인덱스 또는 URL입니다.
--conf0.25Confidence threshold입니다.
--iou0.7non-maximum suppression을 위한 IoU threshold입니다.
--imgsz모델 metadata추론 이미지 크기입니다.
--devicecpu실행 디바이스입니다. 예를 들어 cuda:0, coreml, tensorrt:0를 사용할 수 있습니다.
--halffalseFP16 half-precision 추론입니다.
--savetrue주석이 추가된 결과를 runs/<task>/predict에 저장합니다.
--showfalse결과를 창에 표시합니다.
--classes모두class ID로 detection을 필터링합니다. 예를 들어 "0,1,2"을 사용할 수 있습니다.

라이브러리 빠른 시작#

모델을 로드하고 prediction을 실행합니다. class name, task type 및 image size와 같은 모델 metadata는 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로 threshold, image size, precision 및 device를 제어할 수 있습니다.

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")?;

각 task는 Results의 서로 다른 field를 채웁니다. 아래의 각 탭은 완전하게 실행 가능한 프로그램이며, 모델과 샘플 입력은 처음 실행할 때 자동으로 다운로드됩니다. 자신의 파일에서 실행하려면 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(())
}

지원되는 task#

모든 Ultralytics task를 지원합니다. --model을 생략하면 선택한 task에 해당하는 nano 모델이 자동으로 다운로드됩니다.

태스크--task출력기본 모델
탐지detectBounding box 및 classyolo26n.onnx
Instance segmentationsegmentBox와 인스턴스별 maskyolo26n-seg.onnx
Semantic segmentationsemantic픽셀별 class mapyolo26n-sem.onnx
Depth estimationdepth미터 단위의 픽셀별 depth mapyolo26n-depth.onnx
ClassificationclassifyClass probabilityyolo26n-cls.onnx
포즈poseBox와 keypointyolo26n-pose.onnx
방향이 지정된 boxobb회전된 bounding boxyolo26n-obb.onnx

모델 호환성#

ONNX로 export된 모든 Ultralytics 모델은 로컬 파일에서 로드할 수 있습니다. 표준 YOLO26, YOLO11 및 YOLOv8 모델 이름은 n, s, m, lx 크기에서 자동 다운로드할 수 있습니다.

Model family자동 다운로드 가능한 variant
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

Semantic segmentation(-sem)과 depth estimation(-depth)은 YOLO26에서만 지원됩니다.

입력 소스#

--source 인수와 라이브러리의 Source type은 문자열에서 자동으로 감지되는 다양한 입력 형식을 지원합니다.

소스예시참고
이미지image.jpg단일 파일입니다.
디렉터리images/폴더의 모든 이미지입니다.
Globimages/*.jpgShell 스타일 패턴입니다.
동영상video.mp4video feature가 필요합니다.
Webcam0video feature가 필요합니다.
Streamrtsp://...video feature가 필요합니다.
URLhttps://example.com/image.jpg원격 이미지 다운로드입니다.

디바이스 및 실행 프로바이더#

추론은 기본적으로 CPU에서 실행됩니다. GPU 및 accelerator 백엔드는 Cargo feature로 컴파일되며, --device(CLI) 또는 Device(라이브러리)를 사용하여 런타임에 선택합니다.

디바이스 문자열Device variant빌드 featureHardware
cpuDevice::Cpu기본 포함모든 CPU
cuda:0Device::Cuda(0)cudaNVIDIA GPU
tensorrt:0Device::TensorRt(0)tensorrt최적화된 NVIDIA 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 실행 프로바이더를 활성화하며, tensorrt은 추가 최적화를 위한 TensorRT 프로바이더를 추가합니다. 가능한 가장 낮은 latency를 위해 cuda-preprocess feature는 전처리를 GPU에서 수행합니다.

cuda-preprocess은 letterbox resizing, normalization 및 HWC-to-CHW 레이아웃 변환을 하나의 fused CUDA kernel로 실행한 다음, 그 결과를 zero-copy device tensor로 모델에 전달합니다. 이를 통해 이미지별 CPU 전처리 비용과 host-to-device 복사가 제거되며, 이는 처리량이 높은 batch와 실시간 stream에서 특히 중요합니다.

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

다음 조건을 모두 충족하면 빠른 경로가 API 변경 없이 자동으로 사용됩니다. feature가 컴파일되어 있고, device가 CUDA 또는 TensorRT이며, task가 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이 필요하며 런타임에 fused preprocessing kernel을 위해 NVRTC를 사용합니다. 버전 요구 사항과 문제 해결 방법은 CUDA and TensorRT acceleration guide를 참조하세요.

Cargo feature#

Feature는 빌드 시 활성화됩니다. 기본값에는 annotation 및 live display가 포함됩니다.

기능기본값목적
annotateBox, mask, keypoint 및 label을 그리며, --save에 필요합니다.
visualize--show을 위한 실시간 창 표시입니다.
video아니요동영상 파일을 읽고 씁니다(FFmpeg 7+ 필요).
cuda아니요NVIDIA CUDA 실행 프로바이더입니다.
tensorrt아니요NVIDIA TensorRT 실행 프로바이더입니다.
cuda-preprocess아니요zero-copy 입력을 지원하는 fused 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를 설치하거나 라이브러리를 추가할 때 feature를 활성화합니다.

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

하위 폴더는 task에 해당합니다(runs/segment/, runs/pose/ 등). 비디오 소스의 경우 주석이 추가된 출력은 비디오 파일로 기록되며, 개별 프레임으로 기록하려면 --save-frames를 전달합니다. semantic task에서는 --save-json가 픽셀별 클래스 맵 PNG를 results/ 하위 폴더에 기록합니다. depth task에서는 색상화된 깊이 맵이 소스 이미지 위에 혼합되며, Ultralytics Python plot() 출력과 일치합니다. 주석이 추가된 이미지와 비디오를 저장하려면 annotate feature가 필요하지만, semantic 클래스 맵 PNG 내보내기에는 필요하지 않습니다. 비디오 입력 및 출력에는 video feature가 필요합니다.

FAQ#

  • 아니요. 이 crate는 ONNX Runtime을 통해 내보낸 ONNX 모델을 직접 실행합니다. 사전에 Ultralytics 패키지로 모델을 학습하거나 내보내기하는 경우에만 Python이 필요합니다.

  • YOLO26, YOLO11, YOLOv8을 포함하여 ONNX로 내보낸 모든 Ultralytics YOLO 모델을 실행할 수 있습니다. 알려진 모델 이름은 자동으로 다운로드되며, 모든 로컬 .onnx 파일을 --model에 지정할 수도 있습니다.

  • 예를 들어 ONNX 통합을 사용하여 Python 패키지에서 내보내거나, 첫 실행 시 CLI가 선택한 task에 대한 표준 nano 모델을 다운로드하도록 할 수 있습니다.

  • 예. video feature를 활성화하고 시스템에 FFmpeg 7+를 설치하면 지원됩니다. 비디오 파일, 웹캠, RTSP/RTMP/HTTP 스트림을 모두 사용할 수 있습니다.

  • 두 feature 모두 기본적으로 활성화되어 있습니다. annotate은 이미지에 박스, 마스크, keypoint 및 클래스 label을 그리며, --save이 주석이 추가된 결과를 기록하려면 필요합니다. visualize--show을 위한 라이브 창을 엽니다. 프로그래밍 방식으로 결과만 반환하는 더 작고 headless한 빌드가 필요하면 cargo build --no-default-features로 해당 feature를 비활성화합니다(필요에 따라 개별 feature를 다시 추가할 수 있습니다).

  • 이 페이지는 high-level overview입니다. 모든 public struct, method 및 configuration option에 대한 완전한 type별 API reference는 docs.rs에 게시되며, 소스에서 직접 생성됩니다.

댓글