FOMO

FOMOはグリッドベースの点位置推定器です。低解像度グリッドの各cellをbackgroundまたは物体中心に分類し、バウンディングボックス回帰は行いません。LibreYOLOはpointタスクでFOMOに対応します。

タスク
point
サイズ
インストール
pip install libreyolo
サポートティア
サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
アップストリーム
Edge ImpulseのFOMO (Faster Objects, More Objects)、MIT。論文ソース
ライセンス
コード:MIT、重み:MIT。商用利用

インストール

FOMOに基本パッケージ以外の追加パッケージは必要ありません。

bash
pip install libreyolo

推論

このサイトのほかのすべてのファミリーと異なり、LibreFOMOの重みは自動ダウンロードされません。LibreYOLO("LibreFOMOs-point.pt") はディスク上でそのファイルを探し、Hugging Faceから取得する代わりに、ファイル名を示す ValueError を送出します。まずLibreYOLO organizationからチェックポイントをダウンロードしてローカルパスで読み込むか、独自に学習してください(以下の「学習」を参照)。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # LibreFOMOの重みは自動ダウンロードされない (以下のCheckpointsを参照)# すでにローカルへダウンロードしたチェックポイントを指定model = LibreYOLO("./LibreFOMOs-point.pt")result = model(SAMPLE_IMAGE, save=True) for point in result.points:    print(point.cls, point.conf, point.xy)
CLI
libreyolo predict model=./LibreFOMOs-point.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

結果は boxes の代わりに points ペイロードを持ちます。各行は x, y, class, confidence で、result.points.data、または .xy.xyn.cls.conf accessorから利用できます。抑制するボックスがないため、設定する iou しきい値はありません。predict(..., nms_radius=1) は、2つの検出結果が両方残るために必要なグリッドcell間の距離を制御します。また、loaderが認識できるように、ファイル名にはFOMOの -point タスク接尾辞が必要です。ソース、ストリーミング、結果の処理については推論を参照してください。

バリアント

sml の3サイズがあり、それぞれ単一の1x1分類ヘッドの前に、段階的に幅を広げたMobileNetV2形式のバックボーンを、対応して大きくなる固定入力解像度で使います。このファミリーのベンチマーク表はここにはありません。以下の表にあるチェックポイントのファイルサイズが、現在公開されているサイズごとの差をもっとも明確に示します。

学習

Python
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train(    data="my-dataset.yaml",    epochs=40, batch=32, lr0=3e-4,)
CLI
# imgszは必須。CLIのデフォルトは640だが# sチェックポイントはネイティブ解像度96だけを受け付けるlibreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4

imgsz は自由に選べません。読み込んだチェックポイントのネイティブ解像度がデフォルトとなり、異なる値を渡すと、必要なサイズを示す ValueError が送出されます。s は96、m は192、l は224です。CLIでは imgsz のデフォルトが640なので、libreyolo train コマンドではチェックポイントに合わせて明示的に設定する必要があります。

ほかの設定を変更しなければ、trainerはAdam、lr0=3e-4、weight decayなしで、バッチ32の40エポックを実行します。一般的な場面ではほぼすべてのグリッドcellがbackgroundなので、cellごとのcross-entropy lossでforegroundクラスをbackgroundの100倍に重み付けします。EMAと混合精度はどちらもデフォルトで無効です。LibreYOLOのほかの場所で使われる幾何学・色のデータ拡張はどれも適用されません。mosaic、mixup、HSV jitter、flip、rotation、translation、shearはすべてゼロです。

これは公開済みLibreFOMOチェックポイントをCOCOでスクラッチ学習した経路です。

データセットとloggerについては学習を参照してください。

検証

val() はこのファミリー向けに構築されたグリッドレベルの検証機能へ処理を振り分けます。ほかのpointタスクと共有する点照合の metrics/precisionmetrics/recallmetrics/mAP@ キーに加え、信頼度しきい値と nms_radius 値を走査し、最良のF1の組み合わせを metrics/grid_F1metrics/grid_precisionmetrics/grid_recallmetrics/grid_mean_distance に公開します。その結果を生んだしきい値とradiusも decode/threshold および decode/nms_radius に公開します。

Python
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/grid_F1"])print(metrics["metrics/grid_precision"], metrics["metrics/grid_recall"])
CLI
libreyolo val model=./LibreFOMOs-point.pt data=my-dataset.yaml

エクスポート

タスクONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
pointpoint to ONNX:対応point to TorchScript:対応point to ExecuTorch:対応point to TensorRT:対応point to OpenVINO:対応point to Paddle:非対応point to MNN:非対応point to RKNN:非対応point to ncnn:対応point to TFLite:非対応point to CoreML:非対応point to Core AI:対応

エクスポート済み成果物はファイル接尾辞に基づいて LibreYOLO() から再度読み込めます。そのため、.onnx または .engine ファイルはチェックポイントと同様に動作し、同じ Results を返します。LibreYOLOをインストールしていない単独のランタイムでグラフを実行することもできますが、その場合は前処理と後処理を自身で記述する必要があります。

Python
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=./LibreFOMOs-point.pt format=onnx
エクスポートしたファイルを使う
from libreyolo import LibreYOLO, SAMPLE_IMAGE # ファクトリーはファイル接尾辞で経路を選ぶため、エクスポート済み成果物も# 通常のチェックポイントと同様に読み込まれ、同じResultsオブジェクトを返すmodel = LibreYOLO("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)

チェックポイント

このファミリーで公開されているすべての重みファイルです。いずれも自動ダウンロードされません。リンク先のHugging Faceページから目的のファイルを取得し、そのローカルパスを LibreYOLO() へ渡してください。

ファイル入力(px)重みのライセンス
point
LibreFOMOs-point.ptmit
LibreFOMOm-point.ptmit
LibreFOMOl-point.ptmit

上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。

ライセンス

ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。

これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。

原著作物
FOMO (Faster Objects, More Objects), Edge Impulse
アップストリームのライセンス
MIT
LibreYOLOのコード
MIT
重み
MIT、huggingface.co/LibreYOLOで再公開
解釈
FOMO is a technique Edge Impulse introduced through a blog post and its product documentation, not a code release, so there is no upstream repository or license to inherit. LibreYOLO's architecture is an original MobileNetV2-style reimplementation of the published description, and the LibreFOMO checkpoints are trained from scratch on COCO, so both the code and these weights are MIT, LibreYOLO's own. They are also not auto-downloaded: LibreYOLO("LibreFOMOs-point.pt") looks for that file locally and raises rather than fetching it, so get the checkpoint from the Hugging Face repository first. The name FOMO and the technique it describes remain Edge Impulse's.

リンクできるFOMOのアップストリームコードリポジトリはありません。Edge Impulseはブログ投稿と製品ドキュメントで手法を説明していますが、FOMOの学習・推論コードは公開していません。ここでのアーキテクチャと学習は、その公開済み説明をLibreYOLOが独自に実装したものであり、公開済みLibreFOMOチェックポイントはCOCOでスクラッチ学習されています。そのため、コードとこれらの重みはどちらもLibreYOLO独自のMITです。FOMOという名前と、それが表す手法は引き続きEdge Impulseのものです。

LibreYOLO v1.5.0で検証済みです。このページのサポート表、チェックポイント、ベンチマーク値は手作業で記述したものではなく、リリース済みライブラリと公開済みの重みから生成されています。