SAM

SAM(Segment Anything)は点またはボックスのクリックを物体マスクに変換します。プロンプト可能なモデルには異なる呼び出し形式が必要なため、LibreYOLOはLibreYOLO()検出器ファクトリとは別の専用LibreSAMファクトリから読み込みます。

タスク
instance segmentation
サイズ
base, large, huge at 1024 px
インストール
pip install libreyolo
サポートティア
姉妹ティア、v以降。独自のファクトリと契約を持つ、独立した製品インターフェースです。
アップストリーム
Meta AI Research (FAIR)のSAM (Segment Anything)、Apache-2.0。論文ソース
ライセンス
コード:MIT、重み:Apache-2.0。商用利用

インストール

SAMにはsam追加パッケージが必要で、transformerstimmがインストールされます。

bash
pip install "libreyolo[sam]"

推論

LibreSAM(...)LibreYOLO(...)とは別のエントリポイントです。空間プロンプトなしの 順伝播には意味がないため、検出器ではなくプロンプト可能なセグメンターを返します。この ファミリーにlibreyolo predict CLIコマンドはありません。Python APIを使ってください。

点とボックスのプロンプト
from libreyolo import LibreSAM, SAMPLE_IMAGE # "base"は初回使用時にfacebook/sam-vit-baseを自動ダウンロード# ほかのサイズ: "large", "huge"("b"/"l"/"h"も使用可能)model = LibreSAM("base") # 点プロンプト。[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)
1回エンコードして複数回プロンプト
from libreyolo import LibreSAM, SAMPLE_IMAGE model = LibreSAM("base") # 画像エンコーダーは計算負荷が高い部分。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()セッションが有効ならキャッシュ済み埋め込みベクトルも 移動します。プロンプト可能なマスクには固定クラスセットがないため、すべてのマスクのクラスIDは 0、名前は"object"です。 train()val()export()track()はすべて、このファミリーでは NotImplementedErrorを発生させます。LibreYOLOのSAMは推論専用で、動画追跡は対象外です。 入力ソースの種類については推論を参照してください。

バリアント

ViT画像エンコーダーのサイズはbase、large、hugeの3種類で、すべて固定1024 px入力です。 このファミリーでは精度またはレイテンシのベンチマークがまだ公開されていないため、サイズの選択は エンコーダーの重さとマスク品質の直接的なトレードオフになります。baseはエンコードが最も速く、 hugeが最も重いモデルです。

ライセンス

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

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

原著作物
SAM (Segment Anything), Meta AI Research (FAIR)
アップストリームのライセンス
Apache-2.0
アップストリームのソース
github.com/facebookresearch/segment-anything
LibreYOLOのコード
MIT
重み
Apache-2.0、著者が配布。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 does not mirror SAM-1 weights on its own Hugging Face org: LibreSAM downloads the base, large and huge checkpoints directly from Meta's own facebook/sam-vit-base, facebook/sam-vit-large and facebook/sam-vit-huge repositories, each tagged Apache-2.0 there as well.

LibreYOLOはSAM-1の重みの独自コピーをホストしません。LibreSAM("base")"large""huge"は、Meta自身のHugging Faceリポジトリfacebook/sam-vit-basefacebook/sam-vit-largefacebook/sam-vit-hugeから直接ダウンロードします。それぞれが LibreYOLOとは独立してApache-2.0と明記されています。

引用

@article{kirillov2023segany,
  title={Segment Anything},
  author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
  journal={arXiv:2304.02643},
  year={2023}
}

著者によるgithub.com/facebookresearch/segment-anything#citing-segment-anythingの引用ブロックからコピーしています。

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