Transformers 文档
SAM3 Tracker
并获得增强的文档体验
开始使用
该模型于 2025-11-19 贡献至 Hugging Face Transformers。
SAM3 Tracker
概述
SAM3(Segment Anything Model 3)在 SAM 3: Segment Anything with Concepts 中被提出。
Sam3Tracker 执行图像的可提示视觉分割 (PVS)。PVS 接收交互式视觉提示(点、框、掩码)或文本输入,以根据每个提示分割特定的对象实例。这是 SAM 1 和 SAM 2 专注的任务,而 SAM 3 在此基础上进行了改进。
Sam3Tracker 是 SAM2 (Segment Anything Model 2) 的升级版本,它保持了相同的 API,同时提供了改进的性能和功能。
论文摘要如下:
我们推出了 Segment Anything Model (SAM) 3,这是一个统一的模型,能够根据概念提示(我们将其定义为短名词短语(例如“黄色校车”)、图像示例或两者的结合)在图像和视频中检测、分割和追踪对象。可提示概念分割 (Promptable Concept Segmentation, PCS) 接收此类提示,并为所有匹配的对象实例返回分割掩码和唯一标识。为了推进 PCS,我们构建了一个可扩展的数据引擎,生成了一个包含 400 万个唯一概念标签(包括难负样本)的高质量数据集,涵盖图像和视频。我们的模型由一个图像级检测器和一个基于记忆的视频追踪器组成,两者共享同一个骨干网络。识别和定位通过存在头 (presence head) 实现解耦,从而提高了检测精度。SAM 3 在图像和视频 PCS 任务中的准确率是现有系统的两倍,并提升了以往 SAM 在视觉分割任务上的能力。我们将 SAM 3 连同全新的用于可提示概念分割的 Segment Anything with Concepts (SA-Co) 基准测试集一起开源。
此模型由 yonigozlan 和 ronghanghu 贡献。
用法示例
通过流水线进行自动掩码生成
Sam3Tracker 可用于自动掩码生成,使用 mask-generation 流水线分割图像中的所有对象。
from transformers import pipeline
generator = pipeline("mask-generation", model="facebook/sam3", device=0)
image_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/truck.jpg"
outputs = generator(image_url, points_per_batch=64)
len(outputs["masks"]) # Number of masks generated
39基础图像分割
单点点击
您可以通过在要分割的对象上提供单个点击点来分割对象
from transformers import Sam3TrackerProcessor, Sam3TrackerModel
import torch
from PIL import Image
import requests
model = Sam3TrackerModel.from_pretrained("facebook/sam3", device_map="auto")
processor = Sam3TrackerProcessor.from_pretrained("facebook/sam3")
image_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/truck.jpg"
raw_image = Image.open(requests.get(image_url, stream=True).raw).convert("RGB")
input_points = [[[[500, 375]]]] # Single point click, 4 dimensions (image_dim, object_dim, point_per_object_dim, coordinates)
input_labels = [[[1]]] # 1 for positive click, 0 for negative click, 3 dimensions (image_dim, object_dim, point_label)
inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]
# The model outputs multiple mask predictions ranked by quality score
print(f"Generated {masks.shape[1]} masks with shape {masks.shape}")
Generated 3 masks with shape torch.Size([1, 3, 1500, 2250])用于精细化的多点输入
您可以提供多个点来细化分割
# Add both positive and negative points to refine the mask
input_points = [[[[500, 375], [1125, 625]]]] # Multiple points for refinement
input_labels = [[[1, 1]]] # Both positive clicks
inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]边界框输入
Sam3Tracker 还支持边界框输入进行分割。
# Define bounding box as [x_min, y_min, x_max, y_max]
input_boxes = [[[75, 275, 1725, 850]]]
inputs = processor(images=raw_image, input_boxes=input_boxes, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]多对象分割
您可以同时分割多个对象
# Define points for two different objects
input_points = [[[[500, 375]], [[650, 750]]]] # Points for two objects in same image
input_labels = [[[1], [1]]] # Positive clicks for both objects
inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs, multimask_output=False)
# Each object gets its own mask
masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])[0]
print(f"Generated masks for {masks.shape[0]} objects")
Generated masks for 2 objects批量推理
批量图像
同时处理多张图像以提高效率
from transformers import Sam3TrackerProcessor, Sam3TrackerModel
import torch
from PIL import Image
import requests
model = Sam3TrackerModel.from_pretrained("facebook/sam3", device_map="auto")
processor = Sam3TrackerProcessor.from_pretrained("facebook/sam3")
# Load multiple images
image_urls = [
"https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/truck.jpg",
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/dog-sam.png"
]
raw_images = [Image.open(requests.get(url, stream=True).raw).convert("RGB") for url in image_urls]
# Single point per image
input_points = [[[[500, 375]]], [[[770, 200]]]] # One point for each image
input_labels = [[[1]], [[1]]] # Positive clicks for both images
inputs = processor(images=raw_images, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs, multimask_output=False)
# Post-process masks for each image
all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])
print(f"Processed {len(all_masks)} images, each with {all_masks[0].shape[0]} objects")
Processed 2 images, each with 1 objects每张图像的批量对象
使用批量推理分割每张图像中的多个对象
# Multiple objects per image - different numbers of objects per image
input_points = [
[[[500, 375]], [[650, 750]]], # Truck image: 2 objects
[[[770, 200]]] # Dog image: 1 object
]
input_labels = [
[[1], [1]], # Truck image: positive clicks for both objects
[[1]] # Dog image: positive click for the object
]
inputs = processor(images=raw_images, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs, multimask_output=False)
all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])具有批量对象和多点输入的批量图像
处理复杂的批量场景,每个对象有多个点
# Add groceries image for more complex example
groceries_url = "https://huggingface.co/datasets/hf-internal-testing/sam2-fixtures/resolve/main/groceries.jpg"
groceries_image = Image.open(requests.get(groceries_url, stream=True).raw).convert("RGB")
raw_images = [raw_images[0], groceries_image] # Use truck and groceries images
# Complex batching: multiple images, multiple objects, multiple points per object
input_points = [
[[[500, 375]], [[650, 750]]], # Truck image: 2 objects with 1 point each
[[[400, 300]], [[630, 300], [550, 300]]] # Groceries image: obj1 has 1 point, obj2 has 2 points
]
input_labels = [
[[1], [1]], # Truck image: positive clicks
[[1], [1, 1]] # Groceries image: positive clicks for refinement
]
inputs = processor(images=raw_images, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs, multimask_output=False)
all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])批量边界框
处理具有边界框输入的批量图像
# Multiple bounding boxes per image (using truck and groceries images)
input_boxes = [
[[75, 275, 1725, 850], [425, 600, 700, 875], [1375, 550, 1650, 800], [1240, 675, 1400, 750]], # Truck image: 4 boxes
[[450, 170, 520, 350], [350, 190, 450, 350], [500, 170, 580, 350], [580, 170, 640, 350]] # Groceries image: 4 boxes
]
# Update images for this example
raw_images = [raw_images[0], groceries_image] # truck and groceries
inputs = processor(images=raw_images, input_boxes=input_boxes, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs, multimask_output=False)
all_masks = processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"])
print(f"Processed {len(input_boxes)} images with {len(input_boxes[0])} and {len(input_boxes[1])} boxes respectively")
Processed 2 images with 4 and 4 boxes respectively使用先前的掩码作为输入
Sam3Tracker 可以使用来自先前预测的掩码作为输入来细化分割。
# Get initial segmentation
input_points = [[[[500, 375]]]]
input_labels = [[[1]]]
inputs = processor(images=raw_image, input_points=input_points, input_labels=input_labels, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
# Use the best mask as input for refinement
mask_input = outputs.pred_masks[:, :, torch.argmax(outputs.iou_scores.squeeze())]
# Add additional points with the mask input
new_input_points = [[[[500, 375], [450, 300]]]]
new_input_labels = [[[1, 1]]]
inputs = processor(
input_points=new_input_points,
input_labels=new_input_labels,
original_sizes=inputs["original_sizes"],
return_tensors="pt",
).to(model.device)
with torch.no_grad():
refined_outputs = model(
**inputs,
input_masks=mask_input,
image_embeddings=outputs.image_embeddings,
multimask_output=False,
)Sam3TrackerConfig
class transformers.Sam3TrackerConfig
< 源代码 >( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None vision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None prompt_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None mask_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None initializer_range: float = 0.02 )
参数
- vision_config (
Union[dict, ~configuration_utils.PreTrainedConfig], 可选) — 视觉主干网络的配置对象或字典。 - prompt_encoder_config (Union[
dict,Sam3TrackerPromptEncoderConfig], 可选) — 用于初始化 Sam3TrackerPromptEncoderConfig 的配置选项字典。 - mask_decoder_config (Union[
dict,Sam3TrackerMaskDecoderConfig], 可选) — 用于初始化 Sam3TrackerMaskDecoderConfig 的配置选项字典。 - initializer_range (
float, 可选, 默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
这是用于存储 Sam3TrackerModel 配置的配置类。它根据指定的参数实例化一个 Sam3 Tracker 模型,定义了模型架构。使用默认值实例化配置将产生与 facebook/sam3 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
示例
>>> from transformers import (
... Sam3TrackerVisionConfig,
... Sam3TrackerPromptEncoderConfig,
... Sam3TrackerMaskDecoderConfig,
... Sam3TrackerModel,
... )
>>> # Initializing a Sam3TrackerConfig with `"facebook/sam3_tracker.1_hiera_tiny"` style configuration
>>> configuration = Sam3TrackerConfig()
>>> # Initializing a Sam3TrackerModel (with random weights) from the `"facebook/sam3_tracker.1_hiera_tiny"` style configuration
>>> model = Sam3TrackerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a Sam3TrackerConfig from a Sam3TrackerVisionConfig, Sam3TrackerPromptEncoderConfig, and Sam3TrackerMaskDecoderConfig
>>> # Initializing SAM3_TRACKER vision encoder, memory attention, and memory encoder configurations
>>> vision_config = Sam3TrackerVisionConfig()
>>> prompt_encoder_config = Sam3TrackerPromptEncoderConfig()
>>> mask_decoder_config = Sam3TrackerMaskDecoderConfig()
>>> config = Sam3TrackerConfig(vision_config, prompt_encoder_config, mask_decoder_config)Sam3TrackerPromptEncoderConfig
class transformers.Sam3TrackerPromptEncoderConfig
< 源代码 >( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None hidden_size: int = 256 image_size: int | list[int] | tuple[int, int] = 1008 patch_size: int | list[int] | tuple[int, int] = 14 mask_input_channels: int = 16 num_point_embeddings: int = 4 hidden_act: str = 'gelu' layer_norm_eps: float = 1e-06 scale: int = 1 )
参数
- hidden_size (
int, 可选, 默认为256) — 隐藏表示的维度。 - image_size (
Union[int, list[int], tuple[int, int]], 可选, 默认为1008) — 每张图像的大小(分辨率)。 - patch_size (
Union[int, list[int], tuple[int, int]], 可选, 默认为14) — 每个块的大小(分辨率)。 - mask_input_channels (
int, 可选, 默认为 16) — 馈送到MaskDecoder模块的通道数。 - num_point_embeddings (
int, 可选, 默认为 4) — 使用的点嵌入数量。 - hidden_act (
str, 可选, 默认为gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - layer_norm_eps (
float, 可选, 默认为1e-06) — 层归一化层使用的 epsilon。 - scale (
float, 可选, 默认为 1) — 提示编码器的缩放因子。
这是用于存储 Sam3TrackerModel 配置的配置类。它根据指定的参数实例化一个 Sam3 Tracker 模型,定义了模型架构。使用默认值实例化配置将产生与 facebook/sam3 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
Sam3TrackerMaskDecoderConfig
class transformers.Sam3TrackerMaskDecoderConfig
< 源代码 >( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None hidden_size: int = 256 hidden_act: str = 'gelu' mlp_dim: int = 2048 num_hidden_layers: int = 2 num_attention_heads: int = 8 attention_downsample_rate: int = 2 num_multimask_outputs: int = 3 iou_head_depth: int = 3 iou_head_hidden_dim: int = 256 dynamic_multimask_via_stability: bool = True dynamic_multimask_stability_delta: float = 0.05 dynamic_multimask_stability_thresh: float = 0.98 )
参数
- hidden_size (
int, 可选, 默认为256) — 隐藏表示的维度。 - hidden_act (
str, 可选, 默认为gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - mlp_dim (
int, 可选, 默认为 2048) — 双向 Transformer 中 MLP 的维度。 - num_hidden_layers (
int, 可选, 默认为2) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int, 可选, 默认为8) — Transformer 解码器中每个注意力层的注意力头数量。 - attention_downsample_rate (
int, 可选, 默认为 2) — 注意力层的下采样率。 - num_multimask_outputs (
int, 可选, 默认为 3) — 多掩码输出的数量。 - iou_head_depth (
int, optional, defaults to 3) — IoU 头的深度。 - iou_head_hidden_dim (
int, optional, defaults to 256) — IoU 头的隐藏维度。 - dynamic_multimask_via_stability (
bool, optional, defaults toTrue) — 是否通过稳定性使用动态多掩码(multimask)。 - dynamic_multimask_stability_delta (
float, optional, defaults to 0.05) — 动态多掩码的稳定性增量(stability delta)。 - dynamic_multimask_stability_thresh (
float, optional, defaults to 0.98) — 动态多掩码的稳定性阈值。
这是用于存储 Sam3TrackerModel 配置的配置类。它根据指定的参数实例化一个 Sam3 Tracker 模型,定义了模型架构。使用默认值实例化配置将产生与 facebook/sam3 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
Sam3TrackerProcessor
class transformers.Sam3TrackerProcessor
< source >( image_processor target_size: int | None = None point_pad_value: int = -10 **kwargs )
构建一个将图像处理器封装为单个处理器的 Sam3TrackerProcessor。
Sam3TrackerProcessor 提供了 Sam3ImageProcessor 的所有功能。有关更多信息,请参阅 ~Sam3ImageProcessor。
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None segmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None input_points: list[list[list[list[float]]]] | torch.Tensor | None = None input_labels: list[list[list[int]]] | torch.Tensor | None = None input_boxes: list[list[list[float]]] | torch.Tensor | None = None original_sizes: list[list[float]] | torch.Tensor | None = None return_tensors: str | transformers.utils.generic.TensorType | None = None **kwargs ) → 包含以下字段的 BatchEncoding
参数
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], optional) — 要预处理的图像。期望单个图像或一批像素值范围在 0 到 255 之间的图像。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False。 - segmentation_maps (
ImageInput, optional) — 要处理的分割掩码图。 - input_points (
list[list[list[list[float]]]],torch.Tensor, optional) — 要添加到帧中的点。 - input_labels (
list[list[list[int]]],torch.Tensor, optional) — 点的标签。 - input_boxes (
list[list[list[float]]],torch.Tensor, optional) — 要添加到帧中的边界框。 - original_sizes (
list[list[float]],torch.Tensor, optional) — 图像的原始尺寸。 - return_tensors (
Union[str, ~utils.generic.TensorType], optional) — 如果设置,将返回特定框架的张量。可接受的值为:'pt': 返回 PyTorchtorch.Tensor对象。'np': 返回 NumPynp.ndarray对象。
返回
具有以下字段的 BatchEncoding
pixel_values(torch.Tensor): 处理后的图像。original_sizes(list[list[float]]): 图像的原始大小。labels(torch.Tensor): 处理后的分割图(如果提供)。input_points(torch.Tensor): 处理后的点。input_labels(torch.Tensor): 处理后的标签。input_boxes(torch.Tensor): 处理后的边界框。
post_process_masks
< source >( masks original_sizes mask_threshold = 0.0 binarize = True max_hole_area = 0.0 max_sprinkle_area = 0.0 apply_non_overlapping_constraints = False **kwargs ) → (torch.Tensor)
参数
- masks (
Union[List[torch.Tensor], List[np.ndarray]]) — 来自 mask_decoder 的批处理掩码,格式为 (batch_size, num_channels, height, width)。 - original_sizes (
Union[torch.Tensor, List[Tuple[int,int]]]) — 每张图像在调整大小以符合模型预期输入形状之前的原始尺寸,格式为 (height, width)。 - mask_threshold (
float, optional, defaults to 0.0) — 用于二值化和后处理操作的阈值。 - binarize (
bool, optional, defaults toTrue) — 是否对掩码进行二值化。 - max_hole_area (
float, optional, defaults to 0.0) — 要填充的孔洞的最大面积。 - max_sprinkle_area (
float, optional, defaults to 0.0) — 要填充的碎点(sprinkle)的最大面积。 - apply_non_overlapping_constraints (
bool, optional, defaults toFalse) — 是否对掩码应用非重叠约束。
返回
(torch.Tensor)
批量掩码,格式为 (batch_size, num_channels, height, width),其中 (height, width) 由 original_size 给出。
去除填充并将掩码放大到原始图像大小。
Sam3TrackerModel
class transformers.Sam3TrackerModel
< 源文件 >( config: Sam3TrackerConfig )
参数
- config (Sam3TrackerConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
Segment Anything Model 2 (SAM 2),用于在给定输入图像、输入点、标签、框或掩码的情况下生成分割掩码。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< 源文件 >( pixel_values: torch.FloatTensor | None = None input_points: torch.FloatTensor | None = None input_labels: torch.LongTensor | None = None input_boxes: torch.FloatTensor | None = None input_masks: torch.LongTensor | None = None image_embeddings: torch.FloatTensor | None = None multimask_output: bool = True attention_similarity: torch.FloatTensor | None = None target_embedding: torch.FloatTensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → Sam3TrackerImageSegmentationOutput 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 对应于输入图像的张量。像素值可以使用 Sam3ImageProcessor 获取。有关详细信息,请参阅Sam3ImageProcessor.__call__()(processor_class使用 Sam3ImageProcessor 处理图像)。 - input_points (
torch.FloatTensor,形状为(batch_size, num_points, 2)) — 输入的二维空间点,供提示编码器(prompt encoder)用于编码提示信息。通常会带来更好的效果。这些点可以通过向处理器传递一个列表的列表的列表来获取,处理器将创建相应的维度为4的torch张量。第一维是图像批次大小,第二维是点批次大小(即我们希望模型为每个输入点预测多少个分割掩码),第三维是每个分割掩码的点数(可以为单个掩码传递多个点),最后一维是点的 x(垂直)和 y(水平)坐标。如果为每个图像或每个掩码传递的点数不同,处理器将创建“填充(PAD)”点,其坐标为 (0, 0),并且将跳过这些点的嵌入计算。 - input_labels (
torch.LongTensor,形状为(batch_size, point_batch_size, num_points)) — 点的输入标签,供提示编码器用于编码提示信息。根据官方实现,有 3 种类型的标签:1:该点是包含目标对象的点0:该点是不包含目标对象的点-1:该点对应于背景
我们添加了以下标签:
-10:该点是填充点,因此应被提示编码器忽略
填充标签应由处理器自动完成。
- input_boxes (
torch.FloatTensor,形状为(batch_size, num_boxes, 4)) — 点的输入框,供提示编码器用于编码提示信息。通常会产生更好的生成掩码。这些框可以通过向处理器传递一个列表的列表的列表来获取,处理器将生成一个torch张量,其每个维度分别对应于图像批次大小、每张图像的框数以及框的左上角和右下角点的坐标。顺序为(x1,y1,x2,y2):x1:输入框左上角的 x 坐标y1:输入框左上角的 y 坐标x2:输入框右下角的 x 坐标y2:输入框右下角的 y 坐标
- input_masks (
torch.FloatTensor,形状为(batch_size, image_size, image_size)) — SAM 模型也接受分割掩码作为输入。该掩码将由提示编码器嵌入以生成相应的嵌入,随后将其输入到掩码解码器中。这些掩码需要由用户手动提供,并且其形状必须为(batch_size,image_size,image_size)。 - image_embeddings (
torch.FloatTensor,形状为(batch_size, output_channels, window_size, window_size)) — 图像嵌入,供掩码解码器用于生成掩码和 IoU 分数。为了实现更内存高效的计算,用户可以先使用get_image_embeddings方法检索图像嵌入,然后将其提供给forward方法,而不是提供pixel_values。 - multimask_output (
bool,可选) — 在原始实现和论文中,模型始终为每张图像(或相关的每个点/每个边界框)输出 3 个掩码。但是,可以通过指定multimask_output=False,仅输出一个对应于“最佳”掩码的单一掩码。 - attention_similarity (
torch.FloatTensor,可选) — 注意力相似度张量,若模型用于 PerSAM 中介绍的个性化场景,需将其提供给掩码解码器以进行目标引导的注意力计算。 - target_embedding (
torch.FloatTensor,可选) — 目标概念的嵌入,若模型用于 PerSAM 中介绍的个性化场景,需将其提供给掩码解码器以进行目标语义提示(target-semantic prompting)。
返回
Sam3TrackerImageSegmentationOutput 或 tuple(torch.FloatTensor)
一个 Sam3TrackerImageSegmentationOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),根据配置(Sam3TrackerConfig)和输入包含不同的元素。
Sam3TrackerModel 的 forward 方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
- iou_scores (
torch.FloatTensorof shape(batch_size, point_batch_size, num_masks)) — 预测掩码的 Intersection over Union (IoU) 分数。 - pred_masks (
torch.FloatTensorof shape(batch_size, point_batch_size, num_masks, height, width)) — 预测的低分辨率掩码。这是low_res_masks的别名。这些掩码需要经过处理器后处理才能达到原始图像大小。 - object_score_logits (
torch.FloatTensorof shape(batch_size, point_batch_size, 1)) — 对象分数的 logits,指示是否存在对象。 - image_embeddings (
tuple(torch.FloatTensor)) — FPN 中的特征,用于掩码解码器。这是一个torch.FloatTensor元组,每个张量的形状为(batch_size, channels, height, width)。 - vision_hidden_states (
tuple(torch.FloatTensor), optional, 当output_hidden_states=True返回时) —torch.FloatTensor元组(每个阶段的输出一个),形状为(batch_size, height, width, hidden_size)。视觉模型在每个阶段输出的隐藏状态。 - vision_attentions (
tuple(torch.FloatTensor), optional, 当output_attentions=True返回时) —torch.FloatTensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。视觉模型的注意力权重。 - mask_decoder_attentions (
tuple(torch.FloatTensor), optional, 当output_attentions=True返回时) —torch.FloatTensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。掩码解码器的注意力权重。
示例
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO
>>> from transformers import AutoModel, AutoProcessor
>>> model = AutoModel.from_pretrained("danelcsb/sam3_tracker.1_hiera_tiny")
>>> processor = AutoProcessor.from_pretrained("danelcsb/sam3_tracker.1_hiera_tiny")
>>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/sam-car.png"
>>> with httpx.stream("GET", url) as response:
... raw_image = Image.open(BytesIO(response.read())).convert("RGB")
>>> input_points = [[[400, 650]]] # 2D location of a window on the car
>>> inputs = processor(images=raw_image, input_points=input_points, return_tensors="pt")
>>> # Get segmentation mask
>>> outputs = model(**inputs)
>>> # Postprocess masks
>>> masks = processor.post_process_masks(
... outputs.pred_masks, inputs["original_sizes"]
... )get_image_features
< 源文件 >( pixel_values: FloatTensor **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → Sam3TrackerVisionEncoderOutput 或 tuple(torch.FloatTensor)
参数
返回
Sam3TrackerVisionEncoderOutput 或 tuple(torch.FloatTensor)
一个 Sam3TrackerVisionEncoderOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),根据配置(Sam3TrackerConfig)和输入包含不同的元素。
- last_hidden_state (
torch.FloatTensorof shape(batch_size, height, width, hidden_size)) — 模型最后一层输出的隐藏状态序列。 - pooler_output (
torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列第一个 token(分类 token)在进一步通过用于辅助预训练任务的层后的最后一个隐藏状态。例如,对于 BERT 系列模型,这会返回经过线性层和 tanh 激活函数处理后的分类 token。线性层的权重是通过预训练期间的下一句预测(分类)目标来训练的。 - hidden_states (
tuple(torch.FloatTensor), optional, 当传递output_hidden_states=True或config.output_hidden_states=True时返回) —torch.FloatTensor的元组(如果模型有嵌入层,则一个用于嵌入层输出,加上一个用于每个阶段的输出),形状为(batch_size, height, width, hidden_size)。模型在每个阶段输出的隐藏状态。 - attentions (
tuple(torch.FloatTensor), optional, 当传递output_attentions=True或config.output_attentions=True时返回) —torch.FloatTensor的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。 - fpn_hidden_states (
tuple(torch.FloatTensor)) —torch.FloatTensor元组(每个特征级别一个,从高分辨率到低分辨率),形状为(batch_size, hidden_size, height, width)。来自特征金字塔网络颈部的特征图。 - fpn_position_encoding (
tuple(torch.FloatTensor)) —torch.FloatTensor元组(每个特征级别一个,从高分辨率到低分辨率),形状为(batch_size, hidden_size, height, width)。与fpn_hidden_states对应的位置编码。
Sam3TrackerPreTrainedModel
class transformers.Sam3TrackerPreTrainedModel
< 源文件 >( config: PreTrainedConfig *inputs **kwargs )
参数
- config (PreTrainedConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
Segment Anything Model 3 (SAM 3),用于根据输入图像以及输入点、标签、框或掩码生成分割掩码。
定义每次调用时执行的计算。
应由所有子类覆盖。
尽管前向传播的配方需要在该函数中定义,但之后应该调用
Module实例而不是它,因为前者负责运行注册的钩子,而后者则默默地忽略它们。