MobileSAM
MobileSAMはSAMのViT-H画像エンコーダーを蒸留済みTinyViTエンコーダーに置き換え、同じ点とボックスを使うプロンプト指定可能ワークフローをより軽量なハードウェアで実行します。LibreYOLOは、LibreYOLO()検出器ファクトリーとは別の専用LibreSAMファクトリーを通じて、ネイティブ移植版を提供します。
- タスク
- instance segmentation
- サイズ
- tiny at 1024 px
- インストール
pip install libreyolo- サポートティア
- 姉妹ティア、v以降。独自のファクトリと契約を持つ、独立した製品インターフェースです。
- ライセンス
- コード:Apache-2.0、重み:Apache-2.0。商用利用
インストール
MobileSAMには sam 追加パッケージが必要です。推論はネイティブの非 transformers デコーダーで実行されますが、LibreYOLO独自の重みのダウンロードには引き続き transformers のHugging Faceスナップショットツールを使用します。
pip install "libreyolo[sam]"推論
LibreSAM(...)(またはファミリー固有の LibreMobileSAM(...))は LibreYOLO(...) とは別のエントリポイントです。空間プロンプトがなければここでの順伝播に意味がないため、検出器ではなくプロンプト指定可能なセグメンターを返します。このファミリーには libreyolo predict CLIコマンドがありません。Python APIを使用してください。
from libreyolo import LibreSAM, SAMPLE_IMAGE # MobileSAMのサイズはtinyのみで他の別名は不要model = LibreSAM("mobilesam") # 点プロンプト ピクセル座標[x, y]でラベル1は前景result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy) # マスクごとのポリゴンprint(result.boxes.xyxy) # マスクから得た外接ボックス # 点の代わりにボックスプロンプトresult = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # プロンプトなしでは画像全体をセグメンテーション# 簡略版の自動マスク生成器で網羅的な参照実装とは異なるresult = model.predict(SAMPLE_IMAGE)from libreyolo import LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # 画像エンコーダーは高コスト set_image()で1回だけ実行し# その後のすべてのpredict()呼び出しでキャッシュ済み埋め込みを再利用model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()点プロンプトは、1つの物体に [x, y]、複数の物体に [[x, y], ...]、またはnumpy配列を受け付けます。labels は各点を 1(前景)または 0(背景)として示し、デフォルトではすべて前景です。ボックスプロンプトは [x1, y1, x2, y2] またはボックス一覧を受け取り、ボックスごとに1つのマスクを生成します。両方のプロンプトを省略すると、密なグリッドでプロンプトを指定し、信頼度が高く重複しないマスクを保持することで画像全体をセグメンテーションします。この「すべてをセグメンテーション」モードは参照用の自動マスク生成器より簡略化されており、混雑した場面ではセグメンテーションが不足する場合があります。そのため、正確な結果には実際の点またはボックスプロンプトを使用します。conf は検出信頼度ではなく、予測されたマスク品質(IoU)でフィルタリングします。すべての候補を保持するには 0.0 を渡してください。multimask=True は、1つの最良マスクの代わりに、プロンプトごとにSAMの全体と部分の曖昧さを表す3つのマスクをすべて返します。device= はモデルを移動し、set_image() セッションが有効であれば、キャッシュ済み埋め込みベクトルも移動します。プロンプト指定可能なマスクには固定クラス集合がないため、すべてのマスクは "object" という名前のクラスID 0 を持ちます。このファミリーでは train()、val()、export()、track() がすべて NotImplementedError を発生させます。LibreYOLOのMobileSAMは推論専用です。ソースの種類については、推論を参照してください。
バリアント
サイズはtinyの1つで、入力は固定の1024 pxです。MobileSAMはSAM-1が提供するbase、large、hugeの段階ではなく、1つのTinyViTエンコーダーを提供します。
チェックポイント
このファミリーで公開されているすべての重みファイルです。
| ファイル | 入力(px) | 重みのライセンス |
|---|---|---|
| Instance segmentation | ||
| LibreMobileSAM.pt | apache-2.0 | |
上記のすべてのファイルは現在LibreYOLO orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- MobileSAM, Kyung Hee University
- アップストリームのライセンス
- Apache-2.0
- アップストリームのソース
- github.com/ChaoningZhang/MobileSAM
- 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 TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.
引用
@article{mobile_sam,
title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung-Ho and Lee, Seungkyu and Hong, Choong Seon},
journal={arXiv preprint arXiv:2306.14289},
year={2023}
}著者によるgithub.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesamの引用ブロックからコピーしています。