OpenVINO
OpenVINO IRはIntelのランタイム形式で、model.xmlグラフとmodel.binの重みblobから構成されます。LibreYOLOは中間ONNXをエクスポートし、ov.convert_modelで変換して、同じディレクトリにmetadata.yamlを書き出します。
- フラグ
export(format="openvino")- 出力
- model.xml、model.bin、metadata.yamlを含むディレクトリ
- 追加パッケージ
pip install "libreyolo[onnx,openvino]"- 再読み込み
LibreYOLO("weights/LibreYOLO9t_openvino")- 形状
- 中間ONNXに従う。dynamic=Trueの場合は動的バッチ
- 精度
- FP32、FP16の重み圧縮(half=True)、NNCFによるINT8(int8=Trueとdata=)
インストール
# IRは中間ONNXから変換するため、両方の追加パッケージが必要pip install "libreyolo[onnx,openvino]"pip install nncf変換は中間ONNXを経由するため、onnx追加パッケージは任意の補助ではなく要件の一部です。
NNCFは別にインストールし、int8=Trueの場合だけ必要です。
エクスポート
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # ディレクトリweights/LibreYOLO9t_openvinoを書き出しpath = model.export(format="openvino")print(path)libreyolo export --model LibreYOLO9t.pt --format openvinomodel.export( format="openvino", imgsz=640, batch=1, dynamic=False, # TrueはIR全体で動的バッチ軸を維持 half=False, # TrueはFP16の重みを保存 int8=False, # TrueはNNCFの学習後量子化を実行 data=None, # int8=Trueの場合に必須 output_path=None, # Noneはweights/<stem>_openvinoに書き出し)成果物はファイルではなくディレクトリです。weights/LibreYOLO9t_openvinoには
model.xml、model.bin、metadata.yamlが入り、half=Trueの場合は接尾辞の前に
_fp16が挿入されます。ディレクトリ全体を移動またはコピーしてください。3個のファイルで
1つの成果物です。
half=Trueは保存時にcompress_to_fp16を設定します。これはIR内の重み圧縮であり、
実行時にデバイスが選ぶ推論精度の変更ではありません。
INT8
from libreyolo import LibreYOLO LibreYOLO("LibreYOLO9t.pt").export( format="openvino", int8=True, data="coco128.yaml", # 必須。この形式にはデフォルトなし fraction=1.0,)int8=Trueはmixedプリセットを使い、LibreYOLOのキャリブレーションローダーに対して
NNCFの学習後量子化を実行します。dataは必須です。この形式には8枚の画像への
フォールバックがありません。NNCFがない場合は、インストールコマンドを示すImportErrorが
発生します。
成果物を実行
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"と"cpu"はCPU、"gpu"と"cuda"はGPUに対応# それ以外は大文字に変換して渡す。例: "npu" -> NPUmodel = 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()]) # クラス名、タスク、入力サイズはIRと並ぶmetadata.yamlに格納meta = yaml.safe_load(open("weights/LibreYOLO9t_openvino/metadata.yaml"))print(meta["model_family"], meta["task"], meta["names"]) # この経路では前処理と後処理を自分で実装LibreYOLO()はmodel.xmlを含むディレクトリを認識し、チェックポイントと同じ
Resultsオブジェクトを返します。クラス名、タスク、入力サイズ、姿勢スキーマは
metadata.yamlから読み取ります。
デバイス文字列はそのまま渡されず、対応付けられます。autoとcpuはどちらもCPU向け、
gpuとcudaはどちらもGPU向けにコンパイルします。それ以外の値は大文字に変換して
OpenVINOへ渡され、この方法でNPUをターゲットにできます。
3番目のスニペットはLibreYOLOをインストールしていない場合に使います。この経路では前処理、
デコード、NMS、座標の再スケーリングを自分で実装します。クラス名はmetadata.yamlにだけ
存在します。
制約
metadata.yamlがないIRも読み込めますが、その場合バックエンドは80クラスの物体検出タスクへ
フォールバックします。ほかの用途では誤った設定になるため、ディレクトリを完全な状態に保ってください。
トレース前に拒否される対象は、YOLO9セグメンテーション、RTMDet-Insセグメンテーション、
SSD、Faster R-CNNとRetinaNetの物体検出、BiRefNetまたはFeyNobgのマッティングです。
OpenVINO 2026.2は、共有マットデコーダーの標準ONNX演算DeformConv-19を変換できません。
検証済みでも拒否対象でもない組み合わせでは変換経路を利用できますが、プロジェクトはOpenVINO
ランタイムとの同等性を記録していません。いくつかの組み合わせは明示的な条件付きで検証済みです。
たとえば、OpenVINO 2026.2でCPUのデフォルト推論精度を使う固定520×520入力のDeepLabV3
セマンティックセグメンテーションや、固定448×448の顔クロップを使うL2CS視線推定です。
libreyolo formatsは組み合わせごとにその条件を表示します。
ファミリーとタスクの完全な対応表は エクスポート対応表を参照してください。1つの組み合わせを調べるには次を実行します。
libreyolo formats --family yolo9 --task detect