Transformers 文档

YOLOS

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2021 年 6 月 1 日在 HF 论文中发布,并于 2022 年 5 月 2 日贡献给 Hugging Face Transformers。

FlashAttention SDPA

YOLOS

YOLOS 使用 视觉 Transformer (ViT) 进行目标检测,仅需极少的修改和区域先验。它能够实现与专门的目标检测模型和框架相媲美的性能,且具备 2D 空间结构知识。

您可以在 HUST Vision Lab 组织下找到所有原始的 YOLOS 检查点。

drawing YOLOS 架构。摘自原始论文

该模型由 nielsr 贡献。点击右侧边栏中的 YOLOS 模型,获取关于如何将 YOLOS 应用于不同目标检测任务的更多示例。

下面的示例演示了如何使用 PipelineAutoModel 类来检测对象。

流水线
Automodel
from transformers import pipeline


detector = pipeline(
    task="object-detection",
    model="hustvl/yolos-base",
    device=0
)
detector("https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png")

注意事项

  • 使用 YolosImageProcessor 为模型准备图像(以及可选的目标)。与 DETR 不同,YOLOS 不需要 pixel_mask

资源

YolosConfig

class transformers.YolosConfig

< >

( 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 = 768 num_hidden_layers: int = 12 num_attention_heads: int = 12 intermediate_size: int = 3072 hidden_act: str = 'gelu' hidden_dropout_prob: float | int = 0.0 attention_probs_dropout_prob: float | int = 0.0 initializer_range: float = 0.02 layer_norm_eps: float = 1e-12 image_size: list[int] | tuple[int, ...] = (512, 864) patch_size: int | list[int] | tuple[int, int] = 16 num_channels: int = 3 qkv_bias: bool = True num_detection_tokens: int = 100 use_mid_position_embeddings: bool = True auxiliary_loss: bool = False class_cost: int = 1 bbox_cost: int = 5 giou_cost: int = 2 bbox_loss_coefficient: int = 5 giou_loss_coefficient: int = 2 eos_coefficient: float = 0.1 )

参数

  • hidden_size (int, optional, 默认值为 768) — 隐藏层表示的维度。
  • num_hidden_layers (int, optional, 默认值为 12) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int, optional, 默认值为 12) — Transformer 解码器中每个注意力层的注意力头数。
  • intermediate_size (int, optional, 默认值为 3072) — MLP 表示的维度。
  • hidden_act (str, optional, 默认值为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如:"gelu", "relu", "silu" 等。
  • hidden_dropout_prob (Union[float, int], optional, 默认值为 0.0) — 嵌入、编码器和池化器中所有全连接层的丢弃概率。
  • attention_probs_dropout_prob (Union[float, int], optional, 默认值为 0.0) — 注意力概率的丢弃比率。
  • initializer_range (float, optional, 默认值为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, optional, 默认值为 1e-12) — 层归一化层使用的 epsilon 值。
  • image_size (Union[list[int], tuple[int, ...]], optional, 默认值为 (512, 864)) — 每个图像的大小(分辨率)。
  • patch_size (Union[int, list[int], tuple[int, int]], optional, 默认值为 16) — 每个块的大小(分辨率)。
  • num_channels (int, optional, 默认值为 3) — 输入通道的数量。
  • qkv_bias (bool, optional, 默认值为 True) — 是否为查询、键和值添加偏置。
  • num_detection_tokens (int, optional, 默认值为 100) — 检测令牌的数量。
  • use_mid_position_embeddings (bool, optional, 默认值为 True) — 是否使用中间层位置编码。
  • auxiliary_loss (bool, optional, 默认值为 False) — 是否使用辅助解码损失(每一层解码器处的损失)。
  • class_cost (int, optional, 默认值为 1) — 匈牙利匹配损失中分类错误的相对权重。
  • bbox_cost (int, optional, 默认值为 5) — 匈牙利匹配损失中 L1 边界框错误的相对权重。
  • giou_cost (int, optional, 默认值为 2) — 匈牙利匹配损失中广义 IoU 损失的相对权重。
  • bbox_loss_coefficient (int, optional, 默认值为 5) — 全景分割损失中 L1 边界框损失的相对权重。
  • giou_loss_coefficient (int, optional, 默认值为 2) — 全景分割损失中广义 IoU 损失的相对权重。
  • eos_coefficient (float, optional, 默认值为 0.1) — 目标检测损失中“无目标”类的相对分类权重。

这是用于存储 YolosModel 配置的配置类。它用于根据指定的参数实例化 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

< >

( **kwargs: typing_extensions.Unpack[transformers.models.yolos.image_processing_yolos.YolosImageProcessorKwargs] )

参数

  • format (str, kwargs, optional, 默认值为 AnnotationFormat.COCO_DETECTION) — 注释的数据格式。可以是 “coco_detection” 或 “coco_panoptic”。
  • do_convert_annotations (bool, kwargs, optional, 默认值为 True) — 控制是否将注释转换为 YOLOS 模型预期的格式。将边界框转换为 (center_x, center_y, width, height) 格式,并在 [0, 1] 范围内。可以由 preprocess 方法中的 do_convert_annotations 参数覆盖。
  • **kwargs (ImagesKwargs, optional) — 其他图像预处理选项。模型特定的 kwargs 已在上方列出;请参阅 TypedDict 类以获取支持的参数的完整列表。

构建一个 YolosImageProcessor 图像处理器。

preprocess

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] annotations: dict[str, int | str | list[dict]] | list[dict[str, int | str | list[dict]]] | None = None return_segmentation_masks: bool | None = None masks_path: str | pathlib.Path | None = None **kwargs: typing_extensions.Unpack[transformers.models.yolos.image_processing_yolos.YolosImageProcessorKwargs] ) ~image_processing_base.BatchFeature

参数

  • images (Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]) — 要预处理的图像。期望单个或一批像素值在 0 到 255 之间的图像。如果传入像素值在 0 到 1 之间的图像,请设置 do_rescale=False
  • annotations (AnnotationTypelist[AnnotationType], optional) — 根据应用于图像的填充进行变换的注释。
  • return_segmentation_masks (bool, optional, 默认值为 self.return_segmentation_masks) — 是否返回分割掩码。
  • masks_path (strpathlib.Path, optional) — 包含分割掩码的目录路径。
  • format (str, kwargs, optional, 默认值为 AnnotationFormat.COCO_DETECTION) — 注释的数据格式。可以是 “coco_detection” 或 “coco_panoptic”。
  • do_convert_annotations (bool, kwargs, optional, 默认值为 True) — 控制是否将注释转换为 YOLOS 模型预期的格式。将边界框转换为 (center_x, center_y, width, height) 格式,并在 [0, 1] 范围内。可以由 preprocess 方法中的 do_convert_annotations 参数覆盖。
  • return_tensors (strTensorType, optional) — 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。
  • **kwargs (ImagesKwargs, optional) — 其他图像预处理选项。模型特定的 kwargs 已在上方列出;请参阅 TypedDict 类以获取支持的参数的完整列表。

返回

~image_processing_base.BatchFeature

  • data (dict) — 由 call 方法返回的列表/数组/张量字典(“pixel_values”等)。
  • tensor_type (Union[None, str, TensorType], optional) — 您可以在此处提供 tensor_type 以在初始化时将整数列表转换为 PyTorch/Numpy 张量。

YolosImageProcessorPil

class transformers.YolosImageProcessorPil

< >

( **kwargs: typing_extensions.Unpack[transformers.models.yolos.image_processing_pil_yolos.YolosImageProcessorKwargs] )

参数

  • format (str, kwargs, optional, 默认值为 AnnotationFormat.COCO_DETECTION) — 注释的数据格式。可以是 “coco_detection” 或 “coco_panoptic”。
  • do_convert_annotations (bool, kwargs, optional, 默认值为 True) — 控制是否将注释转换为 YOLOS 模型预期的格式。将边界框转换为 (center_x, center_y, width, height) 格式,并在 [0, 1] 范围内。可以由 preprocess 方法中的 do_convert_annotations 参数覆盖。
  • **kwargs (ImagesKwargs, optional) — 其他图像预处理选项。模型特定的 kwargs 已在上方列出;请参阅 TypedDict 类以获取支持的参数的完整列表。

构建一个 YolosImageProcessor 图像处理器。

preprocess

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] annotations: dict[str, int | str | list[dict]] | list[dict[str, int | str | list[dict]]] | None = None return_segmentation_masks: bool | None = None masks_path: str | pathlib.Path | None = None **kwargs: typing_extensions.Unpack[transformers.models.yolos.image_processing_pil_yolos.YolosImageProcessorKwargs] ) ~image_processing_base.BatchFeature

参数

  • images (Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]) — 要预处理的图像。期望单个或一批像素值在 0 到 255 之间的图像。如果传入像素值在 0 到 1 之间的图像,请设置 do_rescale=False
  • annotations (AnnotationTypelist[AnnotationType], optional) — 根据应用于图像的填充进行变换的注释。
  • return_segmentation_masks (bool, optional, 默认值为 self.return_segmentation_masks) — 是否返回分割掩码。
  • masks_path (strpathlib.Path, optional) — 包含分割掩码的目录路径。
  • format (str, kwargs, optional, 默认值为 AnnotationFormat.COCO_DETECTION) — 注释的数据格式。可以是 “coco_detection” 或 “coco_panoptic”。
  • do_convert_annotations (bool, kwargs, optional, 默认值为 True) — 控制是否将注释转换为 YOLOS 模型预期的格式。将边界框转换为 (center_x, center_y, width, height) 格式,并在 [0, 1] 范围内。可以由 preprocess 方法中的 do_convert_annotations 参数覆盖。
  • return_tensors (strTensorType, optional) — 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。
  • **kwargs (ImagesKwargs, optional) — 其他图像预处理选项。模型特定的 kwargs 已在上方列出;请参阅 TypedDict 类以获取支持的参数的完整列表。

返回

~image_processing_base.BatchFeature

  • data (dict) — 由 call 方法返回的列表/数组/张量字典(“pixel_values”等)。
  • tensor_type (Union[None, str, TensorType], optional) — 您可以在此处提供 tensor_type 以在初始化时将整数列表转换为 PyTorch/Numpy 张量。

pad

< >

( image: ndarray padded_size: tuple annotation: dict[str, typing.Any] | None = None update_bboxes: bool = True fill: int = 0 )

post_process_object_detection

< >

( outputs threshold: float = 0.5 target_sizes: transformers.utils.generic.TensorType | list[tuple] = None ) list[Dict]

参数

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

返回

list[Dict]

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

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

YolosModel

class transformers.YolosModel

< >

( config: YolosConfig add_pooling_layer: bool = True )

参数

  • config (YolosConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
  • add_pooling_layer (bool, 可选, 默认为 True) — 是否添加池化层。

基础 Yolos 模型,输出原始隐藏状态,顶部没有任何特定头部。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( pixel_values: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) BaseModelOutputWithPoolingtuple(torch.FloatTensor)

参数

  • pixel_values (torch.Tensor, 形状为 (batch_size, num_channels, image_size, image_size), 可选) — 对应于输入图像的张量。像素值可以使用 YolosImageProcessor 获取。详情请参见 YolosImageProcessor.__call__() (processor_class 使用 YolosImageProcessor 处理图像)。

返回

BaseModelOutputWithPooling or tuple(torch.FloatTensor)

一个 BaseModelOutputWithPooling 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含取决于配置 (YolosConfig) 和输入的各种元素。

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

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • last_hidden_state (torch.FloatTensor, 形状为 (batch_size, sequence_length, 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, sequence_length, 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 后的注意力权重,用于计算自注意力头中的加权平均值。

示例

YolosForObjectDetection

class transformers.YolosForObjectDetection

< >

( config: YolosConfig )

参数

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

YOLOS 模型(由 ViT 编码器组成),顶部带有目标检测头部,用于 COCO 检测等任务。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( pixel_values: FloatTensor labels: list[dict] | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) YolosObjectDetectionOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor, 形状为 (batch_size, num_channels, image_size, image_size)) — 对应于输入图像的张量。像素值可以使用 YolosImageProcessor 获取。详情请参见 YolosImageProcessor.__call__() (processor_class 使用 YolosImageProcessor 处理图像)。
  • labels (list[Dict], 长度为 (batch_size,), 可选) — 用于计算二分匹配损失的标签。字典列表,每个字典至少包含以下 2 个键:'class_labels''boxes' (分别是批次中图像的类别标签和边界框)。类别标签本身应为长度为 (图像中边界框数量,)torch.LongTensor,而框应为形状为 (图像中边界框数量, 4)torch.FloatTensor

返回

YolosObjectDetectionOutputtuple(torch.FloatTensor)

一个 YolosObjectDetectionOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含取决于配置 (YolosConfig) 和输入的各种元素。

YolosForObjectDetection 的前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供labels时返回)) — 总损失,是类别预测的负对数似然(交叉熵)和边界框损失的线性组合。后者定义为 L1 损失和广义尺度不变 IoU 损失的线性组合。

  • loss_dict (Dict, 可选) — 包含各个损失的字典。用于日志记录。

  • logits (形状为 (batch_size, num_queries, num_classes + 1)torch.FloatTensor) — 所有查询的分类 logits(包括无对象)。

  • pred_boxes (torch.FloatTensor, 形状为 (batch_size, num_queries, 4)) — 所有查询的归一化框坐标,表示为 (center_x, center_y, width, height)。这些值在 [0, 1] 范围内归一化,相对于批次中每张图像的实际尺寸(忽略可能的填充)。可以使用 ~YolosImageProcessor.post_process 来检索非归一化的边界框。

  • auxiliary_outputs (list[Dict], optional) — 可选,仅在启用了辅助损失(即config.auxiliary_loss设置为True)且提供了标签时返回。它是一个字典列表,包含每个解码器层的上述两个键(logitspred_boxes)。

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

  • hidden_states (tuple[torch.FloatTensor]可选,在传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为 (batch_size, sequence_length, hidden_size)

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

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

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

示例

>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection
>>> import torch
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> 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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.