Markdownで表示

オープンボキャブラリAPI

LibreOpenVocabはテキスト条件付き検出器のファクトリーです。クラス一覧は固定ヘッドではなくプロンプトなので、set_classesでボキャブラリを設定し、モデルはそれに対する通常の検出Resultsを返します。

インストール

この階層には openvocab 追加パッケージが必要です。

bash
pip install 'libreyolo[openvocab]'

ファクトリー

python
LibreOpenVocab(model: str = "grounding-dino-tiny", **kwargs) -> LibreOpenVocabDetector

model はパスではなく別名です。検索前にアンダースコアはハイフンへ変換されるため、CLIの一覧に表示される omdet_turbo-tgrounding_dino-t など、ファミリーで修飾された名前をそのまま読み込めます。不明な別名では、既知のすべての別名を列挙する ValueError が発生します。

コンストラクターは sizenb_classes=80names=Nonedevice="auto"task=Nonetext_threshold=None を受け付けます。names を渡すことは、読み込み直後に set_classes を呼び出すことと同じです。対応しないファミリーへ text_threshold を渡すと TypeError が発生します。

Python
from libreyolo import LibreOpenVocab, SAMPLE_IMAGE model = LibreOpenVocab("grounding-dino-tiny")model.set_classes(["person", "skateboard", "handrail"]) result = model.predict(SAMPLE_IMAGE)for box, cls in zip(result.boxes.xyxy, result.boxes.cls):    print(result.names[int(cls)], box.tolist())

ファミリーと別名

ファミリー別名サイズ重み
Grounding DINOgrounding-dino, groundingdino, grounding-dino-tiny, groundingdino-tiny, grounding-dino-t, groundingdino-t, grounding-dino-base, groundingdino-base, grounding-dino-b, groundingdino-bt, bLibreYOLO/LibreGroundingDINOt, LibreYOLO/LibreGroundingDINOb
OWLv2owlv2, owl-v2, owlv2-base, owl-v2-base, owlv2-b16, owl-v2-b16, owlv2-large, owl-v2-large, owlv2-l14, owl-v2-l14b16, l14LibreYOLO/LibreOWLv2b16, LibreYOLO/LibreOWLv2l14
OMDet-Turboomdet-turbo, omdet, omdetturbo, omdet-turbo-tiny, omdet-turbo-swin-tiny, omdet-turbo-ttLibreYOLO/LibreOMDetTurbot
OV-DEIMov-deim, ovdeim, ov-deim-s, ovdeim-s, ov-deim-m, ovdeim-m, ov-deim-l, ovdeim-ls, m, lLibreYOLO/LibreOVDEIMs, LibreYOLO/LibreOVDEIMm, LibreYOLO/LibreOVDEIMl

デフォルトの別名は grounding-dino-tiny です。

LibreGroundingDINOLibreOWLv2LibreOMDetTurbo はパッケージレベルでエクスポートされ、size= を使って直接構築できます。OV-DEIMには上記のファクトリー別名を通じて到達できます。

set_classes

python
model.set_classes(classes: list[str]) -> LibreOpenVocabDetector

その後のすべての predict() 呼び出しに使うボキャブラリを設定し、呼び出しを連結できるようモデルを返します。一覧は空であってはならず、文字列だけを含む必要があります。また、大文字と小文字を区別せずに比較したとき、各項目は一意でなければなりません。空白だけのラベルは拒否されます。1つの文字列をそのまま渡すと TypeError が発生します。1文字ずつのクラスへ列挙されてしまうためです。

呼び出し後、model.names は指定した順序のラベルへ 0..N-1 を対応付け、model.nb_classesN になります。

呼び出し引数

この階層は、3つの相違点を除いて標準の推論面を再利用します。

conf は共有値0.25ではなく、ファミリー独自の値をデフォルトにします。

ファミリーデフォルトのconf抑制
Grounding DINO0.25
OWLv20.1
OMDet-Turbo0.3独自の後処理、しきい値0.5、iou= を尊重
OV-DEIM0.25top-K選択による1対1照合、抑制なし

iou= は、抑制を実行するファミリーだけで意味を持ちます。OMDet-Turboはしきい値を引数として受け取り、iou= 未指定時のデフォルトは0.5です。その他の3つは何も抑制しないため、そこで iou= を渡すと警告を表示して無視します。

text_threshold= はGrounding DINO専用で、デフォルトは0.25です。永続的な値として構築時に渡すか、呼び出しごとに渡せます。呼び出しごとの値は stream=True と組み合わせられません。ストリームの結果は遅延生成されるためです。代わりにコンストラクターへ設定してください。その他のファミリーでは TypeError が発生します。

imgsz=ValueError を発生させます。この階層では前処理パイプラインがリサイズを管理します。テスト時拡張はここで対象外なので、augment=True もエラーになります。入力サイズは参照用としてファミリーごとに記録されるだけです。Grounding DINOは800、OWLv2は960と1008、OMDet-Turboは640、OV-DEIMは640です。

未対応

train()val()track()export() はすべて NotImplementedError を発生させます。アップストリームでファインチューニングして得られた重みを読み込み、トラッキングの代わりにフレームごとに predict() を実行してください。共有の検出バリデーターは画像テンソルでモデルを呼び出しますが、この階層はテキスト条件付き入力を必要とするため、検証には専用バリデーターが必要です。

別名はlibreyolo/models/openvocab/__init__.pyから、リポジトリ、サイズ、しきい値はgrounding_dino.py、owlv2.py、omdet_turbo.py、ov_deim.pyから、呼び出し規則はlibreyolo/models/openvocab/base.pyから参照しました。すべてv1.5.0です。設計意図はdocs/adr/0008-open-vocab-detector-contract.mdから参照しました。