基本概念
LibreYOLOの各モデルは、実行するタスク、所属するファミリー、そのファミリー内のサイズ、ファミリーが属するサポートティアという4つの概念で表されます。チェックポイントのファイル名には最初の3つがエンコードされます。
- ファイル名スキーマ
Libre<FAMILY><size>[-<task>].pt- 標準タスク
- 17
- サポートティア
- Flagship、Core、Supported、Inference only、Museum、Sibling tier
タスク
タスクはモデルが返すものを表します。LibreYOLOには17個の標準タスク名があり、それぞれ出力を保持するResultsオブジェクト上のフィールド名に対応します。
| タスク | 戻り値 |
|---|---|
detect | クラスと信頼度を持つ軸平行ボックス |
segment | 検出物体ごとに1つのインスタンスマスク |
semantic | インスタンスを分離しない、ピクセルごとの1つのクラスラベル |
panoptic | 数えられる物体と不定形の領域を統合した、ピクセルごとの重複しない1つのラベル |
pose | ボックスと行が対応するインスタンスごとのキーポイント |
classify | 画像全体に対するラベル集合上の確率 |
obb | 回転角度を持つ回転ボックス |
point | ボックスではなく、検出ごとに1つの画像座標 |
depth | 密な相対逆深度マップ |
normal | 単位ベクトルからなる密なサーフェス法線場 |
edge | 密なエッジ確率マップ |
restore | ぼけ除去、ノイズ除去、超解像用の復元済みRGB画像 |
matte | 背景除去用の0から1までのソフト前景マップ |
ocr | 読み順に並んだ文字列付きのテキスト四辺形 |
embed | 内積が一致度を表すL2正規化済みベクトル |
gaze | 検出した顔ごとの視線方向 |
mesh | 検出した人物ごとの姿勢付き3D人体 |
これらの名前はチェックポイントのメタデータとファイル名に現れます。タスクを渡す場所では一般的な別名も受け付け、他の処理より先に正規化します。detectionとdetはdetect、keypointsはpose、clsはclassify、deblur、denoise、super-resolutionはすべてrestore、face-recognitionとreidはembedになります。認識できない名前は暗黙にデフォルトを使用せず例外を送出します。
segment、semantic、panopticは同じものを表す3つの言い方ではなく、異なる3つのタスクです。インスタンスマスク、ピクセルごとのラベル、物体と背景領域を統合したマップでは、正解データ、指標、結果フィールドが異なります。
モデルファミリー
ファミリーは固有の読み込み、前処理、後処理コードを持つ1つのアーキテクチャ系統です。各ファミリーはyolo9、rfdetr、dfineなどのFAMILY識別子、対応タスク、提供する各サイズの入力解像度を宣言します。
LibreYOLO()はクラスではなくファクトリです。パスを渡すとファイルを読み込み、チェックポイントのメタデータ、またはそれがなければテンソルのキー自体からファミリーを特定し、そのファミリーのモデルインスタンスを返します。そのため検出器の切り替えは1行の変更で済みます。返されるオブジェクトは共通のpredict、train、val、exportインターフェースを公開し、同じResults型を返します。
# 登録済みの全ファミリーについてタスク サイズ 入力解像度を表示するlibreyolo modelsfrom libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") print(model.family, model.size, model.task)print(model.input_size)print(model.nb_classes, model.names[0])from libreyolo import LibreYOLO # 別名はAPI境界で正規化される "keypoints"は"pose"へ# "det"は"detect"へ "semantic-segmentation"は"semantic"へ解決されるmodel = LibreYOLO("LibreYOLO9t.pt", task="det")print(model.task)複数のタスクに対応するファミリーでは通常タスクごとに別のチェックポイントを公開し、各タスクで異なるサイズ集合を持つこともよくあります。2つの実行時タスクで1つのアーティファクトを共有するものも少数あります。いずれの場合も対応タスクは固定されたリストです。そのリスト外のタスクを要求すると、近似したものを読み込むのではなく、エラーメッセージに対応リストを示して例外を送出します。
ファミリーごとのベンチマークと公開済みの重みを含む完全な一覧は全モデルを参照してください。
サイズ
サイズはファミリー内のバリアントで、ファミリー接頭辞の直後に小文字のコードで記述します。一般的な文字はnanoのn、tinyのt、smallのs、mediumのm、largeのl、xlargeのxですが、コードはファミリー固有であり、まったく異なるものを使うファミリーも複数あります。たとえばResNetの深さを表すr50やr101のようなバックボーン名のコード、b0からb3のような複合スケーリングのコード、公開された唯一のチェックポイントを識別する名前などです。他ファミリーがlを使う位置で、YOLOv9はcompactのcを使います。
サイズは入力解像度も固定し、複数タスクを持つファミリーではタスクごとに解像度が異なる場合があります。どちらも仮定せずファミリーから読み取られ、libreyolo modelsで表示できます。
チェックポイントのファイル名
公開される各重みファイルは1つのスキーマに従います。
Libre<FAMILY><size>[-<task>].ptファミリー接頭辞はファミリーごとの固定文字列、サイズは小文字で区切りなしに連結され、タスク接尾辞の先頭にはハイフンが付きます。検出には、従来のYOLOチェックポイントの慣例に従って接尾辞がありません。そのため、LibreYOLO9t.ptは検出器で、LibreRFDETRn-seg.ptは同じファミリーのセグメンテーションモデルです。
| タスク | 接尾辞 |
|---|---|
detect | |
segment | -seg |
semantic | -sem |
panoptic | -panoptic |
pose | -pose |
classify | -cls |
gaze | -gaze |
obb | -obb |
point | -point |
depth | -depth |
edge | -edge |
normal | -normal |
restore | -restore |
matte | -matte |
ocr | -ocr |
embed | -embed |
mesh | -mesh |
接尾辞なしのタスクがないファミリーでは接尾辞を必須にできるため、接尾辞なしの名前は有効なチェックポイントとして受け付けられません。デフォルト以外のデータセットで学習した重みを公開するファミリーでは、さらにデータセット名を接尾辞として追加します。そのバリアント名はファイルのダウンロード元となるリポジトリ名にも含まれます。
このスキーマの対象外となる3つのティアがあります。プロンプト可能セグメンテーション、Vision-Language、オープンボキャブラリー検出の各ファミリーはチェックポイントファクトリへ登録されず、Libre<FAMILY><size>.ptファイルを生成しません。その接頭辞は、ダウンロード済みのHugging Faceスナップショットまたはプロンプト可能チェックポイントを指します。アップストリームブランドの大文字と小文字は意図的にそのまま維持されます。
タスクの決定方法
複数の情報からタスクを特定できる場合、固定された順序で確認し、最初に存在するものを使用します。指定したtask引数、チェックポイントのメタデータに記録されたタスク、ファイル名のタスク接尾辞、ファミリーのデフォルトタスクの順です。モデルの構築前に、その結果をファミリーの対応タスクと照合します。そのため、不一致は後で誤った出力を生成せず読み込み時に失敗します。
サポートティア
各ファミリーは正確に1つのティアへ分類されます。ティアは精度ではなく、エンジニアリング上の注力度を示します。新機能が最初に追加される場所と、継続的に正常状態を維持する範囲を表します。
| ティア | 意味 |
|---|---|
| Flagship | 機能を最初に設計し、GPUで完全に検証 |
| Core | 学習可能な中核検出器。Flagshipと同じリリース周期内で機能を追加 |
| Supported | 学習可能な補助ファミリー。CIで正常状態を維持し、機会に応じて機能を追加 |
| Inference only | 推論、検証、エクスポートに対応。学習機能は対象外 |
| Museum | 固定された展示物。不具合修正のみ |
| Sibling tier | 固有のファクトリと契約を持つ別の製品インターフェース |
各モデルページのヘッダーにファミリーのティアが記載されています。2つのFlagshipファミリーは、CNN検出器のYOLOv9とTransformer検出器のRF-DETRです。特別な理由がなければ、ここから始めてください。
Inference onlyが欠いているのはLibreYOLO内の学習ループです。推論、検証、そしてファミリーが対応する場合はエクスポートが機能します。このファミリーでtrain()を呼び出すと、理由を示すNotImplementedErrorを送出します。