Transformers 文档

SAM

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

入门

SAM

PyTorch TensorFlow

概述

SAM (Segment Anything Model) 是在 Segment Anything 中提出的,作者包括 Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alex Berg, Wan-Yen Lo, Piotr Dollar, Ross Girshick。

该模型可用于预测给定输入图像中任何感兴趣物体的分割 mask。

example image

论文摘要如下:

我们介绍了 Segment Anything (SA) 项目:一个用于图像分割的新任务、模型和数据集。通过在数据收集循环中使用我们高效的模型,我们构建了迄今为止最大的分割数据集(遥遥领先),在 1100 万张许可且尊重隐私的图像上拥有超过 10 亿个 mask。该模型被设计和训练为可提示的,因此它可以零样本迁移到新的图像分布和任务。我们在众多任务上评估了其能力,发现其零样本性能令人印象深刻 —— 通常与之前的完全监督结果相比具有竞争力,甚至更优。我们正在发布 Segment Anything Model (SAM) 和相应的 SA-1B 数据集,其中包含 10 亿个 mask 和 1100 万张图像,网址为 https://segment-anything.com,以促进对计算机视觉基础模型的研究。

提示

  • 该模型预测二元 mask,指示给定图像中感兴趣物体的存在与否。
  • 如果提供输入 2D 点和/或输入边界框,该模型会预测更好的结果
  • 您可以为同一图像提示多个点,并预测单个 mask。
  • 尚不支持微调模型
  • 根据论文,也应该支持文本输入。但是,在撰写本文时,根据 官方存储库,这似乎不受支持。

此模型由 ybelkadaArthurZ 贡献。 原始代码可以在这里找到。

以下是如何在给定图像和 2D 点的情况下运行 mask 生成的示例

import torch
from PIL import Image
import requests
from transformers import SamModel, SamProcessor

device = "cuda" if torch.cuda.is_available() else "cpu"
model = SamModel.from_pretrained("facebook/sam-vit-huge").to(device)
processor = SamProcessor.from_pretrained("facebook/sam-vit-huge")

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]]]  # 2D location of a window in the image

inputs = processor(raw_image, input_points=input_points, return_tensors="pt").to(device)
with torch.no_grad():
    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

您还可以处理您自己的 mask 以及处理器中的输入图像,以便传递给模型。

import torch
from PIL import Image
import requests
from transformers import SamModel, SamProcessor

device = "cuda" if torch.cuda.is_available() else "cpu"
model = SamModel.from_pretrained("facebook/sam-vit-huge").to(device)
processor = SamProcessor.from_pretrained("facebook/sam-vit-huge")

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")
mask_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png"
segmentation_map = Image.open(requests.get(mask_url, stream=True).raw).convert("1")
input_points = [[[450, 600]]]  # 2D location of a window in the image

inputs = processor(raw_image, input_points=input_points, segmentation_maps=segmentation_map, return_tensors="pt").to(device)
with torch.no_grad():
    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

资源

以下是 Hugging Face 官方和社区 (🌎 表示) 资源列表,可帮助您开始使用 SAM。

SlimSAM

SlimSAM,SAM 的剪枝版本,在 0.1% Data Makes Segment Anything Slim 中由 Zigeng Chen 等人提出。 SlimSAM 大大减小了 SAM 模型的大小,同时保持了相同的性能。

检查点可以在 hub 上找到,并且可以作为 SAM 的直接替代品使用。

Grounded SAM

可以将 Grounding DINO 与 SAM 结合使用,以进行基于文本的 mask 生成,如 Grounded SAM: Assembling Open-World Models for Diverse Visual Tasks 中介绍的那样。您可以参考此演示 notebook 🌍 获取详细信息。

drawing Grounded SAM 概述。摘自原始仓库

SamConfig

class transformers.SamConfig

< >

( vision_config = None prompt_encoder_config = None mask_decoder_config = None initializer_range = 0.02 **kwargs )

参数

  • vision_config (Union[dict, SamVisionConfig], 可选) — 用于初始化 SamVisionConfig 的配置选项字典。
  • prompt_encoder_config (Union[dict, SamPromptEncoderConfig], 可选) — 用于初始化 SamPromptEncoderConfig 的配置选项字典。
  • mask_decoder_config (Union[dict, SamMaskDecoderConfig], 可选) — 用于初始化 SamMaskDecoderConfig 的配置选项字典。
  • kwargs (可选) — 关键字参数字典。

SamConfig 是用于存储 SamModel 配置的配置类。 它用于根据指定的参数实例化 SAM 模型,定义视觉模型、prompt-encoder 模型和 mask 解码器配置。 使用默认值实例化配置将产生与 SAM-ViT-H facebook/sam-vit-huge 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。 阅读 PretrainedConfig 的文档以获取更多信息。

示例

>>> from transformers import (
...     SamVisionConfig,
...     SamPromptEncoderConfig,
...     SamMaskDecoderConfig,
...     SamModel,
... )

>>> # Initializing a SamConfig with `"facebook/sam-vit-huge"` style configuration
>>> configuration = SamConfig()

>>> # Initializing a SamModel (with random weights) from the `"facebook/sam-vit-huge"` style configuration
>>> model = SamModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

>>> # We can also initialize a SamConfig from a SamVisionConfig, SamPromptEncoderConfig, and SamMaskDecoderConfig

>>> # Initializing SAM vision, SAM Q-Former and language model configurations
>>> vision_config = SamVisionConfig()
>>> prompt_encoder_config = SamPromptEncoderConfig()
>>> mask_decoder_config = SamMaskDecoderConfig()

>>> config = SamConfig(vision_config, prompt_encoder_config, mask_decoder_config)

SamVisionConfig

class transformers.SamVisionConfig

< >

( hidden_size = 768 output_channels = 256 num_hidden_layers = 12 num_attention_heads = 12 num_channels = 3 image_size = 1024 patch_size = 16 hidden_act = 'gelu' layer_norm_eps = 1e-06 attention_dropout = 0.0 initializer_range = 1e-10 qkv_bias = True mlp_ratio = 4.0 use_abs_pos = True use_rel_pos = True window_size = 14 global_attn_indexes = [2, 5, 8, 11] num_pos_feats = 128 mlp_dim = None **kwargs )

参数

  • hidden_size (int, optional, defaults to 768) — 编码器层和池化层的维度。
  • output_channels (int, optional, defaults to 256) — Patch Encoder 中输出通道的维度。
  • num_hidden_layers (int, optional, defaults to 12) — Transformer 编码器中隐藏层的数量。
  • num_attention_heads (int, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。
  • num_channels (int, optional, defaults to 3) — 输入图像中的通道数。
  • image_size (int, optional, defaults to 1024) — 预期分辨率。调整大小后的输入图像的目标尺寸。
  • patch_size (int, optional, defaults to 16) — 从输入图像中提取的图像块大小。
  • hidden_act (str, optional, defaults to "gelu") — 非线性激活函数(函数或字符串)
  • layer_norm_eps (float, optional, defaults to 1e-06) — 层归一化层使用的 epsilon 值。
  • attention_dropout (float, optional, defaults to 0.0) — 注意力概率的 dropout 比率。
  • initializer_range (float, optional, defaults to 1e-10) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • qkv_bias (bool, optional, defaults to True) — 是否向 query、key、value 投影添加偏置。
  • mlp_ratio (float, optional, defaults to 4.0) — MLP 隐藏层维度与嵌入层维度的比率。
  • use_abs_pos (bool, optional, defaults to True) — 是否使用绝对位置嵌入。
  • use_rel_pos (bool, optional, defaults to True) — 是否使用相对位置嵌入。
  • window_size (int, optional, defaults to 14) — 相对位置的窗口大小。
  • global_attn_indexes (List[int], optional, defaults to [2, 5, 8, 11]) — 全局注意力层的索引。
  • num_pos_feats (int, optional, defaults to 128) — 位置嵌入的维度。
  • mlp_dim (int, optional) — Transformer 编码器中 MLP 层的维度。如果为 None,则默认为 mlp_ratio * hidden_size

这是用于存储 SamVisionModel 配置的配置类。它用于根据指定的参数实例化 SAM 视觉编码器,定义模型架构。实例化默认配置将产生与 SAM ViT-h facebook/sam-vit-huge 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。 阅读 PretrainedConfig 的文档以获取更多信息。

SamMaskDecoderConfig

class transformers.SamMaskDecoderConfig

< >

( hidden_size = 256 hidden_act = 'relu' mlp_dim = 2048 num_hidden_layers = 2 num_attention_heads = 8 attention_downsample_rate = 2 num_multimask_outputs = 3 iou_head_depth = 3 iou_head_hidden_dim = 256 layer_norm_eps = 1e-06 **kwargs )

参数

  • hidden_size (int, optional, defaults to 256) — 隐藏状态的维度。
  • hidden_act (str, optional, defaults to "relu") — SamMaskDecoder 模块内部使用的非线性激活函数。
  • mlp_dim (int, optional, defaults to 2048) — Transformer 编码器中“中间”(即,前馈)层的维度。
  • num_hidden_layers (int, optional, defaults to 2) — Transformer 编码器中隐藏层的数量。
  • num_attention_heads (int, optional, defaults to 8) — Transformer 编码器中每个注意力层的注意力头数。
  • attention_downsample_rate (int, optional, defaults to 2) — 注意力层的下采样率。
  • num_multimask_outputs (int, optional, defaults to 3) — 来自 SamMaskDecoder 模块的输出数量。在 Segment Anything 论文中,此值设置为 3。
  • iou_head_depth (int, optional, defaults to 3) — IoU 头部模块中的层数。
  • iou_head_hidden_dim (int, optional, defaults to 256) — IoU 头部模块中隐藏状态的维度。
  • layer_norm_eps (float, optional, defaults to 1e-06) — 层归一化层使用的 epsilon 值。

这是用于存储 SamMaskDecoder 配置的配置类。它用于实例化具有指定参数的 SAM 掩码解码器,定义模型架构。实例化默认配置将生成类似于 SAM-vit-h facebook/sam-vit-huge 架构的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。 阅读 PretrainedConfig 的文档以获取更多信息。

SamPromptEncoderConfig

class transformers.SamPromptEncoderConfig

< >

( hidden_size = 256 image_size = 1024 patch_size = 16 mask_input_channels = 16 num_point_embeddings = 4 hidden_act = 'gelu' layer_norm_eps = 1e-06 **kwargs )

参数

  • hidden_size (int, optional, defaults to 256) — 隐藏状态的维度。
  • image_size (int, optional, defaults to 1024) — 图像的预期输出分辨率。
  • patch_size (int, optional, defaults to 16) — 每个 patch 的大小(分辨率)。
  • mask_input_channels (int, optional, defaults to 16) — 要馈送到 MaskDecoder 模块的通道数。
  • num_point_embeddings (int, optional, defaults to 4) — 要使用的点嵌入的数量。
  • hidden_act (str, optional, defaults to "gelu") — 编码器和池化器中的非线性激活函数。

这是用于存储 SamPromptEncoder 配置的配置类。 SamPromptEncoder 模块用于编码输入的 2D 点和边界框。实例化默认配置将生成类似于 SAM-vit-h facebook/sam-vit-huge 架构的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。 阅读 PretrainedConfig 的文档以获取更多信息。

SamProcessor

class transformers.SamProcessor

< >

( image_processor )

参数

  • image_processor (SamImageProcessor) — SamImageProcessor 的一个实例。图像处理器是必需的输入。

构建一个 SAM 处理器,它将 SAM 图像处理器和 2D 点及边界框处理器包装到单个处理器中。

SamProcessor 提供 SamImageProcessor 的所有功能。有关更多信息,请参阅 call() 的文档字符串。

SamImageProcessor

class transformers.SamImageProcessor

< >

( do_resize: bool = True size: typing.Dict[str, int] = None mask_size: typing.Dict[str, int] = None resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: typing.Union[int, float] = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, typing.List[float], NoneType] = None image_std: typing.Union[float, typing.List[float], NoneType] = None do_pad: bool = True pad_size: int = None mask_pad_size: int = None do_convert_rgb: bool = True **kwargs )

参数

  • do_resize (bool, optional, defaults to True) — 是否将图像的(高度,宽度)尺寸调整为指定的 size。可以被 preprocess 方法中的 do_resize 参数覆盖。
  • size (dict, optional, defaults to {"longest_edge" -- 1024}): 调整大小后输出图像的大小。调整图像最长边以匹配 size["longest_edge"],同时保持宽高比。可以被 preprocess 方法中的 size 参数覆盖。
  • mask_size (dict, optional, defaults to {"longest_edge" -- 256}): 调整大小后输出分割图的大小。调整图像最长边以匹配 size["longest_edge"],同时保持宽高比。可以被 preprocess 方法中的 mask_size 参数覆盖。
  • resample (PILImageResampling, optional, defaults to Resampling.BILINEAR) — 如果调整图像大小,则使用的重采样滤波器。可以被 preprocess 方法中的 resample 参数覆盖。
  • do_rescale (bool, optional, defaults to True) — 是否按指定的比例 rescale_factor 重新缩放图像。可以被 preprocess 方法中的 do_rescale 参数覆盖。
  • rescale_factor (int or float, optional, defaults to 1/255) — 如果重新缩放图像,则使用的缩放因子。仅当 do_rescale 设置为 True 时才有效。可以被 preprocess 方法中的 rescale_factor 参数覆盖。
  • do_normalize (bool, optional, defaults to True) — 是否对图像进行归一化。可以被 preprocess 方法中的 do_normalize 参数覆盖。可以被 preprocess 方法中的 do_normalize 参数覆盖。
  • image_mean (float or List[float], optional, defaults to IMAGENET_DEFAULT_MEAN) — 如果标准化图像,则使用的均值。这是一个浮点数或浮点数列表,其长度为图像中通道的数量。可以被 preprocess 方法中的 image_mean 参数覆盖。可以被 preprocess 方法中的 image_mean 参数覆盖。
  • image_std (float or List[float], optional, defaults to IMAGENET_DEFAULT_STD) — 如果标准化图像,则使用的标准差。这是一个浮点数或浮点数列表,其长度为图像中通道的数量。可以被 preprocess 方法中的 image_std 参数覆盖。可以被 preprocess 方法中的 image_std 参数覆盖。
  • do_pad (bool, optional, defaults to True) — 是否将图像填充到指定的 pad_size。可以被 preprocess 方法中的 do_pad 参数覆盖。
  • pad_size (dict, optional, defaults to {"height" -- 1024, "width": 1024}): 填充后输出图像的大小。可以被 preprocess 方法中的 pad_size 参数覆盖。
  • mask_pad_size (dict, optional, defaults to {"height" -- 256, "width": 256}): 填充后输出分割图的大小。可以被 preprocess 方法中的 mask_pad_size 参数覆盖。
  • do_convert_rgb (bool, optional, defaults to True) — 是否将图像转换为 RGB 格式。

构建 SAM 图像处理器。

filter_masks

< >

( masks iou_scores original_size cropped_box_image pred_iou_thresh = 0.88 stability_score_thresh = 0.95 mask_threshold = 0 stability_score_offset = 1 return_tensors = 'pt' )

参数

  • masks (Union[torch.Tensor, tf.Tensor]) — 输入掩码。
  • iou_scores (Union[torch.Tensor, tf.Tensor]) — IoU 分数列表。
  • original_size (Tuple[int,int]) — 原始图像的大小。
  • cropped_box_image (np.array) — 裁剪后的图像。
  • pred_iou_thresh (float, optional, defaults to 0.88) — iou 分数的阈值。
  • stability_score_thresh (float, optional, defaults to 0.95) — 稳定性分数的阈值。
  • mask_threshold (float, optional, defaults to 0) — 预测掩码的阈值。
  • stability_score_offset (float, optional, defaults to 1) — _compute_stability_score 方法中使用的稳定性分数的偏移量。
  • return_tensors (str, optional, defaults to pt) — 如果为 pt,则返回 torch.Tensor。如果为 tf,则返回 tf.Tensor

通过选择满足多个标准的预测掩码来过滤它们。第一个标准是 iou 分数需要大于 pred_iou_thresh。第二个标准是稳定性分数需要大于 stability_score_thresh。该方法还将预测掩码转换为边界框,并在必要时填充预测掩码。

generate_crop_boxes

< >

( image target_size crop_n_layers: int = 0 overlap_ratio: float = 0.3413333333333333 points_per_crop: typing.Optional[int] = 32 crop_n_points_downscale_factor: typing.Optional[typing.List[int]] = 1 device: typing.Optional[ForwardRef('torch.device')] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None return_tensors: str = 'pt' )

参数

  • image (np.array) — 输入原始图像
  • target_size (int) — 调整大小后的图像的目标大小
  • crop_n_layers (int, optional, defaults to 0) — 如果 >0,则将在图像的裁剪区域上再次运行掩码预测。设置要运行的层数,其中每一层都有 2**i_layer 个图像裁剪区域。
  • overlap_ratio (float, optional, defaults to 512/1500) — 设置裁剪区域重叠的程度。在第一个裁剪层中,裁剪区域将重叠图像长度的这个比例。具有更多裁剪区域的后续层会缩小此重叠。
  • points_per_crop (int, optional, defaults to 32) — 从每个裁剪区域采样的点数。
  • crop_n_points_downscale_factor (List[int], optional, defaults to 1) — 在第 n 层中采样的每侧点数按 crop_n_points_downscale_factor**n 缩小。
  • device (torch.device, optional, defaults to None) — 用于计算的设备。如果为 None,将使用 cpu。
  • input_data_format (str or ChannelDimension, optional) — 输入图像的通道维度格式。如果未提供,则将进行推断。
  • return_tensors (str, optional, defaults to pt) — 如果为 pt,则返回 torch.Tensor。如果为 tf,则返回 tf.Tensor

生成不同尺寸的裁剪框列表。每层有 (2i)2 个框,其中 i 是层数。

pad_image

< >

( image: ndarray pad_size: typing.Dict[str, int] data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None **kwargs )

参数

  • image (np.ndarray) — 要填充的图像。
  • pad_size (Dict[str, int]) — 填充后输出图像的尺寸。
  • data_format (str or ChannelDimension, optional) — 图像的数据格式。可以是 “channels_first” 或 “channels_last”。如果为 None,则将使用 imagedata_format
  • input_data_format (str or ChannelDimension, optional) — 输入图像的通道维度格式。如果未提供,则将进行推断。

将图像填充到 (pad_size["height"], pad_size["width"]),右侧和底部用零填充。

post_process_for_mask_generation

< >

( all_masks all_scores all_boxes crops_nms_thresh return_tensors = 'pt' )

参数

  • all_masks (Union[List[torch.Tensor], List[tf.Tensor]]) — 所有预测的分割掩码的列表
  • all_scores (Union[List[torch.Tensor], List[tf.Tensor]]) — 所有预测的 iou 分数的列表
  • all_boxes (Union[List[torch.Tensor], List[tf.Tensor]]) — 所有预测掩码的边界框列表
  • crops_nms_thresh (float) — NMS(非极大值抑制)算法的阈值。
  • return_tensors (str, optional, defaults to pt) — 如果为 pt,则返回 torch.Tensor。如果为 tf,则返回 tf.Tensor

对通过在预测掩码上调用非极大值抑制算法生成的掩码进行后处理。

post_process_masks

< >

( masks original_sizes reshaped_input_sizes mask_threshold = 0.0 binarize = True pad_size = None return_tensors = 'pt' ) (Union[torch.Tensor, tf.Tensor])

参数

  • masks (Union[List[torch.Tensor], List[np.ndarray], List[tf.Tensor]]) — 来自 mask_decoder 的批量掩码,格式为 (batch_size, num_channels, height, width)。
  • original_sizes (Union[torch.Tensor, tf.Tensor, List[Tuple[int,int]]]) — 每张图像在调整为模型预期输入形状之前的原始尺寸,格式为 (height, width)。
  • reshaped_input_sizes (Union[torch.Tensor, tf.Tensor, List[Tuple[int,int]]]) — 每张图像输入到模型时的尺寸,格式为 (height, width)。用于移除填充。
  • mask_threshold (float, optional, defaults to 0.0) — 用于二值化掩码的阈值,默认为 0.0。
  • binarize (bool, optional, defaults to True) — 是否将掩码二值化,默认为 True
  • pad_size (int, optional, defaults to self.pad_size) — 图像在传递给模型之前填充到的目标尺寸。如果为 None,则假定目标尺寸为处理器本身的 pad_size
  • return_tensors (str, optional, defaults to "pt") — 如果为 "pt",则返回 PyTorch 张量。如果为 "tf",则返回 TensorFlow 张量。

返回

(Union[torch.Tensor, tf.Tensor])

批量掩码,格式为 (batch_size, num_channels, height, width),其中 (height, width) 由 original_size 给出。

移除填充并将掩码放大到原始图像尺寸。

preprocess

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] 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 do_resize: typing.Optional[bool] = None size: typing.Optional[typing.Dict[str, int]] = None mask_size: typing.Optional[typing.Dict[str, int]] = None resample: typing.Optional[ForwardRef('PILImageResampling')] = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Union[int, float, NoneType] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, typing.List[float], NoneType] = None image_std: typing.Union[float, typing.List[float], NoneType] = None do_pad: typing.Optional[bool] = None pad_size: typing.Optional[typing.Dict[str, int]] = None mask_pad_size: typing.Optional[typing.Dict[str, int]] = None do_convert_rgb: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )

参数

  • images (ImageInput) — 要预处理的图像。期望是像素值范围为 0 到 255 的单张或一批图像。如果传入的图像像素值在 0 到 1 之间,请设置 do_rescale=False
  • segmentation_maps (ImageInput, optional) — 要预处理的分割图。
  • do_resize (bool, optional, defaults to self.do_resize) — 是否调整图像大小,默认为 self.do_resize
  • size (Dict[str, int], optional, defaults to self.size) — 控制 resize 之后图像的尺寸。图像的最长边将被调整为 size["longest_edge"],同时保持宽高比。
  • mask_size (Dict[str, int], optional, defaults to self.mask_size) — 控制 resize 之后分割图的尺寸。图像的最长边将被调整为 size["longest_edge"],同时保持宽高比。
  • resample (PILImageResampling, optional, defaults to self.resample) — PILImageResampling 滤波器,用于在调整图像大小时使用,例如 PILImageResampling.BILINEAR
  • do_rescale (bool, optional, defaults to self.do_rescale) — 是否通过缩放因子来重新缩放图像像素值。
  • rescale_factor (int or float, optional, defaults to self.rescale_factor) — 应用于图像像素值的缩放因子。
  • do_normalize (bool, optional, defaults to self.do_normalize) — 是否对图像进行归一化。
  • image_mean (float or List[float], optional, defaults to self.image_mean) — 如果 do_normalize 设置为 True,则用于归一化图像的图像均值。
  • image_std (float or List[float], optional, defaults to self.image_std) — 如果 do_normalize 设置为 True,则用于归一化图像的图像标准差。
  • do_pad (bool, optional, defaults to self.do_pad) — 是否对图像进行填充。
  • pad_size (Dict[str, int], optional, defaults to self.pad_size) — 控制应用于图像的填充尺寸。如果 do_pad 设置为 True,则图像将被填充到 pad_size["height"]pad_size["width"]
  • mask_pad_size (Dict[str, int], optional, defaults to self.mask_pad_size) — 控制应用于分割图的填充尺寸。如果 do_pad 设置为 True,则图像将被填充到 mask_pad_size["height"]mask_pad_size["width"]
  • do_convert_rgb (bool, optional, defaults to self.do_convert_rgb) — 是否将图像转换为 RGB 格式。
  • return_tensors (str or TensorType, optional) — 返回张量的类型。可以是以下之一:
    • Unset: 返回 np.ndarray 列表。
    • TensorType.TENSORFLOW'tf': 返回 tf.Tensor 类型的批次。
    • TensorType.PYTORCH'pt': 返回 torch.Tensor 类型的批次。
    • TensorType.NUMPY'np': 返回 np.ndarray 类型的批次。
    • TensorType.JAX'jax': 返回 jax.numpy.ndarray 类型的批次。
  • data_format (ChannelDimension or str, optional, defaults to ChannelDimension.FIRST) — 输出图像的通道维度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST: 图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST: 图像格式为 (height, width, num_channels)。
    • Unset: 使用输入图像的通道维度格式。
  • input_data_format (ChannelDimension or str, optional) — 输入图像的通道维度格式。如果未设置,则通道维度格式从输入图像推断。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST: 图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST: 图像格式为 (height, width, num_channels)。
    • "none"ChannelDimension.NONE: 图像格式为 (height, width)。

预处理图像或批量图像。

resize

< >

( image: ndarray size: typing.Dict[str, int] resample: Resampling = <Resampling.BICUBIC: 3> data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None **kwargs ) np.ndarray

参数

  • image (np.ndarray) — 要调整大小的图像。
  • size (Dict[str, int]) — 字典格式为 {"longest_edge": int},指定输出图像的尺寸。图像的最长边将被调整为指定尺寸,而另一边将被调整以保持宽高比。
  • resamplePILImageResampling 滤波器,用于在调整图像大小时使用,例如 PILImageResampling.BILINEAR
  • data_format (ChannelDimension or str, optional) — 输出图像的通道维度格式。如果未设置,则使用输入图像的通道维度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST: 图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST: 图像格式为 (height, width, num_channels)。
  • input_data_format (ChannelDimension or str, optional) — 输入图像的通道维度格式。如果未设置,则通道维度格式从输入图像推断。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST: 图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST: 图像格式为 (height, width, num_channels)。

返回

np.ndarray

调整大小后的图像。

将图像调整为 (size["height"], size["width"]) 的大小。

SamModel

class transformers.SamModel

< >

( config )

参数

  • config (SamConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。

用于生成分割掩码的 Segment Anything 模型 (SAM),给定输入图像和可选的 2D 位置和边界框。此模型继承自 PreTrainedModel。查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以了解与常规用法和行为相关的所有事项。

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None input_points: typing.Optional[torch.FloatTensor] = None input_labels: typing.Optional[torch.LongTensor] = None input_boxes: typing.Optional[torch.FloatTensor] = None input_masks: typing.Optional[torch.LongTensor] = None image_embeddings: typing.Optional[torch.FloatTensor] = None multimask_output: bool = True attention_similarity: typing.Optional[torch.FloatTensor] = None target_embedding: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs )

参数

  • pixel_values (形状为 (batch_size, num_channels, height, width)torch.FloatTensor) — 像素值。像素值可以使用 SamProcessor 获得。 详见 SamProcessor.__call__() 以了解详情。
  • input_points (形状为 (batch_size, num_points, 2)torch.FloatTensor) — 输入 2D 空间点,prompt 编码器使用它来编码 prompt。 通常会产生更好的结果。 这些点可以通过将列表的列表的列表传递给处理器来获得,这将创建维度为 4 的相应 torch 张量。 第一个维度是图像批次大小,第二个维度是点批次大小(即我们希望模型为每个输入点预测多少个分割掩码),第三个维度是每个分割掩码的点数(可以为单个掩码传递多个点),最后一个维度是点的 x(垂直)和 y(水平)坐标。 如果为每个图像或每个掩码传递的点数不同,处理器将创建与 (0, 0) 坐标对应的“PAD”点,并且将使用标签跳过这些点的嵌入计算。
  • input_labels (形状为 (batch_size, point_batch_size, num_points)torch.LongTensor) — 点的输入标签,prompt 编码器使用它来编码 prompt。 根据官方实现,标签有 3 种类型

    • 1: 该点是包含感兴趣对象的点
    • 0: 该点是不包含感兴趣对象的点
    • -1: 该点对应于背景

    我们添加了标签:

    • -10: 该点是填充点,因此 prompt 编码器应忽略它

    填充标签应由处理器自动完成。

  • input_boxes (形状为 (batch_size, num_boxes, 4)torch.FloatTensor) — 点的输入框,prompt 编码器使用它来编码 prompt。 通常会产生更好的生成掩码。 这些框可以通过将列表的列表的列表传递给处理器来获得,这将生成一个 torch 张量,每个维度分别对应于图像批次大小、每张图像的框数以及框的左上角和右下角点的坐标。 顺序为 (x1, y1, x2, y2):

    • x1:输入框左上角点的 x 坐标
    • y1:输入框左上角点的 y 坐标
    • x2:输入框右下角点的 x 坐标
    • y2:输入框右下角点的 y 坐标
  • input_masks (形状为 (batch_size, image_size, image_size)torch.FloatTensor) — SAM 模型也接受分割掩码作为输入。 掩码将由 prompt 编码器嵌入,以生成相应的嵌入,稍后将馈送到掩码解码器。 这些掩码需要用户手动馈送,并且它们需要是形状 (batch_size, image_size, image_size)。
  • image_embeddings (形状为 (batch_size, output_channels, window_size, window_size)torch.FloatTensor) — 图像嵌入,掩码解码器使用它来生成掩码和 IOU 分数。 为了更节省内存的计算,用户可以首先使用 get_image_embeddings 方法检索图像嵌入,然后将它们馈送到 forward 方法,而不是馈送 pixel_values
  • multimask_output (bool, 可选) — 在原始实现和论文中,模型总是为每张图像(或每个点/每个边界框,如果相关)输出 3 个掩码。 但是,可以通过指定 multimask_output=False 来仅输出单个掩码,该掩码对应于“最佳”掩码。
  • attention_similarity (torch.FloatTensor, 可选) — 注意力相似度张量,在模型用于 PerSAM 中介绍的个性化时,提供给掩码解码器以进行目标引导的注意力。
  • target_embedding (torch.FloatTensor, 可选) — 目标概念的嵌入,在模型用于 PerSAM 中介绍的个性化时,提供给掩码解码器以进行目标语义 prompt。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是纯元组。
  • 示例
  • ```python

    from PIL import Image import requests from transformers import AutoModel, AutoProcessor

SamModel 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

TFSamModel

class transformers.TFSamModel

< >

( config **kwargs )

参数

  • config (SamConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

用于生成分割掩码的 Segment Anything 模型 (SAM),给定输入图像和可选的 2D 位置和边界框。 此模型继承自 TFPreTrainedModel。 查看超类文档以获取库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 TensorFlow keras.Model 子类。 将其用作常规 TensorFlow 模型,并参阅 TensorFlow 文档以了解与常规用法和行为相关的所有事项。

call

< >

( pixel_values: TFModelInputType | None = None input_points: tf.Tensor | None = None input_labels: tf.Tensor | None = None input_boxes: tf.Tensor | None = None input_masks: tf.Tensor | None = None image_embeddings: tf.Tensor | None = None multimask_output: bool = True output_attentions: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None training: bool = False **kwargs )

参数

  • pixel_values (形状为 (batch_size, num_channels, height, width)tf.Tensor) — 像素值。像素值可以使用 SamProcessor 获得。 详见 SamProcessor.__call__() 以了解详情。
  • input_points (形状为 (batch_size, num_points, 2)tf.Tensor) — 输入 2D 空间点,提示编码器使用它来编码提示。 通常会产生更好的结果。 这些点可以通过将列表的列表的列表传递给处理器来获得,这将创建维度为 4 的相应 tf 张量。 第一个维度是图像批次大小,第二个维度是点批次大小(即我们希望模型为每个输入点预测多少个分割掩码),第三个维度是每个分割掩码的点数(可以为单个掩码传递多个点),最后一个维度是点的 x(垂直)和 y(水平)坐标。 如果为每个图像或每个掩码传递的点数不同,处理器将创建与 (0, 0) 坐标对应的“PAD”点,并且将使用标签跳过这些点的嵌入计算。
  • input_labels (形状为 (batch_size, point_batch_size, num_points)tf.Tensor) — 点的输入标签,提示编码器使用它来编码提示。 根据官方实现,标签有 3 种类型

    • 1: 该点是包含感兴趣对象的点
    • 0: 该点是不包含感兴趣对象的点
    • -1: 该点对应于背景

    我们添加了标签:

    • -10: 该点是填充点,因此提示编码器应忽略它

    填充标签应由处理器自动完成。

  • input_boxes (tf.Tensor,形状为 (batch_size, num_boxes, 4)) — 点的输入框,提示编码器使用此参数来编码提示。通常会生成更好的掩码。框可以通过将列表的列表的列表传递给处理器来获得,这将生成一个 tf 张量,每个维度分别对应于图像批次大小、每张图像的框数以及框的左上角和右下角点的坐标。顺序为 (x1, y1, x2, y2):

    • x1: 输入框左上角点的 x 坐标
    • y1: 输入框左上角点的 y 坐标
    • x2: 输入框右下角点的 x 坐标
    • y2: 输入框右下角点的 y 坐标
  • input_masks (tf.Tensor,形状为 (batch_size, image_size, image_size)) — SAM 模型也接受分割掩码作为输入。掩码将由提示编码器嵌入以生成相应的嵌入,该嵌入稍后将馈送到掩码解码器。这些掩码需要用户手动馈送,并且它们的形状需要为 (batch_size, image_size, image_size)。
  • image_embeddings (tf.Tensor,形状为 (batch_size, output_channels, window_size, window_size)) — 图像嵌入,掩码解码器使用此参数来生成掩码和 iou 分数。为了更节省内存的计算,用户可以首先使用 get_image_embeddings 方法检索图像嵌入,然后将它们馈送到 call 方法,而不是馈送 pixel_values
  • multimask_output (bool, 可选) — 在原始实现和论文中,模型总是为每张图像(或每个点/每个边界框,如果相关)输出 3 个掩码。但是,可以通过指定 multimask_output=False 来仅输出单个掩码,该掩码对应于“最佳”掩码。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通的元组。

TFSamModel 的前向方法,覆盖了 __call__ 特殊方法。

尽管 forward 传递的配方需要在该函数中定义,但之后应该调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

< > 在 GitHub 上更新