Transformers 文档
YOLOS
并获得增强的文档体验
开始使用
该模型于 2021 年 6 月 1 日在 HF 论文中发布,并于 2022 年 5 月 2 日贡献给 Hugging Face Transformers。
YOLOS
YOLOS 使用 视觉 Transformer (ViT) 进行目标检测,仅需极少的修改和区域先验。它能够实现与专门的目标检测模型和框架相媲美的性能,且具备 2D 空间结构知识。
您可以在 HUST Vision Lab 组织下找到所有原始的 YOLOS 检查点。
YOLOS 架构。摘自原始论文。该模型由 nielsr 贡献。点击右侧边栏中的 YOLOS 模型,获取关于如何将 YOLOS 应用于不同目标检测任务的更多示例。
下面的示例演示了如何使用 Pipeline 或 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。
资源
- 参考这些 笔记本,了解如何使用 YolosForObjectDetection 在自定义数据集上进行推理和微调。
YolosConfig
class transformers.YolosConfig
< source >( 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.configYolosImageProcessor
class transformers.YolosImageProcessor
< source >( **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
< source >( 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 (
AnnotationType或list[AnnotationType], optional) — 根据应用于图像的填充进行变换的注释。 - return_segmentation_masks (
bool, optional, 默认值为self.return_segmentation_masks) — 是否返回分割掩码。 - masks_path (
str或pathlib.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 (
str或 TensorType, 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
< source >( **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
< source >( 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 (
AnnotationType或list[AnnotationType], optional) — 根据应用于图像的填充进行变换的注释。 - return_segmentation_masks (
bool, optional, 默认值为self.return_segmentation_masks) — 是否返回分割掩码。 - masks_path (
str或pathlib.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 (
str或 TensorType, 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.Tensor或list[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] ) → BaseModelOutputWithPooling 或 tuple(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] ) → YolosObjectDetectionOutput 或 tuple(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。
返回
YolosObjectDetectionOutput 或 tuple(torch.FloatTensor)
一个 YolosObjectDetectionOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含取决于配置 (YolosConfig) 和输入的各种元素。
YolosForObjectDetection 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
loss (
torch.FloatTensorof 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)且提供了标签时返回。它是一个字典列表,包含每个解码器层的上述两个键(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时返回) —torch.FloatTensor元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
attentions (
tuple[torch.FloatTensor],可选,在传入output_attentions=True或config.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]