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 的预训练方案和模型扩展策略的影响与限制。
YOLOS 架构。摘自 原始论文。使用缩放点积注意力(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.float16
或 torch.bfloat16
)。
在使用 float32
和 hustvl/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。
- 所有示例笔记本说明了对 _自定义数据集上的 YolosForObjectDetection 进行推理 + 微调,可以 在此处 找到。
- 使用 Trainer 或 加速 调优 YolosForObjectDetection 的脚本,可以 在此处 找到。
- 另请参阅: 目标检测任务指南
如果您有兴趣提交一项资源以便将其包含在此,请随时提交拉取请求,我们会审阅它!该资源最好是演示新内容,而不是复制现有资源。
使用 YolosImageProcessor 为模型准备图像(和可选目标)。与 DETR 相反,YOLOS 不需要创建 pixel_mask
。
YolosConfig
类 transformers.YolosConfig
< source >( 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) — 编码器层和池化层的尺寸。 - intermediate_size (
int
, 可选,默认为 3072) — Transformer 编码器中“中级”(即,前馈)层的维度。 - hidden_act (
str
或function
,可选,默认为"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 的标准差,用于初始化所有权重矩阵。 - 块大小 (
int
,可选,默认为 16) — 每个块的大小(分辨率)。 - 类别成本 (
float
,可选,默认为 1) — 匈牙利匹配成本中分类错误的相对权重。 - 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 toTrue
) — 控制图像的(高度、宽度)尺寸是否调整到指定的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 (
int
或float
,可选,默认为1/255
) — 如果重新缩放图片,要使用的缩放系数。可以通过preprocess
方法中的rescale_factor
参数覆盖。do_normalize
— 控制是否对图片进行归一化。可以通过preprocess
方法中的do_normalize
参数覆盖。 - image_mean(
float
或List[float]
,可选,默认为IMAGENET_DEFAULT_MEAN
)- 归一化图片时要使用的均值。可以是单个值,也可以是值列表,每个通道一个值。可以通过preprocess
方法中的image_mean
参数覆盖。 - image_std (
float
或List[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 =
参数
- 图像 (
ImageInput
) — 要预处理的图像或图像批处理。期望一个或一批像素值在 0 到 255 之间的图像。如果传入像素值在 0 到 1 之间的图像,则设置do_rescale=False
。 - 注释 (
AnnotationType
或List[AnnotationType]
,可选) — 与图像或图像批次关联的注释列表。如果注释用于对象检测,则注释应为具有以下键的词典:- “image_id”(
int
):图像 id。 - “annotations”(
List[Dict]
):图像的注释列表。每个注释应为一个词典。一个图像可以没有注释,在这种情况下,列表应为空。如果注释用于分割,则注释应为具有以下键的词典: - “image_id”(
int
):图像 id。 - “segments_info”(
List[Dict]
):图像的片段列表。每个片段应为一个词典。一个图像可以没有片段,在这种情况下,列表应为空。 - “file_name”(
str
):图像的文件名称。
- “image_id”(
- return_segmentation_masks (
bool
, 可选项,默认为 self.return_segmentation_masks) — 是否返回分割蒙版。 - masks_path (
str
或pathlib.Path
,可选项) — 包含分割蒙版的目录的路径。 - 重采样 (
PILImageResampling
可选,默认为 self.resample) — 调整图像大小时使用的重采样滤波器。 - do_rescale (
bool
, 可选项,默认为 self.do_rescale) — 缩放图片。 - rescale_factor (
float
, 可选项,默认为 self.rescale_factor) — 缩放图片时使用的缩放因子。 - 执行归一化 (
bool
, 可选,默认为 self.do_normalize) — 是否对图像进行归一化。 - 图像均值 (
float
或List[float]
, 可选,默认为 self.image_mean) — 对图像进行归一化时的均值。 - do_pad (
bool
, 可选,默认为 self.do_pad) — 是否填充图像。如果为True
,则使用零填充图像的底部和右侧。如果提供了pad_size
,则图像将填充为指定尺寸。否则,图像将填充为批次的最大高度和宽度。 - 格式 (
str
或AnnotationFormat
,可选,默认为 self.format) — 注释格式 - 返回张量 (
str
或TensorType
,可选,默认为 self.return_tensors) — 返回张量的类型。如果为None
,将返回图像列表 - data_format (
str
或ChannelDimension
,可选,默认为 self.data_format) — 图像的通道维度格式。如果没有提供,它将与输入图像相同。 - input_data_format (
ChannelDimension
或str
,可选) — 输入图像的通道维度格式。如果没有设置,则会从输入图像中推断通道维度格式。可以是以下之一:"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) — 要与图像一起填充的注释。如果提供,边界框将更新为匹配填充的图像。 - 常数值 (
float
或Iterable[float]
,optional) — 如果mode
是“constant”
,则用于填充的值。 - data_format (
str
或ChannelDimension
,可选) — 图像的通道维度格式。如果未提供,则将与输入图像相同。 - input_data_format (
ChannelDimension
或str
, 可选) — 输入图像的通道维度格式。如果未提供,系统会推断出来。 - 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]
将 YolosForObjectDetection 的原始输出转换为 (top_left_x,top_left_y,bottom_right_x,bottom_right_y) 格式的最终边框。仅支持 PyTorch。
YolosFeatureExtractor
预处理图像或一批图像。
填充
< source > ( 图像: 列表 注解: 可选值 = 无 常量值: 联合 = 0 返回像素掩码: 布尔 = 假 返回张量: 联合 = 无 数据格式: 可选值 = 无 输入数据格式: 联合 = 无 更新边界框: 布尔 = 真 填充尺寸: 可选值 = 无 )
参数
- 图像 (
np.ndarray
) — 需要填充图像。 - return_pixel_mask (
bool
,可选,默认为True
) — 是否返回像素掩码。 - return_tensors (
str
或TensorType
,可选) — 要返回的张量类型。可以是以下之一:- 未设置:返回
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 (
str
或ChannelDimension
,可选) — 图像的通道维度格式。如果没有提供,它将与输入图像相同。 - input_data_format (
ChannelDimension
或str
,可选) — 输入图像的通道维格式。如果未提供,它将被推断。 - 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]
将 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.BaseModelOutputWithPooling 或 tuple(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.BaseModelOutputWithPooling或tuple(torch.FloatTensor)
一个transformers.modeling_outputs.BaseModelOutputWithPooling或torch.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=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个表示嵌入输出,如果该模型具有嵌入层 + 一个表示每一层的输出)。该模型在每一层的输出处的隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 在传递了output_attentions=True
或config.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.YolosObjectDetectionOutput
或 tuple(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.YolosObjectDetectionOutput
或tuple(torch.FloatTensor)
transformers.models.yolos.modeling_yolos.YolosObjectDetectionOutput
或torch.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_outputs(
list[Dict]
,可选)—可选,仅在激活辅助损失时返回(即config.auxiliary_loss
设置为True
)以及提供标签时返回。它是一个字典列表,包含每个解码器层上述两个键(logits
和pred_boxes
)。 - last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可选)—模型解码器最后一层输出的隐藏状态序列。 - hidden_states(
tuple(torch.FloatTensor)
,可选,在传递output_hidden_states=True
或config.output_hidden_states=True
时返回)—形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每一层的输出)。模型每一层输出处的隐藏状态加上可选的初始嵌入输出。 - attentions(
tuple(torch.FloatTensor)
,可选,在传递output_attentions=True
或config.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]