YOLO Vision 2026:

Ultralytics Inference cho Rust#

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

Ultralytics Inference là một thư viện suy luận YOLO hiệu suất cao và là công cụ dòng lệnh được viết bằng Rust. Nó chạy các model ONNX đã được xuất thông qua ONNX Runtime để cung cấp các dự đoán nhanh chóng, an toàn về bộ nhớ trên hình ảnh, video, webcam và luồng dữ liệu, không yêu cầu runtime Python tại thời điểm suy luận.

Dự án được phân phối dưới dạng một crate duy nhất, ultralytics-inference, mà bạn có thể sử dụng theo hai cách: như một CLI cho các dự đoán nhanh và tác vụ hàng loạt, hoặc như một thư viện được tích hợp trực tiếp vào ứng dụng Rust của bạn. Nó hỗ trợ mọi task của Ultralytics và một tập hợp rộng các backend phần cứng thông qua giao diện thiết bị thống nhất.

Tại sao lại chọn inference bằng Rust?#

  • Tốc độ native và dung lượng nhỏ gọn. Biên dịch thành tệp nhị phân native không có trình thông dịch, rất lý tưởng cho máy chủ, container và thiết bị biên.
  • An toàn bộ nhớ. Ownership model của Rust loại bỏ hoàn toàn các loại lỗi runtime mà không cần garbage collector.
  • Tất cả các tác vụ YOLO. Phát hiện, phân đoạn, phân đoạn ngữ nghĩa, ước tính chiều sâu, phân loại, pose và OBB từ một API duy nhất.
  • Hỗ trợ phần cứng rộng rãi. CPU cộng với các execution provider như CUDA, TensorRT, CoreML, OpenVINO, DirectML, ROCm và XNNPACK được lựa chọn tại thời điểm build.
  • Tiền xử lý phía GPU. Một kernel CUDA được hợp nhất tùy chọn giữ letterbox, normalize và chuyển đổi layout trên thiết bị để có đường dẫn input zero-copy.
  • Tự động tải xuống. Các tên model YOLO đã biết và các asset mẫu sẽ tự động tải xuống trong lần sử dụng đầu tiên.
Bạn đang tìm gói Python?

Trang này đề cập đến crate Rust độc lập. Đối với quy trình làm việc trên Python (đào tạo, xác thực, xuất và dự đoán), hãy xem phần Quickstart chính và Predict mode. Xuất bất kỳ model Ultralytics nào sang ONNX bằng tích hợp ONNX, sau đó chạy nó tại đây.

Cài đặt#

Yêu cầu Rust 1.89 trở lên. Tính năng video bổ sung yêu cầu phải cài đặt FFmpeg 7+ trên hệ thống.

# 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

Tệp nhị phân được đặt tại ~/.cargo/bin/ultralytics-inference (Linux và macOS) hoặc %USERPROFILE%\.cargo\bin\ trên Windows.

Hướng dẫn nhanh CLI#

CLI cung cấp một lệnh con predict. Khi không có đối số, nó sẽ tải xuống một model phát hiện nano và các hình ảnh mẫu, chạy suy luận và lưu các kết quả đã chú thích vào 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

Các flag phổ biến:

FlagMặc địnhMô tả
--model, -myolo26n.onnxĐường dẫn đến model ONNX; tên YOLO đã biết sẽ được tự động tải xuống.
--taskdetectMột trong detect, segment, pose, obb, classify, semantic, depth.
--source, -smẫuHình ảnh, thư mục, glob, video, chỉ mục webcam hoặc URL.
--conf0.25Ngưỡng tin cậy (Confidence threshold).
--iou0.7Ngưỡng IoU cho non-maximum suppression.
--imgszmetadata của modelKích thước hình ảnh inference.
--devicecpuThiết bị thực thi, ví dụ cuda:0, coreml, tensorrt:0.
--halffalseInference với độ chính xác FP16.
--savetrueLưu kết quả được chú thích vào runs/<task>/predict.
--showfalseHiển thị kết quả trong cửa sổ.
--classestất cảLọc các phát hiện theo ID lớp, ví dụ "0,1,2".

Hướng dẫn nhanh cho thư viện#

Tải model và chạy dự đoán. Metadata của model như tên lớp, loại task và kích thước hình ảnh được đọc tự động từ file 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(())
}

Sử dụng InferenceConfig để kiểm soát các ngưỡng, kích thước hình ảnh, độ chính xác và thiết bị bằng API builder:

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

Mỗi task điền dữ liệu vào một trường khác nhau trên Results. Mỗi tab bên dưới là một chương trình hoàn chỉnh, có thể chạy được; model và các đầu vào mẫu sẽ tự động tải xuống trong lần chạy đầu tiên. Thay thế predict_default() bằng predict("image.jpg") để chạy trên các tệp của riêng bạn.

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(())
}

Các task được hỗ trợ#

Tất cả các task của Ultralytics đều được hỗ trợ. Khi --model bị bỏ qua, model nano phù hợp cho task đã chọn sẽ tự động được tải xuống.

Tác vụ--taskĐầu raModel mặc định
DetectiondetectBounding box và các lớpyolo26n.onnx
Instance segmentationsegmentCác box cộng với mask theo instanceyolo26n-seg.onnx
Semantic segmentationsemanticBản đồ lớp trên mỗi pixelyolo26n-sem.onnx
Ước tính độ sâudepthBản đồ độ sâu theo pixel tính bằng métyolo26n-depth.onnx
Phân loạiclassifyXác suất lớpyolo26n-cls.onnx
PoseposeCác box cộng với keypointyolo26n-pose.onnx
Oriented boxobbRotated bounding boxyolo26n-obb.onnx

Tính tương thích của model#

Bất kỳ model Ultralytics nào được xuất sang ONNX đều có thể được tải từ tệp cục bộ. Tính năng tự động tải xuống có sẵn cho các tên model chuẩn YOLO26, YOLO11 và YOLOv8 với các kích thước n, s, m, lx:

Họ modelCác biến thể tự động tải xuống
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

Phân đoạn ngữ nghĩa (-sem) và ước tính chiều sâu (-depth) chỉ dành riêng cho YOLO26.

Nguồn input#

Đối số --source (và kiểu Source trong thư viện) chấp nhận nhiều loại đầu vào, được tự động phát hiện từ chuỗi:

NguồnVí dụLưu ý
Hình ảnhimage.jpgFile đơn lẻ.
Thư mụcimages/Tất cả hình ảnh trong thư mục.
Globimages/*.jpgMẫu kiểu shell.
Videovideo.mp4Yêu cầu tính năng video.
Webcam0Yêu cầu tính năng video.
Streamrtsp://...Yêu cầu tính năng video.
URLhttps://example.com/image.jpgTải xuống hình ảnh từ xa.

Thiết bị và execution provider#

Suy luận chạy trên CPU theo mặc định. Các backend GPU và bộ tăng tốc được biên dịch dưới dạng Cargo features và được chọn tại thời điểm chạy bằng --device (CLI) hoặc Device (thư viện).

Chuỗi thiết bịBiến thể DeviceTính năng buildPhần cứng
cpuDevice::Cpuđược tích hợpBất kỳ CPU nào
cuda:0Device::Cuda(0)cudaNVIDIA GPU
tensorrt:0Device::TensorRt(0)tensorrtNVIDIA GPU, đã tối ưu hóa
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::XnnpackxnnpackCPU đã tối ưu hóa
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrt

Tăng tốc GPU và tiền xử lý CUDA#

Trên phần cứng NVIDIA, tính năng cuda kích hoạt nhà cung cấp thực thi CUDA, và tensorrt bổ sung nhà cung cấp TensorRT để tối ưu hóa thêm. Để có độ trễ thấp nhất có thể, tính năng cuda-preprocess chuyển quá trình tiền xử lý sang GPU.

cuda-preprocess thực hiện thay đổi kích thước letterbox, chuẩn hóa và chuyển đổi bố cục HWC sang CHW thành một kernel CUDA được hợp nhất duy nhất, sau đó cung cấp kết quả cho model dưới dạng tensor thiết bị không sao chép (zero-copy). Điều này loại bỏ chi phí tiền xử lý CPU trên mỗi hình ảnh và việc sao chép từ host sang device, điều quan trọng nhất đối với các batch có thông lượng cao và luồng thời gian thực.

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

Đường dẫn nhanh (fast path) được sử dụng tự động mà không cần thay đổi API khi thỏa mãn tất cả các điều kiện sau: tính năng đã được biên dịch, thiết bị là CUDA hoặc TensorRT, tác vụ là detect, segment, pose, OBB, semantic segmentation hoặc depth estimation, và model sử dụng đầu vào FP32. Tính năng này được bật theo mặc định và có thể tắt cho từng model:

use ultralytics_inference::{Device, InferenceConfig};

let config = InferenceConfig::new()
    .with_device(Device::TensorRt(0))
    .with_cuda_preprocess(false); // force CPU preprocessing
Khớp với bộ công cụ CUDA của bạn

cuda-preprocess yêu cầu bộ công cụ CUDA tương thích tại thời điểm xây dựng và sử dụng NVRTC tại thời điểm chạy cho kernel tiền xử lý được hợp nhất. Xem hướng dẫn tăng tốc CUDA và TensorRT để biết các yêu cầu phiên bản và khắc phục sự cố.

Các tính năng của Cargo#

Các tính năng được kích hoạt tại thời điểm biên dịch. Các giá trị mặc định bao gồm chú thích và hiển thị trực tiếp.

Tính năngMặc địnhMục đích
annotateVẽ hộp, mặt nạ, keypoint và nhãn; bắt buộc đối với --save.
visualizeHiển thị cửa sổ thời gian thực cho --show.
videokhôngĐọc và ghi tệp video (yêu cầu FFmpeg 7+).
cudakhôngNhà cung cấp thực thi NVIDIA CUDA.
tensorrtkhôngNhà cung cấp thực thi NVIDIA TensorRT.
cuda-preprocesskhôngTiền xử lý GPU hợp nhất với đầu vào zero-copy (ngụ ý cuda, tensorrt).
coremlkhôngNhà cung cấp thực thi Apple CoreML.
openvinokhôngNhà cung cấp thực thi Intel OpenVINO.
rocmkhôngNhà cung cấp thực thi AMD ROCm.
directmlkhôngNhà cung cấp thực thi Windows DirectML.

Các nhóm tiện ích gom các nhà cung cấp liên quan: nvidia (cuda, tensorrt), amd (rocm, migraphx), intel (openvino, onednn), mobile (nnapi, coreml, qnn) và all (annotate, visualize, video). Các nhà cung cấp bổ sung như nnapi, qnn, xnnpack, webgpu và các nhà cung cấp khác cũng có sẵn.

Kích hoạt các tính năng khi cài đặt CLI hoặc thêm thư viện:

cargo install ultralytics-inference --features video
cargo install ultralytics-inference --features cuda,tensorrt
[dependencies]
ultralytics-inference = { version = "0.0.33", features = ["video"] }

Đầu ra và lưu trữ#

Theo mặc định, các dự đoán được chú thích và lưu vào thư mục chạy tự động tăng dần:

runs/
└── detect/
    └── predict/          # then predict2, predict3, ...
        └── image.jpg     # annotated result

Thư mục con khớp với task (runs/segment/, runs/pose/, v.v.). Đối với các nguồn video, đầu ra được chú thích được ghi dưới dạng tệp video; hãy truyền --save-frames để ghi các khung hình riêng lẻ thay thế. Đối với task semantic, --save-json ghi các tệp PNG bản đồ lớp theo từng pixel dưới thư mục con results/. Đối với task depth, bản đồ độ sâu có màu được hòa trộn trên hình ảnh nguồn, khớp với đầu ra Python plot() của Ultralytics. Việc lưu hình ảnh và video được chú thích yêu cầu tính năng annotate; việc xuất PNG bản đồ lớp ngữ nghĩa thì không. Đầu vào và đầu ra video yêu cầu tính năng video.

Câu hỏi thường gặp#

Tôi có cần cài đặt Python không?#

Không. Crate này chạy các model ONNX đã được xuất trực tiếp thông qua ONNX Runtime. Python chỉ cần thiết nếu bạn đào tạo hoặc xuất model bằng gói Ultralytics trước đó.

Tôi có thể chạy những mô hình nào?#

Bất kỳ model Ultralytics YOLO nào được xuất sang ONNX, bao gồm YOLO26, YOLO11YOLOv8. Các tên model đã biết sẽ tự động tải xuống; bạn cũng có thể trỏ --model tới bất kỳ tệp .onnx cục bộ nào.

Làm thế nào để tôi có được tệp mô hình?#

Xuất từ gói Python, ví dụ với tích hợp ONNX hoặc để CLI tải xuống một model nano chuẩn cho task đã chọn trong lần chạy đầu tiên.

Video có được hỗ trợ không?#

Có, với tính năng video được bật và FFmpeg 7+ được cài đặt trên hệ thống. Điều này bao gồm các tệp video, webcam và các luồng RTSP/RTMP/HTTP.

Các tính năng annotatevisualize có tác dụng gì?#

Cả hai đều được bật theo mặc định. annotate vẽ các hộp, mặt nạ, keypoint và nhãn lớp lên hình ảnh và là bắt buộc để --save ghi lại kết quả được chú thích. visualize mở một cửa sổ trực tiếp cho --show. Đối với một bản dựng headless nhỏ hơn chỉ trả về kết quả theo chương trình, hãy tắt chúng bằng cargo build --no-default-features (thêm lại các tính năng riêng lẻ nếu cần).

Tham chiếu API đầy đủ nằm ở đâu?#

Trang này là tổng quan cấp cao. Tài liệu tham khảo API hoàn chỉnh theo từng kiểu cho mọi struct, phương thức và tùy chọn cấu hình công khai được xuất bản trên docs.rs, được tạo trực tiếp từ mã nguồn.

Những người đóng góp

Bình luận