Transformers 4.37 中文文档(九十三)(2)https://developer.aliyun.com/article/1564060
SamImageProcessor
class transformers.SamImageProcessor
( do_resize: bool = True size: Dict = None mask_size: Dict = None resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: Union = 0.00392156862745098 do_normalize: bool = True image_mean: Union = None image_std: Union = None do_pad: bool = True pad_size: int = None mask_pad_size: int = None do_convert_rgb: bool = True **kwargs )
参数
do_resize(bool, 可选, 默认为True) — 是否将图像的(高度,宽度)尺寸调整为指定的size。可以通过preprocess方法中的do_resize参数进行覆盖。size(dict, 可选, 默认为{"longest_edge" -- 1024}): 调整大小后的输出图像大小。将图像的最长边调整为匹配size["longest_edge"],同时保持纵横比。可以通过preprocess方法中的size参数进行覆盖。mask_size(dict, 可选, 默认为{"longest_edge" -- 256}): 调整大小后的输出分割地图大小。将图像的最长边调整为匹配size["longest_edge"],同时保持纵横比。可以通过preprocess方法中的mask_size参数进行覆盖。resample(PILImageResampling, 可选, 默认为Resampling.BILINEAR) — 如果调整图像大小,则使用的重采样滤波器。可以通过preprocess方法中的resample参数进行覆盖。do_rescale(bool, 可选, 默认为True) — 是否按指定比例rescale_factor重新缩放图像。可以通过preprocess方法中的do_rescale参数进行覆盖。rescale_factor(int或float, 可选, 默认为1/255) — 如果重新缩放图像,则使用的比例因子。仅在do_rescale设置为True时有效。可以通过preprocess方法中的rescale_factor参数进行覆盖。do_normalize(bool, 可选, 默认为True) — 是否对图像进行归一化。可以通过preprocess方法中的do_normalize参数进行覆盖。可以通过preprocess方法中的do_normalize参数进行覆盖。image_mean(float或List[float], 可选, 默认为IMAGENET_DEFAULT_MEAN) — 如果对图像进行归一化,则使用的均值。这是一个浮点数或与图像中通道数相同长度的浮点数列表。可以通过preprocess方法中的image_mean参数进行覆盖。可以通过preprocess方法中的image_mean参数进行覆盖。image_std(float或List[float], 可选, 默认为IMAGENET_DEFAULT_STD) — 如果对图像进行归一化,则使用的标准差。这是一个浮点数或与图像中通道数相同长度的浮点数列表。可以通过preprocess方法中的image_std参数进行覆盖。可以通过preprocess方法中的image_std参数进行覆盖。do_pad(bool, optional, 默认为True) — 是否对图像进行填充到指定的pad_size。可以被preprocess方法中的do_pad参数覆盖。pad_size(dict, optional, 默认为{"height" -- 1024, "width": 1024}): 填充后的输出图像大小。可以被preprocess方法中的pad_size参数覆盖。mask_pad_size(dict, optional, 默认为{"height" -- 256, "width": 256}): 填充后的输出分割地图大小。可以被preprocess方法中的mask_pad_size参数覆盖。do_convert_rgb(bool, optional, 默认为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, 默认为 0.88) — iou 分数的阈值。stability_score_thresh(float, optional, 默认为 0.95) — 稳定性分数的阈值。mask_threshold(float, optional, 默认为 0) — 预测掩码的阈值。stability_score_offset(float, optional, 默认为 1) — 在_compute_stability_score方法中使用的稳定性分数的偏移量。return_tensors(str, optional, 默认为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: Optional = 32 crop_n_points_downscale_factor: Optional = 1 device: Optional = None input_data_format: Union = None return_tensors: str = 'pt' )
参数
image(np.array) — 输入原始图像target_size(int) — 调整大小后的图像目标尺寸crop_n_layers(int, optional, 默认为 0) — 如果 >0,将再次在图像的裁剪上运行掩码预测。设置要运行的层数,其中每一层有 2**i_layer 个图像裁剪。overlap_ratio(float, optional, 默认为 512/1500) — 设置裁剪重叠的程度。在第一层裁剪中,裁剪将以图像长度的这一部分重叠。后续层中,具有更多裁剪的层会缩小这种重叠。points_per_crop(int, optional, 默认为 32) — 每个裁剪中要采样的点数。crop_n_points_downscale_factor(List[int], optional, 默认为 1) — 第 n 层采样的每边点数按 crop_n_points_downscale_factor**n 缩小。device(torch.device, optional, 默认为 None) — 用于计算的设备。如果为 None,则使用 cpu。input_data_format(str或ChannelDimension, optional) — 输入图像的通道维度格式。如果未提供,将被推断。return_tensors(str, optional, 默认为pt) — 如果为pt,返回torch.Tensor。如果为tf,返回tf.Tensor。
生成不同尺寸的裁剪框列表。每一层有 (2**i)**2 个框。
pad_image
( image: ndarray pad_size: Dict data_format: Union = None input_data_format: Union = None **kwargs )
参数
image(np.ndarray) — 需要填充的图像。pad_size(Dict[str, int]) — 填充后的输出图像大小。data_format(str或ChannelDimension, optional) — 图像的数据格式。可以是 “channels_first” 或 “channels_last”。如果为None,将使用image的data_format。input_data_format(str或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, 默认为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' ) → export const metadata = 'undefined';(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, 默认为 0.0) — 用于对掩码进行二值化的阈值。binarize(bool, optional, 默认为True) — 是否对掩码进行二值化。pad_size(int, optional, 默认为self.pad_size) — 图像传递给模型之前填充到的目标大小。如果为 None,则假定目标大小为处理器的pad_size。return_tensors(str, optional, 默认为"pt") — 如果为"pt",返回 PyTorch 张量。如果为"tf",返回 TensorFlow 张量。
返回
(Union[torch.Tensor, tf.Tensor])
批量掩码,格式为 (batch_size, num_channels, height, width),其中 (height, width) 由 original_size 给出。
去除填充并将掩码放大到原始图像大小。
preprocess
( images: Union segmentation_maps: Union = None do_resize: Optional = None size: Optional = None mask_size: Optional = None resample: Optional = None do_rescale: Optional = None rescale_factor: Union = None do_normalize: Optional = None image_mean: Union = None image_std: Union = None do_pad: Optional = None pad_size: Optional = None mask_pad_size: Optional = None do_convert_rgb: Optional = None return_tensors: Union = None data_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'> input_data_format: Union = None **kwargs )
参数
images(ImageInput) — 要预处理的图像。期望单个图像或批量图像,像素值范围为 0 到 255。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False。segmentation_maps(ImageInput, optional) — 要预处理的分割地图。do_resize(bool, optional, 默认为self.do_resize) — 是否调整图像大小。size(Dict[str, int], optional, 默认为self.size) — 控制resize后图像的大小。图像的最长边被调整为size["longest_edge"],同时保持纵横比。mask_size(Dict[str, int], optional, 默认为self.mask_size) — 控制resize后分割地图的大小。图像的最长边被调整为size["longest_edge"],同时保持纵横比。resample(PILImageResampling, optional, 默认为self.resample) — 调整图像大小时要使用的PILImageResampling过滤器,例如PILImageResampling.BILINEAR。do_rescale(bool, optional, 默认为self.do_rescale) — 是否通过缩放因子重新缩放图像像素值。rescale_factor(intorfloat, optional, defaults toself.rescale_factor) — 应用于图像像素值的重新缩放因子。do_normalize(bool, optional, defaults toself.do_normalize) — 是否对图像进行归一化。image_mean(floatorList[float], optional, defaults toself.image_mean) — 如果do_normalize设置为True,则用于归一化图像的图像均值。image_std(floatorList[float], optional, defaults toself.image_std) — 如果do_normalize设置为True,则用于归一化图像的图像标准差。do_pad(bool, optional, defaults toself.do_pad) — 是否对图像进行填充。pad_size(Dict[str, int], optional, defaults toself.pad_size) — 控制应用于图像的填充大小。如果设置do_pad为True,则图像将填充到pad_size["height"]和pad_size["width"]。mask_pad_size(Dict[str, int], optional, defaults toself.mask_pad_size) — 控制应用于分割地图的填充大小。如果设置do_pad为True,则图像将填充到mask_pad_size["height"]和mask_pad_size["width"]。do_convert_rgb(bool, optional, defaults toself.do_convert_rgb) — 是否将图像转换为 RGB。return_tensors(strorTensorType, optional) — 要返回的张量类型。可以是以下之一:
- 未设置:返回一个
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(ChannelDimensionorstr, optional, defaults toChannelDimension.FIRST) — 输出图像的通道维度格式。可以是以下之一:
"channels_first"或ChannelDimension.FIRST:图像以(num_channels, height, width)格式。"channels_last"或ChannelDimension.LAST:图像以(height, width, num_channels)格式。- 未设置:使用输入图像的通道维度格式。
input_data_format(ChannelDimensionorstr, 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: Dict resample: Resampling = <Resampling.BICUBIC: 3> data_format: Union = None input_data_format: Union = None **kwargs ) → export const metadata = 'undefined';np.ndarray
参数
image(np.ndarray) — 要调整大小的图像。size(Dict[str, int]) — 以{"longest_edge": int}格式指定输出图像的大小的字典。图像的最长边将被调整为指定的大小,而另一边将被调整以保持纵横比。resample — 调整图像大小时要使用的PILImageResampling滤波器,例如PILImageResampling.BILINEAR。data_format(ChannelDimensionorstr, optional) — 输出图像的通道维度格式。如果未设置,则使用输入图像的通道维度格式。可以是以下之一:
"channels_first"或ChannelDimension.FIRST:图像以(num_channels, height, width)格式。"channels_last"或ChannelDimension.LAST:图像以(height, width, num_channels)格式。
input_data_format(ChannelDimensionorstr, 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 Model (SAM),给定输入图像和可选的 2D 位置和边界框。该模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
该模型也是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward
( pixel_values: Optional = None input_points: Optional = None input_labels: Optional = None input_boxes: Optional = None input_masks: Optional = None image_embeddings: Optional = None multimask_output: bool = True attention_similarity: Optional = None target_embedding: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None **kwargs )
参数
pixel_values(torch.FloatTensor,形状为(batch_size, num_channels, height, width)) — 像素值。像素值可以使用 SamProcessor 获得。查看SamProcessor.__call__()以获取详细信息。input_points(torch.FloatTensor,形状为(batch_size, num_points, 2)) — 输入 2D 空间点,这由提示编码器用于编码提示。通常会产生更好的结果。点可以通过将列表的列表的列表传递给处理器来获得,处理器将创建相应的维度为 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中介绍的。output_attentions(bool, 可选) - 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions。output_hidden_states(bool, 可选) - 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states。return_dict(bool, 可选) - 是否返回 ModelOutput 而不是普通元组。
示例 -
SamModel 的前向方法,覆盖了__call__特殊方法。
虽然前向传递的步骤需要在这个函数中定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行前处理和后处理步骤,而后者会默默地忽略它们。
TFSamModel
class transformers.TFSamModel
( config **kwargs )
参数
config(SamConfig) - 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。
用于生成分割掩码的 Segment Anything Model (SAM),给定输入图像和可选的 2D 位置和边界框。该模型继承自 TFPreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
这个模型也是一个 TensorFlow tf.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(tf.Tensor,形状为(batch_size, num_channels, height, width)) — 像素值。可以使用 SamProcessor 获取像素值。有关详细信息,请参阅SamProcessor.__call__()。input_points(tf.Tensor,形状为(batch_size, num_points, 2)) — 输入的 2D 空间点,这由提示编码器用于编码提示。通常会产生更好的结果。可以通过将列表的列表的列表传递给处理器来获取这些点,处理器将创建相应的维度为 4 的tf张量。第一维是图像批处理大小,第二维是点批处理大小(即模型要预测每个输入点的分割掩模数量),第三维是每个分割掩模的点数(可以为单个掩模传递多个点),最后一维是点的 x(垂直)和 y(水平)坐标。如果为每个图像或每个掩模传递了不同数量的点,则处理器将创建对应的“PAD”点,这些点将对应于(0, 0)坐标,并且将跳过这些点的嵌入计算使用标签。input_labels(tf.Tensor,形状为(batch_size, point_batch_size, num_points)) — 点的输入标签,这由提示编码器用于编码提示。根据官方实现,有 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, optional) — 在原始实现和论文中,模型始终为每个图像(或每个点/每个边界框,如果相关)输出 3 个掩模。但是,可以通过指定multimask_output=False来仅输出一个掩模,该掩模对应于“最佳”掩模。output_attentions(bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions。output_hidden_states(bool,可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states。return_dict(bool,可选)— 是否返回 ModelOutput 而不是普通元组。
TFSamModel 的前向方法,覆盖了__call__特殊方法。
尽管前向传递的配方需要在此函数内定义,但应该在此之后调用Module实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
Transformers 4.37 中文文档(九十三)(4)https://developer.aliyun.com/article/1564062