🚀 セグメントエニシングモデル (SAM) - ViTベース (ViT - B) バージョンのモデルカード
セグメントエニシングモデル (SAM) は、入力プロンプトから高品質なオブジェクトマスクを生成し、画像内のすべてのオブジェクトのマスクを生成することができます。
🚀 クイックスタート
このモデルカードは、セグメントエニシングモデル (SAM) - ViTベース (ViT - B) バージョンに関する詳細情報を提供します。以下のセクションでは、モデルの概要、使用方法、引用方法などを説明します。
セグメントエニシングモデル (SAM) の詳細なアーキテクチャ。
📚 ドキュメント
🔍 要約
元のリポジトリへのリンク
セグメントエニシングモデル (SAM) は、点やボックスなどの入力プロンプトから高品質なオブジェクトマスクを生成し、画像内のすべてのオブジェクトのマスクを生成することができます。このモデルは、1100万枚の画像と11億個のマスクからなるデータセットで学習されており、様々なセグメンテーションタスクで強力なゼロショット性能を発揮します。
論文の概要は以下の通りです。
画像セグメンテーションのための新しいタスク、モデル、データセットであるSegment Anything (SA) プロジェクトを紹介します。データ収集ループで効率的なモデルを使用することで、1100万枚のライセンス付きでプライバシーに配慮した画像に10億個以上のマスクを含む、これまでで最大のセグメンテーションデータセットを構築しました。このモデルはプロンプト可能に設計および学習されているため、新しい画像分布やタスクにゼロショットで適応することができます。多数のタスクでその能力を評価した結果、そのゼロショット性能は印象的で、多くの場合、以前の完全教師付きの結果と競合するか、それ以上の性能を発揮します。コンピュータビジョンの基盤モデルの研究を促進するために、セグメントエニシングモデル (SAM) と対応する10億個のマスクと1100万枚の画像からなるデータセット (SA - 1B) を https://segment-anything.com で公開しています。
免責事項: このモデルカードの内容は、Hugging Faceチームによって作成されており、一部は元の SAMモデルカード からコピー・ペーストされています。
📦 モデルの詳細
SAMモデルは3つのモジュールで構成されています。
VisionEncoder
: VITベースの画像エンコーダー。画像のパッチに対するアテンションを使用して画像埋め込みを計算します。相対位置埋め込みが使用されます。
PromptEncoder
: 点とバウンディングボックスの埋め込みを生成します。
MaskDecoder
: 画像埋め込みと点埋め込みの間 (->) および点埋め込みと画像埋め込みの間でクロスアテンションを実行する双方向トランスフォーマー。出力は以下に供給されます。
Neck
: MaskDecoder
によって生成された文脈化されたマスクに基づいて出力マスクを予測します。
💻 使用例
基本的な使用法
プロンプト付きマスク生成
from PIL import Image
import requests
from transformers import SamModel, SamProcessor
model = SamModel.from_pretrained("facebook/sam-vit-base")
processor = SamProcessor.from_pretrained("facebook/sam-vit-base")
img_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png"
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert("RGB")
input_points = [[[450, 600]]]
inputs = processor(raw_image, input_points=input_points, return_tensors="pt").to("cuda")
outputs = model(**inputs)
masks = processor.image_processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"].cpu(), inputs["reshaped_input_sizes"].cpu())
scores = outputs.iou_scores
マスクを生成するための他の引数の中で、関心のあるオブジェクトのおおよその位置の2D座標、関心のあるオブジェクトを囲むバウンディングボックス (形式はバウンディングボックスの右上と左下の点のx, y座標)、セグメンテーションマスクを渡すことができます。執筆時点では、公式リポジトリ によると、テキストを入力として渡すことは公式モデルではサポートされていません。
詳細については、このノートブックを参照してください。これは、モデルの使用方法を視覚的な例で説明しています。
自動マスク生成
モデルは、入力画像を与えることで、「ゼロショット」方式でセグメンテーションマスクを生成するために使用できます。モデルは自動的に 1024
点のグリッドでプロンプトされ、それらすべてがモデルに供給されます。
パイプラインは自動マスク生成用に作成されています。以下のスニペットは、それをいかに簡単に実行できるかを示しています (任意のデバイスで!適切な points_per_batch
引数を供給するだけで)。
from transformers import pipeline
generator = pipeline("mask-generation", device = 0, points_per_batch = 256)
image_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png"
outputs = generator(image_url, points_per_batch = 256)
画像を表示するには、以下のコードを使用します。
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
def show_mask(mask, ax, random_color=False):
if random_color:
color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
else:
color = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])
h, w = mask.shape[-2:]
mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
ax.imshow(mask_image)
plt.imshow(np.array(raw_image))
ax = plt.gca()
for mask in outputs["masks"]:
show_mask(mask, ax=ax, random_color=True)
plt.axis("off")
plt.show()
📄 ライセンス
このモデルはApache - 2.0ライセンスの下で提供されています。
📖 引用
このモデルを使用する場合は、以下のBibTeXエントリを使用してください。
@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}
}