FOMO
FOMOはグリッドベースの点位置推定器です。低解像度グリッドの各cellをbackgroundまたは物体中心に分類し、バウンディングボックス回帰は行いません。LibreYOLOはpointタスクでFOMOに対応します。
- タスク
- point
- サイズ
- インストール
pip install libreyolo- サポートティア
- サポート対象、v以降。補助的な学習可能モデル:CIで正常な状態を維持し、機能は機会に応じて追加されます。
- ライセンス
- コード:MIT、重み:MIT。商用利用
インストール
FOMOに基本パッケージ以外の追加パッケージは必要ありません。
pip install libreyolo推論
このサイトのほかのすべてのファミリーと異なり、LibreFOMOの重みは自動ダウンロードされません。LibreYOLO("LibreFOMOs-point.pt") はディスク上でそのファイルを探し、Hugging Faceから取得する代わりに、ファイル名を示す ValueError を送出します。まずLibreYOLO organizationからチェックポイントをダウンロードしてローカルパスで読み込むか、独自に学習してください(以下の「学習」を参照)。
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)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 タスク接尾辞が必要です。ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
s、m、l の3サイズがあり、それぞれ単一の1x1分類ヘッドの前に、段階的に幅を広げたMobileNetV2形式のバックボーンを、対応して大きくなる固定入力解像度で使います。このファミリーのベンチマーク表はここにはありません。以下の表にあるチェックポイントのファイルサイズが、現在公開されているサイズごとの差をもっとも明確に示します。
学習
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train( data="my-dataset.yaml", epochs=40, batch=32, lr0=3e-4,)# imgszは必須。CLIのデフォルトは640だが# sチェックポイントはネイティブ解像度96だけを受け付けるlibreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4imgsz は自由に選べません。読み込んだチェックポイントのネイティブ解像度がデフォルトとなり、異なる値を渡すと、必要なサイズを示す 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/precision、metrics/recall、metrics/mAP@ キーに加え、信頼度しきい値と nms_radius 値を走査し、最良のF1の組み合わせを metrics/grid_F1、metrics/grid_precision、metrics/grid_recall、metrics/grid_mean_distance に公開します。その結果を生んだしきい値とradiusも decode/threshold および decode/nms_radius に公開します。
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"])libreyolo val model=./LibreFOMOs-point.pt data=my-dataset.yamlエクスポート
| タスク | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| point | point 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をインストールしていない単独のランタイムでグラフを実行することもできますが、その場合は前処理と後処理を自身で記述する必要があります。
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=./LibreFOMOs-point.pt format=onnxfrom 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.pt | mit | |
| LibreFOMOm-point.pt | mit | |
| LibreFOMOl-point.pt | mit | |
上記のすべてのファイルは現在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のものです。