OpenVINO
OpenVINO IR è il formato di runtime di Intel: un grafo model.xml accanto a un blob di pesi model.bin. LibreYOLO esporta un ONNX intermedio, lo converte con ov.convert_model e scrive un metadata.yaml nella stessa directory.
- Flag
export(format="openvino")- Scrive
- Una directory con model.xml, model.bin e metadata.yaml
- Extra
pip install "libreyolo[onnx,openvino]"- Si ricarica con
LibreYOLO("weights/LibreYOLO9t_openvino")- Forme
- Segue l'ONNX intermedio: batch dinamico quando dynamic=True
- Precisione
- FP32, compressione dei pesi in FP16 (half=True), INT8 tramite NNCF (int8=True con data=)
Installazione
# L'IR viene convertito da un ONNX intermedio, quindi servono entrambi gli extra.pip install "libreyolo[onnx,openvino]"pip install nncfLa conversione passa per un ONNX intermedio, quindi l'extra onnx fa parte del
requisito e non è un accessorio opzionale. NNCF si installa a parte e serve solo
per int8=True.
Esportazione
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # Scrive la directory weights/LibreYOLO9t_openvinopath = model.export(format="openvino")print(path)libreyolo export --model LibreYOLO9t.pt --format openvinomodel.export( format="openvino", imgsz=640, batch=1, dynamic=False, # True mantiene un asse di batch dinamico nell'IR half=False, # True salva i pesi in FP16 int8=False, # True esegue la quantizzazione post-training di NNCF data=None, # obbligatorio quando int8=True output_path=None, # None scrive weights/<stem>_openvino)L'artefatto è una directory, non un file. weights/LibreYOLO9t_openvino contiene
model.xml, model.bin e metadata.yaml, e _fp16 viene inserito prima del
suffisso quando half=True. Sposta o copia l'intera directory: i tre file sono un
unico artefatto.
half=True imposta compress_to_fp16 al salvataggio. È una compressione dei pesi
nell'IR, non un cambiamento della precisione di inferenza che il dispositivo
sceglie in esecuzione.
INT8
from libreyolo import LibreYOLO LibreYOLO("LibreYOLO9t.pt").export( format="openvino", int8=True, data="coco128.yaml", # obbligatorio: per questo formato non c'è un valore predefinito fraction=1.0,)int8=True esegue la quantizzazione post-training di NNCF su un loader di
calibrazione LibreYOLO con il preset mixed, e data è obbligatorio: questo formato
non ha un ripiego a otto immagini. Se NNCF manca viene sollevato un ImportError
che indica il comando di installazione.
Eseguire l'artefatto
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("weights/LibreYOLO9t_openvino")result = model.predict(SAMPLE_IMAGE)print(result.boxes.xyxy[:3])from libreyolo import LibreYOLO # "auto" e "cpu" corrispondono alla CPU, "gpu" e "cuda" alla GPU,# qualsiasi altro valore viene passato in maiuscolo, per esempio "npu" -> NPU.model = LibreYOLO("weights/LibreYOLO9t_openvino", device="gpu")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()]) # I nomi delle classi, il task e la dimensione di input stanno in metadata.yaml accanto all'IR.meta = yaml.safe_load(open("weights/LibreYOLO9t_openvino/metadata.yaml"))print(meta["model_family"], meta["task"], meta["names"]) # Il preprocessing e il postprocessing su questo percorso sono a tuo carico.LibreYOLO() riconosce qualsiasi directory che contenga model.xml e restituisce
lo stesso oggetto Results del checkpoint, leggendo i nomi delle classi, il task,
la dimensione di input e lo schema della posa da metadata.yaml.
La stringa del dispositivo viene mappata, non passata direttamente. auto e cpu
compilano entrambi per la CPU, gpu e cuda compilano entrambi per la GPU, e
qualsiasi altro valore viene convertito in maiuscolo e consegnato a OpenVINO: è
così che si raggiunge un target NPU.
Il terzo snippet è per chi non ha LibreYOLO installato. Lì il preprocessing, il
decoding, l'NMS e il riscalamento delle coordinate diventano a tuo carico, e i nomi
delle classi esistono solo in metadata.yaml.
Vincoli
Un IR senza il suo metadata.yaml si carica comunque, ma il backend ripiega su 80
classi e sul task di rilevamento, il che è sbagliato per qualsiasi altro caso.
Mantieni la directory intatta.
Bloccati prima del tracing: la segmentazione YOLO9, la segmentazione RTMDet-Ins,
SSD, il rilevamento con Faster R-CNN e RetinaNet, e il matting con BiRefNet o
FeyNobg, dove OpenVINO 2026.2 non riesce ad abbassare l'operazione ONNX standard
DeformConv-19 del decoder di matte condiviso.
Quando una combinazione non è né validata né bloccata, il percorso del converter è
disponibile e il progetto non ha registrato una parità di runtime OpenVINO per
essa. Diverse combinazioni sono validate con un contesto esplicito allegato, per
esempio la segmentazione semantica DeepLabV3 a un input fisso di 520 per 520 su
OpenVINO 2026.2 con la precisione di inferenza predefinita della CPU, e lo sguardo
L2CS a un ritaglio del volto fisso di 448 per 448. libreyolo formats stampa
quel contesto per ogni combinazione.
Per la griglia completa di famiglie e task, vedi la matrice di esportazione. Per una sola combinazione:
libreyolo formats --family yolo9 --task detect