Ultralytics YOLO27:
Get Started

Rust용 Ultralytics 추론#

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

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

프로젝트는 ultralytics-inference이라는 단일 크레이트로 제공되며, 빠른 예측 및 배치 작업을 위한 CLI로 사용하거나 Rust 애플리케이션에 직접 포함하는 라이브러리로 사용할 수 있습니다. 모든 Ultralytics 작업과 통합 디바이스 인터페이스를 통해 다양한 하드웨어 백엔드를 지원합니다. 브라우저 추론을 위해 동일한 저장소에서 @ultralytics/yolo npm 패키지도 제공하며, 설정 가이드를 참조하세요.

Rust 추론을 선택하는 이유는 무엇인가요?#

  • 네이티브 속도와 작은 설치 공간. 인터프리터 없이 네이티브 바이너리로 컴파일되므로 서버, 컨테이너 및 엣지 디바이스에 적합합니다.
  • 메모리 안전성. Rust의 소유권 모델은 가비지 컬렉터 없이도 다양한 런타임 오류를 방지합니다.
  • 모든 YOLO 작업. 하나의 API로 검출, 인스턴스 세그멘테이션, 시맨틱 세그멘테이션, 깊이 추정, 분류, 포즈 및 OBB를 처리합니다.
  • 폭넓은 하드웨어 지원. 빌드 시 선택되는 실행 제공자는 CPU와 CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm 및 XNNPACK을 지원합니다.
  • GPU 측 전처리. 선택 사항인 융합 CUDA 커널이 GPU에서 레터박스, 정규화 및 레이아웃 변환을 실행하고, 디바이스에서 벗어나지 않고 결과를 모델에 전달합니다.
  • 자동 다운로드. 알려진 YOLO 모델 이름과 샘플 에셋은 처음 사용할 때 자동으로 다운로드됩니다.
Python 패키지를 찾고 계신가요?

이 페이지에서는 독립 실행형 Rust 크레이트를 다룹니다. Python 워크플로(학습, 검증, 내보내기 및 예측)는 기본 빠른 시작 및 예측 모드를 참조하세요. ONNX 통합을 사용해 모든 Ultralytics 모델을 ONNX로 내보낸 다음 여기서 실행할 수 있습니다.

설치#

Rust 1.89 이상이 필요합니다. video 기능을 사용하려면 시스템에 FFmpeg 6~9도 설치해야 합니다.

# 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 검출 모델과 샘플 이미지를 다운로드하고 추론을 실행한 뒤, 주석이 추가된 결과를 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 --quantize 16

일반 플래그:

플래그기본값설명
--model, -myolo26n.onnxONNX 모델 경로입니다. 알려진 YOLO 이름을 지정하면 자동으로 다운로드됩니다.
--taskdetectdetect, segment, semantic, depth, classify, pose, obb 중 하나입니다.
--source, -s샘플이미지, 디렉터리, glob 패턴, 비디오, 웹캠 인덱스 또는 URL입니다.
--conf0.25신뢰도 임계값입니다.
--iou0.7비최대 억제를 위한 IoU 임계값입니다.
--imgsz모델 메타데이터추론 이미지 크기입니다.
--device자동실행 장치입니다. 예: cuda:0, coreml, tensorrt:0.
--max-det300이미지당 최대 탐지 수입니다.
--recttrue최소 패딩을 사용한 직사각형 추론입니다.
--batch1추론 배치 크기입니다.
--quantize모델 기본값추론 정밀도입니다: 8/int8, 16/fp16, 32/fp32, w8a16 또는 w8a32.
--savetrue주석이 추가된 결과를 runs/<task>/predict에 저장합니다.
--save-framesfalse비디오 파일 대신 비디오 입력의 개별 프레임을 저장합니다.
--save-jsonfalse시맨틱 세그멘테이션 클래스 맵 PNG를 저장합니다.
--showfalse결과를 창에 표시합니다.
--verbosetrue이미지별 결과와 처리 시간을 출력합니다.
--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, Quantization, YOLOModel};

let config = InferenceConfig::new()
    .with_confidence(0.5)
    .with_iou(0.45)
    .with_imgsz(640, 640)
    .with_device(Device::Cuda(0))
    .with_quantize(Quantization::Fp16);

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 모델 이름은 다음 크기에서 자동 다운로드할 수 있습니다: 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 전용입니다. RT-DETR 탐지 모델도 실행할 수 있지만 자동 다운로드는 지원되지 않습니다. 먼저 ONNX로 내보내세요.

입력 소스#

--source 인수와 라이브러리의 Source 유형은 다양한 입력을 지원하며, 문자열을 바탕으로 입력 유형을 자동 감지합니다:

소스예시참고
이미지image.jpg단일 파일입니다.
디렉터리images/폴더의 모든 이미지입니다.
Glob 패턴images/*.jpg셸 스타일 패턴입니다.
비디오video.mp4video 기능이 필요합니다.
웹캠0video 기능이 필요합니다.
스트림rtsp://...video 기능이 필요합니다.
URLhttps://example.com/image.jpg원격 이미지 다운로드입니다.

장치 및 실행 제공자#

GPU 및 가속기 백엔드는 Cargo 기능으로 컴파일되며, 런타임에 --device(CLI) 또는 Device(라이브러리)로 선택합니다. 장치를 지정하지 않으면 빌드에 포함된 제공자가 고정된 우선순위 순서(TensorRT 우선, 다음 CUDA 등)로 등록되므로 기본 기능만 활성화한 빌드는 CPU에서 실행됩니다.

장치 문자열Device 변형빌드 기능하드웨어
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 기능으로 CUDA 실행 제공자를 활성화하고, tensorrt을 추가하면 더욱 최적화된 TensorRT 제공자를 사용할 수 있습니다. 가능한 한 지연 시간을 낮추려면 cuda-preprocess 기능을 사용해 전처리를 GPU에서 수행합니다.

cuda-preprocess은 레터박스 리사이즈, 정규화, HWC에서 CHW로의 레이아웃 변환을 단일 퓨즈드 CUDA 커널로 수행한 다음, 제로 카피 디바이스 텐서로 결과를 모델에 전달합니다. 원시 8비트 프레임은 여전히 GPU로 업로드되며, 개별 GPU에서는 고정된 스테이징 버퍼를 거칩니다. 이 커널은 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 가속 가이드를 참조하세요.

Cargo 기능#

기능은 빌드 시 활성화합니다. 기본 기능은 주석 추가와 실시간 표시를 지원합니다.

기능기본값용도
annotate예박스, 마스크, 키포인트, 레이블을 그립니다. --save에 필요합니다.
visualize예--show의 실시간 창 표시입니다.
video아니요비디오 파일 읽기 및 쓰기(FFmpeg 6~9 필요)입니다.
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.50", 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 기능이 필요합니다.

자주 묻는 질문#

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

  • YOLO26, YOLO11, YOLOv8을 비롯해 ONNX로 내보낸 모든 Ultralytics YOLO 모델을 사용할 수 있습니다. 알려진 모델 이름은 자동으로 다운로드되며, --model을 임의의 로컬 .onnx 파일 경로로 지정할 수도 있습니다.

  • 예를 들어 ONNX 통합을 사용해 Python 패키지에서 내보내거나, 처음 실행할 때 CLI가 선택한 작업의 표준 nano 모델을 다운로드하도록 하세요.

  • 시스템에 video 기능이 활성화되어 있고 FFmpeg 6~9가 설치되어 있으면 사용할 수 있습니다. 여기에는 비디오 파일, 웹캠, RTSP/RTMP/HTTP 스트림이 포함됩니다.

  • 두 기능은 기본적으로 모두 활성화되어 있습니다. annotate은 이미지에 박스, 마스크, 키포인트, 클래스 레이블을 그리며, 주석이 추가된 결과를 기록하려면 --save이 필요합니다. visualize는 --show을 위한 실시간 창을 엽니다. 프로그래밍 방식으로 결과만 반환하는 더 작고 헤드리스 빌드를 원하면 cargo build --no-default-features를 사용해 기능을 비활성화하세요(필요한 개별 기능은 다시 활성화할 수 있습니다).

  • 이 페이지는 개괄적인 내용을 소개합니다. 모든 공개 구조체, 메서드, 구성 옵션에 대한 유형별 전체 API 레퍼런스는 소스에서 직접 생성되어 docs.rs에 게시되어 있습니다.

댓글