Transformers 文档

YOLO

Hugging Face's logo
加入 Hugging Face 社区

获取增强后的文档体验

来开始吧

YOLOS

概述

YOLOS 模型已在 Yuxin Fang、Bencheng Liao、Xinggang Wang、Jiemin Fang、Jiyang Qi、Rui Wu、Jianwei Niu 和 Wenyu Liu 撰写的 只需关注一个序列:通过目标检测重新思考视觉中的 Transformer 中提出。YOLOS 提议只需针对对象检测利用纯净的 视觉 Transformer (ViT),灵感来自 DETR。结果表明,仅具有编码器的基础大小 Transformer 也可针对 COCO 实现 42 个 AP,类似于 DETR 以及 Faster R-CNN 等更为复杂化的框架。

论文摘要如下

Transformer 只需从纯粹的序列到序列的角度,就能在了解有关 2D 空间结构的最少知识的情况下,执行 2D 对象和区域级别的识别吗?为了回答这个问题,我们提出了 YOLOS,这是一系列基于始祖 Vision Transformer 的对象检测模型,几乎没有修改、区域先验,以及目标任务的归纳偏置。我们发现,仅在中等大小的 ImageNet-1k 数据集上接受过预训练的 YOLOS 已然能够在具有挑战性的 COCO 对象检测基准上实现相当高的性能,例如,直接从 BERT-Base 架构采用 YOLOS-Base 可以获得 42.0 个 COCO val 盒子 AP。我们还通过 YOLOS 讨论了当前视觉中 Transformer 的预训练方案和模型扩展策略的影响与限制。

drawing YOLOS 架构。摘自 原始论文

此模型由 nielsr 贡献。可在此处找到原始代码:此处

使用缩放点积注意力(SDPA)

PyTorch 在 torch.nn.functional 内嵌了本地缩放点积注意力 (SDPA) 算子。此函数包含多种可根据输入和所用硬件应用的实现方式。请参阅 官方文档GPU 推断 页面了解更多信息。

在有可用实现的情况下,默认情况下 torch>=2.1.1 会使用 SDPA,但您也可以在 from_pretrained() 中设置 attn_implementation="sdpa",以明确请求使用 SDPA。

from transformers import AutoModelForObjectDetection
model = AutoModelForObjectDetection.from_pretrained("hustvl/yolos-base", attn_implementation="sdpa", torch_dtype=torch.float16)
...

为了获得最佳加速,我们建议使用半精度加载模型(例如 torch.float16torch.bfloat16)。

在使用 float32hustvl/yolos-base 模型的本地基准测试(A100-40GB,PyTorch 2.3.0,OS Ubuntu 22.04)中,我们看到推断过程中的加速如下。

批量大小 平均推断时间(毫秒),急迫模式 平均推断时间(毫秒),sdpa 模型 加速,Sdpa / 急迫(x)
1 106 76 1.39
2 154 90 1.71
4 222 116 1.91
8 368 168 2.19

资源

以下列出了一些官方 Hugging Face 与社区(标记为 🌎)资源,可帮助您开始使用 YOLOS。

目标检测

如果您有兴趣提交一项资源以便将其包含在此,请随时提交拉取请求,我们会审阅它!该资源最好是演示新内容,而不是复制现有资源。

使用 YolosImageProcessor 为模型准备图像(和可选目标)。与 DETR 相反,YOLOS 不需要创建 pixel_mask

YolosConfig

transformers.YolosConfig

< >

( hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 initializer_range = 0.02 layer_norm_eps = 1e-12 image_size = [512, 864] patch_size = 16 num_channels = 3 qkv_bias = True num_detection_tokens = 100 use_mid_position_embeddings = True auxiliary_loss = False class_cost = 1 bbox_cost = 5 giou_cost = 2 bbox_loss_coefficient = 5 giou_loss_coefficient = 2 eos_coefficient = 0.1 **kwargs )

参数

  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化层的尺寸。
  • num_attention_heads (int, 可选,默认为 12) — Transformer 编码器中每个注意力层中的注意力头的数量。
  • intermediate_size (int, 可选,默认为 3072) — Transformer 编码器中“中级”(即,前馈)层的维度。
  • hidden_act (strfunction可选,默认为 "gelu") — 编码器和池化器的非线性激活功能(函数或字符串)。如果为字符串,则支持 "gelu""relu""selu""gelu_new"
  • hidden_dropout_prob (float可选,默认为 0.0) — 嵌入、编码器和池化器中所有完全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, 可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • initializer_range (float, 可选,默认为 0.02) — truncated_normal_initializer 的标准差,用于初始化所有权重矩阵。
  • 图像大小 (List[int]可选,默认为 [512, 864]) — 每个图像的大小(分辨率)。
  • 块大小 (int可选,默认为 16) — 每个块的大小(分辨率)。
  • 辅助损失 (bool可选,默认为 False) — 是否使用辅助解码损失(每个解码器层的损失)。
  • 类别成本 (float可选,默认为 1) — 匈牙利匹配成本中分类错误的相对权重。
  • giou_cost (float可选,默认为 2) — 在匈牙利匹配成本中,边界框的广义 IoU 损失的相对权重。
  • bbox_loss_coefficient (float可选,默认为 5) — 在目标检测损失中,L1 边界框损失的相对权重。
  • giou_loss_coefficient (float可选,默认为 2) — 对象检测损失中广义 IoU 损失的相对权重。
  • eos_coefficient (float可选,默认为 0.1) — 对象检测损失中“无对象” 类的相对分类权重。

这是存储YolosModel 配置的配置类。它用于根据指定的参数实例化 YOLOS 模型,定义模型架构。使用默认值实例化配置将产生类似于 YOLOS hustvl/yolos-base 架构的配置。

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

示例

>>> from transformers import YolosConfig, YolosModel

>>> # Initializing a YOLOS hustvl/yolos-base style configuration
>>> configuration = YolosConfig()

>>> # Initializing a model (with random weights) from the hustvl/yolos-base style configuration
>>> model = YolosModel(configuration)

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

YolosImageProcessor

class transformers.YolosImageProcessor

< >

( format: Union = <AnnotationFormat.COCO_DETECTION: 'coco_detection'> do_resize: bool = True 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_convert_annotations: Optional = None do_pad: bool = True pad_size: Optional = None **kwargs )

参数

  • format (str, 可选, 默认为 "coco_detection") — 注释的数据格式。其中之一为“coco_detection”或“coco_panoptic”。
  • do_resize (bool, optional, defaults to True) — 控制图像的(高度、宽度)尺寸是否调整到指定的 size。 可由 preprocess 方法中的 do_resize 参数覆盖。
  • size (Dict[str, int] optional, defaults to {"shortest_edge" -- 800, "longest_edge": 1333}): 调整大小后图像的 (height, width) 尺寸的大小。 可由 preprocess 方法中的 size 参数覆盖。 可用的选项为:
    • {"height": int, "width": int}:图像将调整到确切的大小 (height, width)。 不保留纵横比。
    • {"shortest_edge": int, "longest_edge": int}:图像将调整到最大尺寸,同时遵循纵横比,并保持最短边不短于 shortest_edge,保持最长边不长于 longest_edge
    • {"max_height": int, "max_width": int}:图像将调整到最大尺寸,同时遵循纵横比,并保持高度不高于 max_height,保持宽度不高于 max_width
  • 更改样本 (PILImageResampling, 可选,默认为 PILImageResampling.BILINEAR) — 如果重新调整图像大小,需要使用的重采样滤镜。
  • 进行比例调整 (布尔, 可选,默认为 true) — 控制是否按指定的比例因子 rescale_factor 对图像进行比例调整。可在 preprocess 方法中的 do_rescale 参数中覆盖。
  • rescale_factor (intfloat可选,默认为 1/255) — 如果重新缩放图片,要使用的缩放系数。可以通过 preprocess 方法中的 rescale_factor 参数覆盖。do_normalize — 控制是否对图片进行归一化。可以通过 preprocess 方法中的 do_normalize 参数覆盖。
  • image_meanfloatList[float]可选,默认为 IMAGENET_DEFAULT_MEAN)- 归一化图片时要使用的均值。可以是单个值,也可以是值列表,每个通道一个值。可以通过 preprocess 方法中的 image_mean 参数覆盖。
  • image_std (floatList[float]可选,默认为 IMAGENET_DEFAULT_STD) — 对图像进行归一化时使用的标准差值。可以是单个值或一组值,每个通道对应一个值。可以通过 preprocess 方法中的 image_std 参数覆盖。
  • do_pad (bool可选,默认为 True) — 控制是否填充图像。可以通过 preprocess 方法中的 do_pad 参数覆盖。如果为 True,将会在图像的底部和右侧使用零进行填充。如果提供了 pad_size,则图像将填充到指定的尺寸。否则,图像将填充到该批次的最大高度和宽度。
  • pad_size (Dict[str, int], 可选) — 将图像填充至的尺寸 {"height": int, "width" int}。必须大于预处理提供的任何图像尺寸。如果未提供 pad_size,图像将填充至批次中最大的高度和宽度。

构建 Detr 图像处理器。

预处理

< >

( images: Union annotations: Union = None return_segmentation_masks: bool = None masks_path: Union = None do_resize: Optional = None size: Optional = None resample = None do_rescale: Optional = None rescale_factor: Union = None do_normalize: Optional = None image_mean: Union = None image_std: Union = None do_convert_annotations: Optional = None do_pad: Optional = None format: Union = None return_tensors: Union = None data_format: Union = input_data_format: Union = None pad_size: Optional = None **kwargs )

参数

  • 图像 (ImageInput) — 要预处理的图像或图像批处理。期望一个或一批像素值在 0 到 255 之间的图像。如果传入像素值在 0 到 1 之间的图像,则设置 do_rescale=False
  • 注释 (AnnotationTypeList[AnnotationType]可选) — 与图像或图像批次关联的注释列表。如果注释用于对象检测,则注释应为具有以下键的词典:
    • “image_id”(int):图像 id。
    • “annotations”(List[Dict]):图像的注释列表。每个注释应为一个词典。一个图像可以没有注释,在这种情况下,列表应为空。如果注释用于分割,则注释应为具有以下键的词典:
    • “image_id”(int):图像 id。
    • “segments_info”(List[Dict]):图像的片段列表。每个片段应为一个词典。一个图像可以没有片段,在这种情况下,列表应为空。
    • “file_name”(str):图像的文件名称。
  • return_segmentation_masks (bool, 可选项,默认为 self.return_segmentation_masks) — 是否返回分割蒙版。
  • masks_path (strpathlib.Path可选项) — 包含分割蒙版的目录的路径。
  • 大小 (Dict[str, int] 可选,默认为 self.size) — 调整尺寸后的图像的(height, width) 尺寸。可用选项:
    • {"height": int, "width": int}: 将图像调整为确切的尺寸 (height, width)。不保留高宽比。
    • {"shortest_edge": int, "longest_edge": int}: 将图像调整为符合高宽比,并且保持最短边小于或等于 shortest_edge,最长边小于或等于 longest_edge 的最大尺寸。
    • {"max_height": int, "max_width": int}: 将图像调整为符合高宽比,并且保持高度小于或等于 max_height,宽度小于或等于 max_width 的最大尺寸。
  • 重采样 (PILImageResampling 可选,默认为 self.resample) — 调整图像大小时使用的重采样滤波器。
  • do_rescale (bool, 可选项,默认为 self.do_rescale) — 缩放图片。
  • rescale_factor (float, 可选项,默认为 self.rescale_factor) — 缩放图片时使用的缩放因子。
  • 执行归一化 (bool, 可选,默认为 self.do_normalize) — 是否对图像进行归一化。
  • 图像均值 (floatList[float], 可选,默认为 self.image_mean) — 对图像进行归一化时的均值。
  • do_convert_annotations (bool, 可选,默认为 self.do_convert_annotations) — 是否将标注转换为模型期望的格式。将边界框从格式 (top_left_x, top_left_y, width, height) 转换为 (center_x, center_y, width, height),并使用相对坐标。
  • do_pad (bool, 可选,默认为 self.do_pad) — 是否填充图像。如果为 True,则使用零填充图像的底部和右侧。如果提供了 pad_size,则图像将填充为指定尺寸。否则,图像将填充为批次的最大高度和宽度。
  • 格式 (strAnnotationFormat可选,默认为 self.format) — 注释格式
  • 返回张量 (strTensorType可选,默认为 self.return_tensors) — 返回张量的类型。如果为 None,将返回图像列表
  • data_format (strChannelDimension可选,默认为 self.data_format) — 图像的通道维度格式。如果没有提供,它将与输入图像相同。
  • input_data_format (ChannelDimensionstr可选) — 输入图像的通道维度格式。如果没有设置,则会从输入图像中推断通道维度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST:图像格式为 (height, width, num_channels)。
    • "none"ChannelDimension.NONE:图像格式为 (height, width)。
  • pad_size (Dict[str, int], 可选参数) — 将图像变为 {"height": int, "width" int} 大小的填充尺寸。该尺寸必须大于预处理阶段中提供的任何图像大小。如果未提供 pad_size,图像将填充为批处理中最大的高度和宽度。

预处理图像或一批图像,以便模型可以使用。

填充

< >

( 图像: 列表 注解: 可选值 = 无 常量值: 联合 = 0 返回像素掩码: 布尔 = 假 返回张量: 联合 = 无 数据格式: 可选值 = 无 输入数据格式: 联合 = 无 更新边界框: 布尔 = 真 填充尺寸: 可选值 = 无 )

参数

  • 图像 (np.ndarray) — 要填充的图像。
  • 注释 (List[Dict[str, any]]optional) — 要与图像一起填充的注释。如果提供,边界框将更新为匹配填充的图像。
  • 常数值 (floatIterable[float]optional) — 如果 mode“constant”,则用于填充的值。
  • return_tensors (strTensorType可选) — 将要返回的张量的类型。可以为以下选项之一:
    • 未设置:返回一个 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 (strChannelDimension可选) — 图像的通道维度格式。如果未提供,则将与输入图像相同。
  • input_data_format (ChannelDimensionstr, 可选) — 输入图像的通道维度格式。如果未提供,系统会推断出来。
  • update_bboxes (bool, 可选,默认为 True) — 是否更新注释中的边框以匹配填充后的图像。如果未将边框转换为相对坐标和 (centre_x, centre_y, width, height) 格式,则不会更新边框。
  • pad_size (Dict[str, int], 可选) — 将图像填充到的尺寸 {"height": int, "width" int}。必须大于预处理提供的任何图像尺寸。如果未提供 pad_size,则图像将被填充到批次中最大的高度和宽度。

用零填充图像批次的底部和右侧,使尺寸为批次中最大高度和宽度,并可选择返回其对应的像素蒙版。

post_process_object_detection

< >

( 输出 阈值: float = 0.5 目标大小: Union = None ) List[Dict]

参数

  • 输出 (YolosObjectDetectionOutput) — 模型的原始输出。
  • 阈值 (float可选) — 保留对象识别结果的评分阈值。
  • target_sizes (torch.TensorList[Tuple[int, int]]可选) — 形状为 (batch_size, 2) 的张量或包含批次中每个图像的目标大小 (height, width) 的元组列表 (Tuple[int, int])。如果未设置,则不会调整预测结果的大小。

返回

列表[字典]

一个字典列表,每个字典包含模型预测的批次中的图像的分数、标签和边框。

YolosForObjectDetection 的原始输出转换为 (top_left_x,top_left_y,bottom_right_x,bottom_right_y) 格式的最终边框。仅支持 PyTorch。

YolosFeatureExtractor

transformers.YolosFeatureExtractor

< >

( *args **kwargs )

__call__

< >

( images **kwargs )

预处理图像或一批图像。

填充

< >

( 图像: 列表 注解: 可选值 = 无 常量值: 联合 = 0 返回像素掩码: 布尔 = 假 返回张量: 联合 = 无 数据格式: 可选值 = 无 输入数据格式: 联合 = 无 更新边界框: 布尔 = 真 填充尺寸: 可选值 = 无 )

参数

  • 图像 (np.ndarray) — 需要填充图像。
  • constant_values (floatIterable[float]可选) — 如果 mode“constant”,则用于填充的值。
  • return_pixel_mask (bool可选,默认为 True) — 是否返回像素掩码。
  • return_tensors (strTensorType可选) — 要返回的张量类型。可以是以下之一:
    • 未设置:返回 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 (strChannelDimension可选) — 图像的通道维度格式。如果没有提供,它将与输入图像相同。
  • input_data_format (ChannelDimensionstr可选) — 输入图像的通道维格式。如果未提供,它将被推断。
  • update_bboxes (bool可选,默认为 True) — 是否将注释中的边界框更新为与填充图像匹配。如果边界框尚未转换为相对坐标和 (centre_x, centre_y, width, height) 格式,则不会更新边界框。
  • pad_size (Dict[str, int], 可选) — 将图像填充到的尺寸{"height": int, "width" int}。大小必须大于为预处理提供的任何图像尺寸。如果未提供 pad_size,则会对图像填充为一批中最大的高度和宽度。

用零填充图像批次的底部和右侧,使尺寸为批次中最大高度和宽度,并可选择返回其对应的像素蒙版。

post_process_object_detection

< >

( 输出 阈值: float = 0.5 目标大小: Union = None ) List[Dict]

参数

  • outputs (YolosObjectDetectionOutput) — 模型原始输出。
  • threshold (float可选) — 保留对象检测预测的得分阈值。
  • target_sizes (torch.TensorList[Tuple[int, int]]可选) —形状为 (batch_size, 2) 的张量或包含批处理中每个图像目标大小 (height, width) 的元组列表(Tuple[int, int])。如果未设置,将不会调整预测大小。

返回

列表[字典]

一个字典列表,每个字典包含模型预测的批次中的图像的分数、标签和边框。

YolosForObjectDetection 的原始输出转换为 (top_left_x,top_left_y,bottom_right_x,bottom_right_y) 格式的最终边框。仅支持 PyTorch。

YolosModel

transformers.YolosModel

< >

( config: YolosConfig add_pooling_layer: bool = True )

参数

  • config (YolosConfig) — 模型的配置类,其中包含模型的所有参数。通过配置文件初始化并不会加载模型的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。

一个没有任何具体头的裸 YOLOS 模型 transformer,输出原始隐藏状态。此模型是 PyTorch torch.nn.Module 子类。像使用普通的 PyTorch 模块一样使用它,并参考 PyTorch 文档了解与一般用法和行为有关的所有问题。

前向

< >

( pixel_values: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

参数

  • 像素值 (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 像素值。可使用 AutoImageProcessor 获取像素值。有关详细信息,请参见 YolosImageProcessor.call()
  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 掩码,用于将自注意力模块的选定头部无效化。在 [0, 1] 范围内选择的掩码值:

    • 1 表示头部未掩盖
    • 0 表示头部已掩盖
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dict (bool, optional) — 是否返回ModelOutput而非普通元组。

返回

transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

一个transformers.modeling_outputs.BaseModelOutputWithPoolingtorch.FloatTensor元组(如果传递了return_dict=False或在config.return_dict=False时)包含各种元素,具体取决于配置(YolosConfig)和输入。

  • last_hidden_state (形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor) — 模型的最后一层的输出处隐藏状态的序列。

  • pooler_output (形状为(batch_size, hidden_size)torch.FloatTensor) — 经过用于辅助预训练任务的层进一步处理后,序列中第一个标记(分类标记)的最后层隐藏状态。例如,对于 BERT 系列模型,它会在使用线性层和 tanh 激活函数处理后返回分类标记。线性层权重在预训练期间从下一句预测(分类)目标中进行训练。

  • hidden_states (tuple(torch.FloatTensor), 可选, 在传递了output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(一个表示嵌入输出,如果该模型具有嵌入层 + 一个表示每一层的输出)。

    该模型在每一层的输出处的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 在传递了output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每一层一个)。

    注意力 softmax 之后的注意力权重,用于计算自注意力 heads 中的加权平均。

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

尽管此函数中需要定义前向传播的配方,但之后您应该调用模块实例,而不是调用此实例,因为前者负责运行预处理和后处理步骤,而后者则会默默忽略这些步骤。

示例

>>> from transformers import AutoImageProcessor, YolosModel
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image", trust_remote_code=True)
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("hustvl/yolos-small")
>>> model = YolosModel.from_pretrained("hustvl/yolos-small")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 3401, 384]

YolosForObjectDetection

class transformers.YolosForObjectDetection

< >

( config: YolosConfig )

参数

  • config (YolosConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化时不会加载与该模型相关联的权重,而只会加载配置。查看 from_pretrained() 方法,以加载模型权重。

YOLOS 模型(包含一个 ViT 编码器),其顶部是目标检测头,适用于 COCO 检测等任务。

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

前向

< >

( pixel_values: FloatTensor labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) transformers.models.yolos.modeling_yolos.YolosObjectDetectionOutputtuple(torch.FloatTensor)

参数

  • pixel_values (形状为 (batch_size, num_channels, height, width)torch.FloatTensor) — 像素值。可以使用 AutoImageProcessor 获取像素值。有关详情,请参阅 YolosImageProcessor.call()
  • head_mask (torch.FloatTensor 形状为 (num_heads,)(num_layers, num_heads)可选) — 屏蔽自注意力模块的选定头的掩模。在 [0, 1] 中选择的掩模值:

    • 1 表示头部未屏蔽
    • 0 表示头部已屏蔽
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅已返回张量中的attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • 标签 (List[Dict]长度为(batch_size,),可选) — 用于计算二部匹配损失的标签。字典列表,每个字典包含至少以下 2 个键:'class_labels''boxes'(分别为批次中图像的类别标签和边界框)。类别标签本身应该是一个长度为(图像中边界框数目,)torch.LongTensor,边界框为形状为(图像中边界框数目,4)torch.FloatTensor

返回

transformers.models.yolos.modeling_yolos.YolosObjectDetectionOutputtuple(torch.FloatTensor)

transformers.models.yolos.modeling_yolos.YolosObjectDetectionOutputtorch.FloatTensor元组(如果 return_dict=False 传入或当 config.return_dict=False)包含根据配置(YolosConfig)和输入不同的各种元素。

  • 损失 (形状为(1,)torch.FloatTensor,可选,当提供标签时返回)) — 总损失,为用于类别预测的负对数似然(交叉熵)和边界框损失的线性组合。后者定义为 L1 损失和广义尺度不变 IoU 损失的线性组合。
  • 损失字典 (Dict,可选) — 包含各个损失的字典。用于记录。
  • logits (形状为(batch_size, num_queries, num_classes + 1)torch.FloatTensor) — 所有查询的分类逻辑(包括无对象)。
  • pred_boxes (形状为(batch_size, num_queries, 4)torch.FloatTensor) — 所有查询的归一化框坐标,表示为 (center_x, center_y, width, height)。这些值在 [0, 1] 内归一化,相对于批次中每一图像的大小(忽略可能的填充)。你可以使用 post_process() 来检索未归一化的边界框。
  • auxiliary_outputslist[Dict]可选)—可选,仅在激活辅助损失时返回(即 config.auxiliary_loss 设置为 True)以及提供标签时返回。它是一个字典列表,包含每个解码器层上述两个键(logitspred_boxes)。
  • last_hidden_state(形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选)—模型解码器最后一层输出的隐藏状态序列。
  • hidden_statestuple(torch.FloatTensor)可选,在传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回)—形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每一层的输出)。模型每一层输出处的隐藏状态加上可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,在传递 output_attentions=Trueconfig.output_attentions=True 时返回)—形状为 (batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor 元组(每一层一个)。注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

YolosForObjectDetection 前向方法覆盖了 __call__ 特殊方法。

尽管此函数中需要定义前向传播的配方,但之后您应该调用模块实例,而不是调用此实例,因为前者负责运行预处理和后处理步骤,而后者则会默默忽略这些步骤。

示例

>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection
>>> import torch
>>> from PIL import Image
>>> import requests

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> image_processor = AutoImageProcessor.from_pretrained("hustvl/yolos-tiny")
>>> model = AutoModelForObjectDetection.from_pretrained("hustvl/yolos-tiny")

>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)

>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([image.size[::-1]])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)[
...     0
... ]

>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
...     box = [round(i, 2) for i in box.tolist()]
...     print(
...         f"Detected {model.config.id2label[label.item()]} with confidence "
...         f"{round(score.item(), 3)} at location {box}"
...     )
Detected remote with confidence 0.991 at location [46.48, 72.78, 178.98, 119.3]
Detected remote with confidence 0.908 at location [336.48, 79.27, 368.23, 192.36]
Detected cat with confidence 0.934 at location [337.18, 18.06, 638.14, 373.09]
Detected cat with confidence 0.979 at location [10.93, 53.74, 313.41, 470.67]
Detected remote with confidence 0.974 at location [41.63, 72.23, 178.09, 119.99]
< > 更新在GitHub上