🚀 分割一切模型(SAM) - ViT基礎版(ViT - B)模型卡片
分割一切模型(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
在生成掩碼時,除了其他參數,你還可以傳入感興趣對象的大致二維位置、圍繞感興趣對象的邊界框(格式應為邊界框右上角和左下角的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()
📚 詳細文檔
模型架構圖
分割一切模型(SAM)的詳細架構。
快速瀏覽
原始倉庫鏈接
分割一切模型(SAM) 可以根據輸入的提示(如點或框)生成高質量的對象掩碼,並且可以為圖像中的所有對象生成掩碼。它在包含1100萬張圖像和11億個掩碼的數據集上進行了訓練,在各種分割任務中具有強大的零樣本性能。
論文摘要指出:
我們推出了分割一切(SA)項目:一個用於圖像分割的新任務、模型和數據集。通過在數據收集循環中使用高效的模型,我們構建了迄今為止最大的分割數據集,在1100萬張經過授權且尊重隱私的圖像上擁有超過11億個掩碼。該模型的設計和訓練使其具有可提示性,因此可以零樣本遷移到新的圖像分佈和任務中。我們在眾多任務上評估了其能力,發現其零樣本性能令人印象深刻 —— 通常與之前的全監督結果相媲美,甚至更優。我們在 https://segment-anything.com 上發佈了分割一切模型(SAM)以及包含11億個掩碼和1100萬張圖像的相應數據集(SA - 1B),以促進計算機視覺基礎模型的研究。
免責聲明:此模型卡片的內容由Hugging Face團隊編寫,部分內容從原始的 SAM模型卡片 複製粘貼而來。
📄 許可證
本模型採用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}
}