安定性の階層
LibreYOLOでは、階層という言葉を3つの別々の意味で使います。エクスポート経路を裏付ける証拠、モデルファミリーが応答する呼び出し仕様、ファミリーが登録されるカバレッジグループです。このページではそれぞれを定義し、何を意味しないかも説明します。
エクスポートサポート階層
呼び出しが成功するかどうかを決める階層です。(family, task, format) の3要素に適用され、すべての組み合わせには必ず1つだけ割り当てられます。
| 階層 | 意味 | export() での動作 |
|---|---|---|
validated | 数値的一致がCIまたは文書化された夜間実行で確認されている | 実行される |
available | 変換は実装されているが、ランタイムでの数値的一致を示す証拠が記録されていない | 実行される |
blocked | 対応する経路がない | 事前チェックで理由とともに NotImplementedError を送出する |
validatedとavailableは、どちらも確認操作や一律の警告なしで処理を続行します。違いは許可ではなく証拠です。validatedの項目には一致テストと since リリースがあり、availableの項目にはまだありません。たとえば、macOSで推論を実行していないCoreML変換はavailableであり、validatedではありません。
blockedの組み合わせは、依存関係の確認、キャリブレーションの読み込み、トレース、成果物の作成より前に失敗するため、部分的なファイルは書き込まれません。
すべてのvalidatedセルには、一致を示す数値が得られた構成を表す制約があります。一般的には、固定入力キャンバス、バッチ1、FP32、名前付きランタイムバージョンです。形式全般ではなく、その構成についての主張として解釈してください。明示的な項目がないセルを埋める規則は、エクスポートマトリックスページにあります。
from libreyolo.models.registry import GROUPS, group_offrom libreyolo.export.support import get_support, validated_alternatives family = "yolo9" group = group_of(family)print(group, GROUPS[group]) print(get_support(family, "detect", "onnx").tier)print(validated_alternatives(family, "detect"))API階層
呼び出しの形式を決める階層です。各ファミリーは、アーキテクチャではなく呼び出し仕様に基づいて選ばれた、正確に1つの階層に属します。
| 階層 | ファクトリー | 仕様 |
|---|---|---|
| 検出器ファクトリー | LibreYOLO | プロンプトなしの1回の順伝播で、見つかったすべての物体を較正済みスコアとともに返します。メンバーはチェックポイントを認識することで自身を登録します |
| プロンプト可能セグメンテーション | LibreSAM | 呼び出し時に画像ごとの空間プロンプトまたは概念プロンプトを指定しなければ、順伝播に意味がありません。対話的かつステートフルで、1回エンコードして何度もプロンプトを指定します |
| オープンボキャブラリ検出 | LibreOpenVocab | テキスト条件付きの識別的検出器です。クラスリストはプロンプトで、set_classes で設定します |
| 視覚言語 | LibreVLM | 検出器として駆動される生成モデルです。クラスリストはプロンプトで、信頼度はプレースホルダーです |
3つの兄弟階層は意図的に検出器ファクトリーへ登録されません。そのため、LibreYOLO("some-alias") からは到達できません。チェックポイントの判別ではなく、サイズの別名を使って読み込まれ、自動ダウンロードされます。
4つすべてが同じ Results を返すため、階層が変わっても後続コードは変わりません。異なるのは動作するメソッドです。兄弟階層は train()、val()、export() で NotImplementedError を送出し、SAM階層とオープンボキャブラリ階層は track() でも送出します。各階層のページには、その階層固有の除外事項が記載されています。
カバレッジグループ
ファミリー横断テストの実行対象を決める分類であり、読者がモデルページでもっとも目にしやすいものです。登録済みの各ファミリーは正確に1つのグループへ登録され、登録済みファミリーがこの登録から漏れているとテストが失敗します。libreyolo/models/registry.py の GROUPS が以下の「意味」列の情報源です。同じファイルの MODEL_GROUPS がすべてのファミリーを割り当て、「ファミリー数」列はその割り当てを直接数えたものです。「ラベル」列は、モデルページのヘッダーで同じグループに対してサイトが使う短い名前です。
| グループ | ラベル | ファミリー数 | 意味 |
|---|---|---|---|
g0 | Flagship | 2 | 共通機能のカバレッジに必要な主力の基準モデル |
g1 | Core | 10 | 学習可能な検出器のカバレッジセット |
g2 | Supported | 14 | 追加の学習可能ファミリーのカバレッジセット |
g3 | Inference only | 35 | 学習実装を持たないファミリー |
g4 | Museum | 5 | 推論カバレッジを持つ歴史的ファミリー |
s | Sibling tier | 21 | 個別に対象となる兄弟API(SAM、open-vocab、VLM、zero-shot) |
6つのグループに合計87ファミリーがあります。g3 だけでほかの全グループを合計した数より多くのファミリーを含みます。レジストリの大部分は、積極的に学習される検出器ではなく、推論専用の系譜とMuseumのカバレッジで占められているためです。
モデルを選ぶ読者にとって、グループはエンジニアリング上の注力箇所を示すものであり、ファミリーの精度を示すものではありません。新機能は g0 と g1 で設計され、最初に導入されます。g2 はCIで正常な状態に保たれますが、機能は同じリリース周期ではなく、機会に応じて導入されます。g3 は制限ではなく、機能の不在を示します。推論、検証、ファミリーが対応する場合はエクスポートも引き続き動作します。g3 または g4 ファミリーで train() を呼び出すと、処理を部分的かつ黙って行わず、理由を示す NotImplementedError が送出されます。s ファミリーは LibreYOLO() ではなく独自のファクトリーから読み込まれるため、このトレードオフにはまったく含まれません。チェックポイントのファイル名を読む際に、グループがタスク、ファミリー、サイズとどう組み合わさるかについては基本概念を参照してください。
グループ自体がユーザー向け機能を付与したり制限したりすることはありません。サポートは、グループへの所属だけではなく、常にファミリーに実装されたAPIと形式固有の機能チェックから決まります。グループが分類するのはファミリーであり、タスクではありません。そのため、タスク単位のカバレッジ実行では「g1 detect」のようにタスクを明示します。
テストだけでなく、実行時にグループを読み取る箇所が2つあります。libreyolo/models/inventory.py の collect_model_inventory() は、CLIインベントリが出力するすべての項目にグループを付加します。また、pretrained=False による特別なスクラッチ再初期化経路は、g0 と g1 のファミリーだけで開始されます。この2グループ以外では、libreyolo/models/base/model.py のチェックが完全に省略されるため、pretrained=False は通常のキーワードとしてファミリー独自の train() に渡されます。
学習
g3 または g4 のファミリーには学習実装がなく、そのファミリーで train() を呼び出すと例外が送出されます。これはファミリーのコードの特性であり、グループの特性ではありません。グループはその事実を引き起こすのではなく、記録します。
学習できるファミリーでは、個々のデータ拡張設定がパイプラインに届くかどうかは別の問題で、used、gated_by_mosaic、ignored という独自の3値の用語があります。データ拡張マトリックスを参照してください。
階層からは分からないこと
階層は精度についての主張ではありません。validatedのエクスポートは、成果物が指定されたしきい値の範囲内でネイティブモデルを再現することを示します。ネイティブモデルがデータセットでどれだけ優れたスコアを得るかについては何も示しません。ベンチマーク値はモデルページにあります。
階層はライセンスについての記述でもありません。重みのライセンスはファミリー内でも異なり、特定のチェックポイントをホストするリポジトリが正式な情報源です。ファミリーが検出器ファクトリーに含まれていても、公開された重みで商用利用が許可されるかどうかは分かりません。