OpenVINO

OpenVINO IR là định dạng runtime của Intel, một đồ thị model.xml nằm cạnh một blob trọng số model.bin. LibreYOLO xuất một bản ONNX trung gian, chuyển đổi nó bằng ov.convert_model, rồi ghi một metadata.yaml vào cùng thư mục.

Flag
export(format="openvino")
Kết quả ghi ra
Một thư mục chứa model.xml, model.bin và metadata.yaml
Phụ thuộc thêm
pip install "libreyolo[onnx,openvino]"
Tải lại bằng
LibreYOLO("weights/LibreYOLO9t_openvino")
Hình dạng
Theo bản ONNX trung gian: batch động khi dynamic=True
Precision
FP32, nén trọng số FP16 (half=True), INT8 qua NNCF (int8=True kèm data=)

Cài đặt

Cài đặt
# IR được chuyển đổi từ một bản ONNX trung gian, nên cần cả hai extrapip install "libreyolo[onnx,openvino]"
INT8 cần thêm NNCF
pip install nncf

Việc chuyển đổi đi qua một bản ONNX trung gian, nên extra onnx là một phần bắt buộc chứ không phải một tùy chọn đi kèm. NNCF là một gói cài riêng và chỉ cần đến khi int8=True.

Xuất mô hình

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # Ghi ra thư mục weights/LibreYOLO9t_openvinopath = model.export(format="openvino")print(path)
CLI
libreyolo export --model LibreYOLO9t.pt --format openvino
Tham số
model.export(    format="openvino",    imgsz=640,    batch=1,    dynamic=False,    # True giữ một trục batch động xuyên suốt IR    half=False,       # True lưu trọng số FP16    int8=False,       # True chạy lượng tử hóa sau huấn luyện của NNCF    data=None,        # bắt buộc khi int8=True    output_path=None, # None ghi ra weights/<stem>_openvino)

Artifact là một thư mục, không phải một tệp. weights/LibreYOLO9t_openvino chứa model.xml, model.binmetadata.yaml, và _fp16 được chèn vào trước phần đuôi khi half=True. Hãy di chuyển hoặc sao chép nguyên cả thư mục; ba tệp đó là một artifact duy nhất.

half=True bật compress_to_fp16 khi lưu. Đó là việc nén trọng số bên trong IR, không phải thay đổi inference precision mà thiết bị chọn lúc chạy.

INT8

INT8 với dữ liệu hiệu chuẩn
from libreyolo import LibreYOLO LibreYOLO("LibreYOLO9t.pt").export(    format="openvino",    int8=True,    data="coco128.yaml",   # bắt buộc: định dạng này không có giá trị mặc định    fraction=1.0,)

int8=True chạy lượng tử hóa (quantization) sau huấn luyện của NNCF trên một loader hiệu chuẩn của LibreYOLO với preset mixed, và data là bắt buộc: định dạng này không có phương án dự phòng tám ảnh. Nếu thiếu NNCF, một ImportError sẽ được ném ra kèm theo tên lệnh cài đặt.

Chạy artifact

Qua LibreYOLO
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("weights/LibreYOLO9t_openvino")result = model.predict(SAMPLE_IMAGE)print(result.boxes.xyxy[:3])
Chọn thiết bị
from libreyolo import LibreYOLO # "auto" và "cpu" ánh xạ tới CPU, "gpu" và "cuda" ánh xạ tới GPU,# mọi giá trị khác được chuyển tiếp ở dạng viết hoa, ví dụ "npu" -> NPUmodel = LibreYOLO("weights/LibreYOLO9t_openvino", device="gpu")
OpenVINO trần
import numpy as npimport openvino as ovimport yaml core = ov.Core()print(core.available_devices) compiled = core.compile_model("weights/LibreYOLO9t_openvino/model.xml", "CPU")outputs = compiled(np.zeros((1, 3, 640, 640), dtype=np.float32))print([tensor.shape for tensor in outputs.values()]) # Tên các lớp đối tượng, tác vụ và kích thước đầu vào nằm trong metadata.yaml cạnh IRmeta = yaml.safe_load(open("weights/LibreYOLO9t_openvino/metadata.yaml"))print(meta["model_family"], meta["task"], meta["names"]) # Trên đường này tiền xử lý và hậu xử lý là việc của bạn

LibreYOLO() nhận ra mọi thư mục có chứa model.xml và trả về cùng đối tượng Results như khi dùng checkpoint, đọc tên các lớp đối tượng, tác vụ, kích thước đầu vào và schema pose từ metadata.yaml.

Chuỗi device được ánh xạ chứ không chuyển thẳng qua. autocpu đều biên dịch cho CPU, gpucuda đều biên dịch cho GPU, còn mọi giá trị khác được viết hoa rồi đưa cho OpenVINO, và đó là cách nhắm tới một NPU.

Snippet thứ ba dành cho người đọc không cài LibreYOLO. Ở đó tiền xử lý, việc giải mã, NMS và việc rescale lại tọa độ trở thành việc của bạn, còn tên các lớp đối tượng chỉ tồn tại trong metadata.yaml.

Giới hạn

Một IR không có metadata.yaml vẫn tải được, nhưng khi đó backend sẽ quay về mặc định 80 lớp đối tượng và tác vụ phát hiện đối tượng, điều này là sai với mọi thứ khác. Hãy giữ nguyên vẹn thư mục.

Bị chặn trước khi trace: phân đoạn YOLO9, phân đoạn RTMDet-Ins, phát hiện đối tượng với SSD, Faster R-CNN và RetinaNet, cùng matting BiRefNet hoặc FeyNobg, nơi OpenVINO 2026.2 không hạ được phép toán ONNX chuẩn DeformConv-19 của bộ giải mã matte dùng chung.

Khi một tổ hợp không nằm trong nhóm đã kiểm chứng mà cũng không nằm trong nhóm bị chặn, đường chuyển đổi vẫn khả dụng và dự án chưa ghi nhận việc đối chiếu runtime OpenVINO cho tổ hợp đó. Một số tổ hợp được kiểm chứng kèm theo một ngữ cảnh cụ thể, ví dụ phân đoạn ngữ nghĩa DeepLabV3 ở đầu vào cố định 520 nhân 520 trên OpenVINO 2026.2 với inference precision mặc định của CPU, và gaze L2CS ở ảnh cắt khuôn mặt cố định 448 nhân 448. libreyolo formats in ra ngữ cảnh đó cho từng tổ hợp.

Để xem toàn bộ lưới họ mô hình và tác vụ, xem ma trận xuất mô hình. Với một tổ hợp cụ thể:

Kiểm tra một họ mô hình và một tác vụ trước khi xuất
libreyolo formats --family yolo9 --task detect

Đọc từ libreyolo/export/openvino.py, libreyolo/export/exporter.py, libreyolo/export/support.py, libreyolo/backends/openvino.py và pyproject.toml trên nhánh dev.