PicoSAM3
PicoSAM3はSAM 2.1とSAM 3から蒸留された小型CNNで、Sony IMX500のようなセンサー上のボックスプロンプト指定ROIセグメンテーション向けに構築されています。LibreYOLOはLibreYOLO()検出器ファクトリーとは別の専用LibreSAMファクトリーを通じて、ボックスプロンプトだけに対応します。
- タスク
- instance segmentation
- サイズ
- pico at 96 px
- インストール
pip install libreyolo- サポートティア
- 姉妹ティア、v以降。独自のファクトリと契約を持つ、独立した製品インターフェースです。
- ライセンス
- コード:Apache-2.0、重み:Apache-2.0。商用利用
インストール
PicoSAM3には sam 追加パッケージが必要です。推論はネイティブの非 transformers CNNで実行されますが、LibreYOLO独自の重みのダウンロードには引き続き transformers のHugging Faceツールを使用します。
pip install "libreyolo[sam]"推論
LibreSAM(...)(またはファミリー固有の LibrePicoSAM3(...))は LibreYOLO(...) とは別のエントリポイントです。プロンプトがなければここでの順伝播に意味がないため、検出器ではなくプロンプト指定可能なセグメンターを返します。このファミリーには libreyolo predict CLIコマンドがありません。Python APIを使用してください。
from libreyolo import LibreSAM, SAMPLE_IMAGE # PicoSAM3のサイズはpicoのみで他の別名は不要model = LibreSAM("picosam3") # bboxes=は唯一対応するプロンプト [x1, y1, x2, y2]またはボックス一覧で# ボックスごとに1マスク 各ボックスを10%拡大して正方形にし画像内に収め# CNN実行前に96x96へリサイズresult = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700])print(result.masks.xy) # マスクごとのポリゴンprint(result.boxes.xyxy) # マスクから得た外接ボックスfrom libreyolo import LibrePicoSAM3, SAMPLE_IMAGE model = LibrePicoSAM3() # set_image()は元画像をキャッシュ PicoSAM3はボックスごとにCNN全体を順伝播# するため他のSAMファミリーのようにエンコーダー経路ではなく# 画像の読み込みとデコードを省略model.set_image(SAMPLE_IMAGE)a = model.predict(bboxes=[300, 200, 900, 700])b = model.predict(bboxes=[100, 100, 400, 400])model.reset_image()PicoSAM3は bboxes= だけを受け付けます。points=、labels=、masks=、text=、multimask=True を渡す場合や、ボックスを省略してすべてをセグメンテーションする場合は、明確な ValueError が発生します。これらのモードはアップストリームモデルに存在しないためです。conf は検出信頼度ではなく、予測されたマスク品質(IoU)でフィルタリングし、0.0 から 1.0 の範囲である必要があります。すべてのマスクは "object" という名前のクラスID 0 を持ちます。train()、val()、track() は NotImplementedError を発生させます。点、テキスト、マスク、すべてをセグメンテーションするプロンプトにはLibreSAM2またはLibreSAM3を使用してください。ソースの種類については、推論を参照してください。
バリアント
サイズはpicoの1つで、固定の96 px ROI入力です。PicoSAM3は画像全体を1回だけエンコードする代わりに、ボックスごとにCNN全体を1回順伝播します。
エクスポート
| タスク | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Instance segmentation | Instance segmentation to ONNX:対応 | Instance segmentation to TorchScript:非対応 | Instance segmentation to ExecuTorch:非対応 | Instance segmentation to TensorRT:非対応 | Instance segmentation to OpenVINO:非対応 | Instance segmentation to Paddle:非対応 | Instance segmentation to MNN:非対応 | Instance segmentation to RKNN:非対応 | Instance segmentation to ncnn:非対応 | Instance segmentation to TFLite:非対応 | Instance segmentation to CoreML:非対応 | Instance segmentation to Core AI:非対応 |
PicoSAM3はSAM階層でエクスポートできる唯一のファミリーです。未処理の96x96 ROI CNNを roi_image -> mask_logits としてONNXへ出力し、NMSやマスクの後処理は組み込みません。その他のSAMファミリーでは、エンコーダーとデコーダーの分割に定義済みのランタイムエクスポート契約がないため、export() が NotImplementedError を発生させます。エクスポート済みPicoSAM3グラフは LibreYOLO() から再度読み込めません。onnxruntime などのランタイムで直接実行し、上で示したものと同じ10%パディング付き正方形ROI前処理を適用してください。
from libreyolo import LibrePicoSAM3 model = LibrePicoSAM3()model.export(format="onnx", output_path="LibrePicoSAM3pico.onnx") # opsetはデフォルト13でdynamicはデフォルトTrueかつバッチ軸のみ# このファミリーが受け付けるエクスポート引数はこの2つだけimport numpy as npimport onnxruntime as ort # PicoSAM3は未処理の96x96 ROI CNNをエクスポート# roi_image -> mask_logits LibreYOLO側に再利用できる前処理と後処理はなく# 検出器チェックポイントと異なりexport()はLibreYOLO()へ戻されないsession = ort.InferenceSession("LibrePicoSAM3pico.onnx")name = session.get_inputs()[0].nameoutputs = session.run(None, {name: np.zeros((1, 3, 96, 96), dtype=np.float32)}) for meta, array in zip(session.get_outputs(), outputs): print(meta.name, array.shape)チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| Instance segmentation | ||
| LibrePicoSAM3.pt | apache-2.0 | |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- PicoSAM3, ETH Zurich
- アップストリームのライセンス
- Apache-2.0
- アップストリームのソース
- github.com/pbonazzi/picosam3
- LibreYOLOのコード
- MIT
- 重み
- Apache-2.0、huggingface.co/LibreYOLOで再公開
- 解釈
- Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO carries a native port of the compact ROI CNN rather than vendoring upstream files unmodified, and downloads LibrePicoSAM3pico.pt from the LibreYOLO Hugging Face org, converted with unchanged tensor values from the pinned pietrobonazzi/picosam3 revision af49e4322b6b7cf448499fee5c073d4576f59444 and tagged Apache-2.0 there. PicoSAM3 is distilled from SAM 2.1 and SAM 3 as teacher models; LibreYOLO does not vendor or redistribute either teacher's code or weights in this family.
PicoSAM3はSAM 2.1とSAM 3を教師モデルとして蒸留されています。LibreYOLOはこのファミリーでどちらの教師のコードや重みも組み込みまたは再配布しません。小型の生徒CNNと変換済みチェックポイントだけを提供します。
引用
@article{picosam3_2026,
title={PicoSAM3: Real-Time In-Sensor Region-of-Interest Segmentation},
author={Pietro Bonazzi and Nicola Farronato and Stefan Zihlmann and Haotong Qin and Michele Magno},
journal={IEEE Sensors Journal},
year={2026}
}著者によるgithub.com/pbonazzi/picosam3#readmeの引用ブロックからコピーしています。