OpenVINO
OpenVINO IR est le format de runtime d'Intel, un graphe model.xml à côté d'un blob de poids model.bin. LibreYOLO exporte un ONNX intermédiaire, le convertit avec ov.convert_model, et écrit un metadata.yaml dans le même répertoire.
- Flag
export(format="openvino")- Écrit
- Un répertoire contenant model.xml, model.bin et metadata.yaml
- Extra
pip install "libreyolo[onnx,openvino]"- Se recharge avec
LibreYOLO("weights/LibreYOLO9t_openvino")- Formes
- Suit l'ONNX intermédiaire : batch dynamique quand dynamic=True
- Précision
- FP32, compression des poids en FP16 (half=True), INT8 via NNCF (int8=True avec data=)
Installation
# L'IR est converti depuis un ONNX intermédiaire : les deux extras sont requis.pip install "libreyolo[onnx,openvino]"pip install nncfLa conversion passe par un ONNX intermédiaire, donc l'extra onnx fait partie du
prérequis plutôt que d'un compagnon optionnel. NNCF s'installe à part et n'est
nécessaire que pour int8=True.
Export
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # Écrit le répertoire 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 garde un axe de batch dynamique dans l'IR half=False, # True stocke des poids FP16 int8=False, # True lance la quantification post-training NNCF data=None, # requis quand int8=True output_path=None, # None écrit weights/<stem>_openvino)L'artefact est un répertoire, pas un fichier. weights/LibreYOLO9t_openvino contient
model.xml, model.bin et metadata.yaml, et _fp16 est inséré avant le suffixe
quand half=True. Déplacez ou copiez le répertoire entier ; les trois fichiers ne font
qu'un seul artefact.
half=True active compress_to_fp16 à l'enregistrement. C'est une compression des poids
dans l'IR, pas un changement de la précision d'inférence que le device choisit à
l'exécution.
INT8
from libreyolo import LibreYOLO LibreYOLO("LibreYOLO9t.pt").export( format="openvino", int8=True, data="coco128.yaml", # requis : aucun défaut pour ce format fraction=1.0,)int8=True lance la quantification post-training de NNCF sur un loader de calibration
LibreYOLO avec le preset mixed, et data est obligatoire : ce format n'a pas de repli
sur huit images. Un NNCF absent lève une ImportError qui nomme la commande
d'installation.
Exécuter l'artefact
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" et "cpu" pointent vers CPU, "gpu" et "cuda" vers GPU,# tout le reste est transmis en majuscules, par exemple "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()]) # Noms de classe, tâche et taille d'entrée sont dans metadata.yaml.meta = yaml.safe_load(open("weights/LibreYOLO9t_openvino/metadata.yaml"))print(meta["model_family"], meta["task"], meta["names"]) # Le prétraitement et le postprocessing sont à votre charge ici.LibreYOLO() reconnaît tout répertoire contenant model.xml et renvoie le même objet
Results que le checkpoint, en lisant les noms de classe, la tâche, la taille d'entrée
et le schéma de pose depuis metadata.yaml.
La chaîne de device est remappée plutôt que transmise telle quelle. auto et cpu
compilent tous deux pour le CPU, gpu et cuda compilent tous deux pour le GPU, et
toute autre valeur est passée en majuscules à OpenVINO, ce qui est la façon d'atteindre
une cible NPU.
Le troisième snippet s'adresse aux lecteurs qui n'ont pas LibreYOLO installé. Le
prétraitement, le décodage, le NMS et le rééchelonnement des coordonnées y sont à votre
charge, et les noms de classe n'existent que dans metadata.yaml.
Contraintes
Un IR privé de son metadata.yaml se charge quand même, mais le backend se rabat alors
sur 80 classes et la tâche de détection, ce qui est faux pour tout le reste. Gardez le
répertoire intact.
Bloqués avant le tracing : la segmentation YOLO9, la segmentation RTMDet-Ins, la
détection SSD, Faster R-CNN et RetinaNet, et le matting BiRefNet ou FeyNobg, où
OpenVINO 2026.2 n'arrive pas à abaisser l'opération ONNX standard DeformConv-19 du
décodeur de matte partagé.
Quand une combinaison n'est ni validée ni bloquée, le chemin du convertisseur est
disponible et le projet n'a pas enregistré de parité du runtime OpenVINO pour elle.
Plusieurs combinaisons sont validées avec un contexte explicite attaché, par exemple la
segmentation sémantique DeepLabV3 à une entrée fixe de 520 par 520 sur OpenVINO 2026.2
avec la précision d'inférence par défaut du CPU, et l'estimation du regard L2CS sur un
crop de visage fixe de 448 par 448. libreyolo formats affiche ce contexte pour chaque
combinaison.
Pour la grille complète des familles et des tâches, voir la matrice d'export. Pour une seule combinaison :
libreyolo formats --family yolo9 --task detect