Transformers documentation

PP-DocLayoutV4

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2026-10-08 贡献至 Hugging Face Transformers。

PP-DocLayoutV4

概述

PP-DocLayoutV4 是一个端到端的文档版面分析模型,它通过单次前向传播即可预测每个版面元素的类型、包围该元素的四边形,以及用于解码阅读顺序的 logits。

模型架构

PP-DocLayoutV4 沿用了其前代模型的 RT-DETR 架构——包括 HGNetV2 主干网络、AIFI 混合编码器以及可变形解码器——并进行了三项改动:

  • 使用四边形而非掩码。 PPDocLayoutV3ForObjectDetection 会为每个查询预测一个分割掩码,并为其拟合一个多边形。PP-DocLayoutV4 完全去除了掩码分支,直接回归一个四点四边形,在 sigmoid 空间中编码为 [center_x, center_y, dx1, dy1, ..., dx4, dy4]。这可以在不引入掩码头开销的情况下处理倾斜和透视变形的文档,并且不再需要步长为 4 的骨干网络特征。
  • 各层解耦的头部。 每个解码器层都拥有自己的边界框和分类头部,而不是与编码器共享同一个头部。
  • 两个阅读顺序头加上一个融合步骤。 除了 V3 中的相对顺序头(反对称:“i 是否在 j 之前被阅读?”)之外,还有一个后继头(ROOR:“j 是否直接跟随在 i 之后?”)。PPDocLayoutV4S2RFusion 将后继矩阵的衰减传递闭包折叠回相对顺序 logits 中。

阅读顺序并非在模型内部解码。PPDocLayoutV4ForObjectDetection 返回原始的 relative_order_logits 和 successor_order_logits,而 post_process_object_detection() 通过对后继矩阵进行阈值处理将其转换为有向无环图(DAG),消除环路,对每个连通分量进行拓扑排序,并根据相对顺序投票对各个分量进行排序,从而得到排名。

用法

post_process_object_detection() 返回的结果已按阅读顺序排序。每个结果都包含 polygon_points —— 一个形状为 (num_boxes, 4, 2) 的张量,表示按左上、右上、右下、左下顺序回归得到的四个角点 —— 以及 boxes,即包围每个四边形的轴对齐矩形,还有 order_seq,表示每个框的 0 起始排名。下面的 AutoModel 示例直接打印 order_seq,其他示例则打印其在排序列表中的 1 起始位置,该位置为 order_seq + 1,除非某个查询在多个标签下被保留。

Pipeline
AutoModel

Pipeline 会按照返回列表的顺序保留阅读顺序,但会将每个检测框展平为一个分数、一个标签和一个整数边界框。请使用下方的 AutoModel 路径来获取四边形和 order_seq。

from transformers import pipeline
from transformers.image_utils import load_image


image = load_image("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/layout_demo.jpg")
layout_detector = pipeline("object-detection", model="PaddlePaddle/PP-DocLayoutV4_safetensors")
results = layout_detector(image)
for idx, res in enumerate(results):
    print(f"Order {idx + 1}: {res}")

批量推理

传入一个图像列表,并为每张图像指定一个目标尺寸。每张图像的读取顺序将单独解码。

from transformers import AutoImageProcessor, AutoModelForObjectDetection
from transformers.image_utils import load_image


model_path = "PaddlePaddle/PP-DocLayoutV4_safetensors"
model = AutoModelForObjectDetection.from_pretrained(model_path, device_map="auto")
image_processor = AutoImageProcessor.from_pretrained(model_path)

image = load_image("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/layout_demo.jpg")
inputs = image_processor(images=[image, image], return_tensors="pt").to(device=model.device, dtype=model.dtype)

outputs = model(**inputs)
results = image_processor.post_process_object_detection(outputs, target_sizes=[image.size[::-1]] * 2)
for result in results:
    print("result:")
    for idx, (score, label_id, box) in enumerate(zip(result["scores"], result["labels"], result["boxes"])):
        box = [round(i, 2) for i in box.tolist()]
        print(f"Order {idx + 1}: {model.config.id2label[label_id.item()]}, score: {score.item():.2f}, box: {box}")

PPDocLayoutV4ForObjectDetection

class transformers.PPDocLayoutV4ForObjectDetection

< >

( config: PPDocLayoutV4Config )

参数

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

PP-DocLayoutV4 模型(由骨干网络和编码器-解码器组成)输出四边形、类别 logits 和阅读顺序 logits,用于文档版面分析等任务。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → PPDocLayoutV4ForObjectDetectionOutput or tuple(torch.Tensor)

参数

  • pixel_values(形状为 (batch_size, num_channels, image_size, image_size) 的 torch.Tensor)— 对应于输入图像的张量。可以使用 image_processor_class 获取像素值。有关详细信息,请参阅 image_processor_class.__call__(processor_class 使用 image_processor_class 来处理图像)。
  • pixel_mask (torch.LongTensor 形状为 (batch_size, height, width), 可选) — 用于避免对填充像素值执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 对于真实的像素(即未被掩码的像素),值为 1,
    • 对于填充像素(即 被屏蔽 的像素),值为 0。

    什么是注意力掩码?

  • encoder_outputs (torch.Tensor, 可选) — 元组由 (last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size), 可选) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
  • labels(list[Dict],长度为 (batch_size,),可选) — 不支持:PP-DocLayoutV4 在 Transformers 中仅支持推理。

返回值

PPDocLayoutV4ForObjectDetectionOutput 或 tuple(torch.Tensor)

PPDocLayoutV4ForObjectDetectionOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(None)和输入。

PPDocLayoutV4ForObjectDetection 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • logits(形状为 (batch_size, num_queries, config.num_labels) 的 torch.Tensor)— 所有查询的分类 logits(不含 no-object)。

  • pred_boxes (torch.Tensor,形状为 (batch_size, num_queries, config.num_coords)) — 所有查询的归一化四边形,编码为 [center_x, center_y, dx1, dy1, ..., dx4, dy4],其中角点偏移量已平移 +0.5。使用 post_process_object_detection() 可获取未归一化的角点及其外接框。

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

  • intermediate_hidden_states(形状为 (batch_size, config.decoder_layers, num_queries, hidden_size) 的 torch.Tensor)— 堆叠的中间隐藏状态(解码器每一层的输出)。

  • intermediate_reference_points(形状为 (batch_size, config.decoder_layers, num_queries, config.num_coords) 的 torch.Tensor)— 堆叠的中间参考点(解码器每一层细化后的四边形)。

  • decoder_hidden_states (tuple[torch.Tensor],可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为 (batch_size, sequence_length, hidden_size)。

    解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • decoder_attentions(tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • cross_attentions (tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    解码器交叉注意力层在注意力 softmax 之后的注意力权重,用于在交叉注意力头中计算加权平均值。

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

  • encoder_hidden_states (tuple[torch.Tensor],可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为 (batch_size, sequence_length, hidden_size)。

    编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • encoder_attentions(tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • init_reference_points(形状为 (batch_size, num_queries, config.num_coords) 的 torch.Tensor)— 通过 Transformer 解码器传输的初始四边形参考点。

  • enc_topk_logits(形状为 (batch_size, num_queries, config.num_labels) 的 torch.Tensor)— 被选为解码器查询的编码器提案的类别 logits。

  • enc_topk_bboxes(形状为 (batch_size, num_queries, config.num_coords) 的 torch.Tensor)— 被选为解码器查询的编码器提案四边形。

  • enc_outputs_class(形状为 (batch_size, sequence_length, config.num_labels) 的 torch.Tensor)— 每个编码器提案的类别 logits。

  • enc_outputs_coord_logits(形状为 (batch_size, sequence_length, config.num_coords) 的 torch.Tensor) — 每个编码器提案的四元数 logits。

  • denoising_meta_values (dict,可选) — 用于去噪相关值的额外字典。

  • relative_order_logits(形状为 (batch_size, config.num_queries, config.num_queries) 的 torch.Tensor)— 成对相对阅读顺序 logits,经过可选的 S2R 融合处理。正的 relative_order_logits[i, j] 表示查询 i 在查询 j 之前被阅读。

  • successor_order_logits (torch.Tensor,形状为 (batch_size, config.num_queries, config.num_queries)) — 成对直接后继(ROOR)logits。正的 successor_order_logits[i, j] 表示查询 j 直接跟随在查询 i 之后。

示例:

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

>>> url = "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/layout_demo.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> model_path = "PaddlePaddle/PP-DocLayoutV4_safetensors"
>>> image_processor = AutoImageProcessor.from_pretrained(model_path)
>>> model = AutoModelForObjectDetection.from_pretrained(model_path)

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

>>> # results are already sorted by reading order
>>> results = image_processor.post_process_object_detection(outputs, target_sizes=[image.size[::-1]])
>>> for result in results:
...     for idx, (score, label_id, box) in enumerate(zip(result["scores"], result["labels"], result["boxes"])):
...         box = [round(i, 2) for i in box.tolist()]
...         print(f"Order {idx + 1}: {model.config.id2label[label_id.item()]}: {score.item():.2f} {box}")
Order 1: text: 0.99 [336.07, 182.04, 894.17, 652.62]
Order 2: paragraph_title: 0.98 [336.45, 681.88, 868.78, 796.91]
Order 3: text: 0.99 [334.01, 840.84, 889.11, 1452.29]
Order 4: text: 0.99 [920.65, 183.62, 1476.75, 462.75]
Order 5: text: 0.99 [919.55, 482.55, 1479.85, 763.41]
Order 6: text: 0.98 [919.34, 844.48, 1481.28, 1219.44]
Order 7: text: 0.98 [920.84, 1238.61, 1467.66, 1374.54]
Order 8: text: 0.90 [334.24, 1612.85, 1478.79, 1730.92]
Order 9: text: 0.95 [334.25, 1755.98, 1467.34, 1845.6]
Order 10: text: 0.65 [337.14, 1909.47, 659.78, 1938.2]
Order 11: footnote: 0.78 [338.73, 2114.87, 1448.16, 2172.06]
Order 12: number: 0.98 [106.08, 2257.42, 134.76, 2281.3]
Order 13: footer: 0.93 [339.27, 2255.7, 984.16, 2282.81]

PPDocLayoutV4Model

class transformers.PPDocLayoutV4Model

< >

( config: PPDocLayoutV4Config )

参数

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

PP-DocLayoutV4 模型(由骨干网络和编码器-解码器组成),输出未经任何头部处理的原始隐藏状态。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( pixel_values: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → PPDocLayoutV4ModelOutput or tuple(torch.Tensor)

参数

  • pixel_values(形状为 (batch_size, num_channels, image_size, image_size) 的 torch.Tensor)— 对应于输入图像的张量。可以使用 image_processor_class 获取像素值。有关详细信息,请参阅 image_processor_class.__call__(processor_class 使用 image_processor_class 来处理图像)。
  • pixel_mask (torch.LongTensor 形状为 (batch_size, height, width), 可选) — 用于避免对填充像素值执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 对于真实的像素(即未被掩码的像素),值为 1,
    • 对于填充像素(即 被屏蔽 的像素),值为 0。

    什么是注意力掩码?

  • encoder_outputs (torch.Tensor, 可选) — 元组由 (last_hidden_state, 可选: hidden_states, 可选: attentions) last_hidden_state 的形状为 (batch_size, sequence_length, hidden_size), 可选) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
  • labels(list[Dict],长度为 (batch_size,),可选) — 不支持:PP-DocLayoutV4 在 Transformers 中仅支持推理。

返回值

PPDocLayoutV4ModelOutput 或 tuple(torch.Tensor)

PPDocLayoutV4ModelOutput 或 torch.Tensor 元组(如果传入 return_dict=False 或 config.return_dict=False),包含根据配置(None)和输入而定的各种元素。

PPDocLayoutV4Model 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

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

  • intermediate_hidden_states(形状为 (batch_size, config.decoder_layers, num_queries, hidden_size) 的 torch.Tensor)— 堆叠的中间隐藏状态(解码器每一层的输出)。

  • intermediate_reference_points(形状为 (batch_size, config.decoder_layers, num_queries, config.num_coords) 的 torch.Tensor)— 堆叠的中间参考点(解码器每一层细化后的四边形)。

  • decoder_hidden_states (tuple[torch.Tensor],可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为 (batch_size, sequence_length, hidden_size)。

    解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • decoder_attentions(tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • cross_attentions (tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    解码器交叉注意力层在注意力 softmax 之后的注意力权重,用于在交叉注意力头中计算加权平均值。

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

  • encoder_hidden_states (tuple[torch.Tensor],可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为 (batch_size, sequence_length, hidden_size)。

    编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • encoder_attentions(tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • init_reference_points(形状为 (batch_size, num_queries, config.num_coords) 的 torch.Tensor)— 通过 Transformer 解码器传输的初始四边形参考点。

  • enc_topk_logits(形状为 (batch_size, num_queries, config.num_labels) 的 torch.Tensor)— 被选为解码器查询的编码器提案的类别 logits。

  • enc_topk_bboxes(形状为 (batch_size, num_queries, config.num_coords) 的 torch.Tensor)— 被选为解码器查询的编码器提案四边形。

  • enc_outputs_class(形状为 (batch_size, sequence_length, config.num_labels) 的 torch.Tensor)— 每个编码器提案的类别 logits。

  • enc_outputs_coord_logits(形状为 (batch_size, sequence_length, config.num_coords) 的 torch.Tensor) — 每个编码器提案的四元数 logits。

  • denoising_meta_values (dict,可选) — 用于去噪相关值的额外字典。

  • logits(形状为 (batch_size, num_queries, config.num_labels) 的 torch.Tensor)— 最后一个解码器层的分类 logits。

  • relative_order_logits(形状为 (batch_size, config.num_queries, config.num_queries) 的 torch.Tensor)— 成对相对阅读顺序 logits,经过可选的 S2R 融合后。

  • successor_order_logits(形状为 (batch_size, config.num_queries, config.num_queries) 的 torch.Tensor)— 成对直接后继(ROOR)logits。

PPDocLayoutV4Config

类 transformers.PPDocLayoutV4Config

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0id2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneis_encoder_decoder: bool = Trueinitializer_range: float = 0.01initializer_bias_prior_prob: float | None = Nonelayer_norm_eps: float = 1e-05batch_norm_eps: float = 1e-05tie_word_embeddings: bool = Truebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonefreeze_backbone_batch_norms: bool = Trueencoder_hidden_dim: int = 256encoder_in_channels: list[int] | tuple[int, ...] = (512, 1024, 2048)feat_strides: list[int] | tuple[int, ...] = (8, 16, 32)encoder_layers: int = 1encoder_ffn_dim: int = 1024encoder_attention_heads: int = 8dropout: float | int = 0.0activation_dropout: float | int = 0.0encode_proj_layers: list[int] | tuple[int, ...] = (2,)positional_encoding_temperature: int = 10000encoder_activation_function: str = 'gelu'activation_function: str = 'silu'eval_size: list[int] | tuple[int, int] | None = Nonenormalize_before: bool = Falsehidden_expansion: float = 1.0num_queries: int = 300decoder_in_channels: list[int] | tuple[int, ...] = (256, 256, 256)decoder_ffn_dim: int = 1024num_feature_levels: int = 3decoder_n_points: int = 4decoder_layers: int = 6decoder_attention_heads: int = 8decoder_activation_function: str = 'relu'attention_dropout: float | int = 0.0num_denoising: int = 100anchor_image_size: list[int] | tuple[int, int] | None = Nonedisable_custom_kernels: bool = Trueglobal_pointer_head_size: int = 64gp_dropout_value: float | int = 0.1hidden_size: int = 256num_coords: int = 10s2r_steps: int = 3s2r_damping: float = 0.5s2r_closure_weight_init: float = 0.0 )

参数

  • is_encoder_decoder (bool,可选,默认为 True) — 指示该模型是否用作编码器/解码器。
  • initializer_range (float,可选,默认为 0.01) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • initializer_bias_prior_prob (float, 可选) — 偏置初始化器用于初始化 enc_score_head 和 class_embed 偏置的先验概率。 如果为 None,则默认为 1 / (num_labels + 1)。
  • layer_norm_eps (float,可选,默认为 1e-05) — 层归一化层所使用的 epsilon 值。
  • batch_norm_eps (float,可选,默认为 1e-05) — 批归一化层使用的 epsilon 值。
  • tie_word_embeddings (bool,可选,默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。
  • backbone_config (Union[dict, ~configuration_utils.PreTrainedConfig],可选) — 主干模型的配置。
  • freeze_backbone_batch_norms (bool,可选,默认为 True) — 是否冻结主干网络中的批归一化层。
  • encoder_hidden_dim (int,可选,默认为 256) — 隐藏表示的维度。
  • encoder_in_channels (list,可选,默认为 [512, 1024, 2048]) — 编码器的多级特征输入。
  • feat_strides(list[int],可选,默认为 [8, 16, 32])— 每个特征图中使用的步长。
  • encoder_layers (int,可选,默认为 1) — Transformer 编码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • encoder_ffn_dim (int,可选,默认为 1024) — 编码器中“中间”(通常称为前馈)层的维度。
  • encoder_attention_heads (int,可选,默认为 8) — Transformer 编码器中每个注意力层的注意力头数量。
  • dropout (Union[float, int],可选,默认为 0.0) — 所有 dropout 层的比率。
  • activation_dropout (Union[float, int],可选,默认为 0.0) — 全连接层中激活值的 dropout 比率。
  • encode_proj_layers (list[int],可选,默认为 [2]) — 编码器中要使用的投影层的索引。
  • positional_encoding_temperature (int,可选,默认为 10000) — 用于创建位置编码的温度参数。
  • encoder_activation_function (str,可选,默认为 "gelu") — 编码器和池化器中使用的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu"、"relu"、"silu" 和 "gelu_new"。
  • activation_function (str,可选,默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu" 等。
  • eval_size (tuple[int, int],可选) — 用于在考虑步长后计算位置嵌入的有效高度和宽度。必须保持为 None 才能复现参考实现,该实现会动态计算位置嵌入。
  • normalize_before (bool,可选,默认为 False) — 确定是否在 Transformer 编码器层的自注意力和前馈模块之前应用层归一化。
  • hidden_expansion (float,可选,默认值为 1.0) — 用于扩大 RepVGGBlock 和 CSPRepLayer 维度大小的扩展比例。
  • num_queries (int,可选,默认为 300) — 对象查询的数量。
  • decoder_in_channels (list,可选,默认为 [256, 256, 256]) — 解码器的多级特征维度
  • decoder_ffn_dim (int,可选,默认值为 1024) — 解码器中“中间”(通常称为前馈)层的维度。
  • num_feature_levels (int, 可选,默认为 3) — 输入特征层级的数量。
  • decoder_n_points (int,可选,默认为 4) — 解码器中每个注意力头在每个特征层级上采样的键数量。
  • decoder_layers (int, 可选,默认为 6) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • decoder_attention_heads (int,可选,默认为 8) — Transformer 解码器中每个注意力层的注意力头数量。
  • decoder_activation_function (str,可选,默认为 "relu") — 解码器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu"、"relu"、"silu" 和 "gelu_new"。
  • attention_dropout (Union[float, int],可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • num_denoising (int,可选,默认为 100) — 用于对比去噪的去噪任务或查询的总数。
  • anchor_image_size (tuple[int, int], 可选) — 评估期间用于生成边界框锚点的输入图像的高度和宽度。如果为 None,则应用自动生成的锚点。
  • disable_custom_kernels (bool,可选,默认为 True) — 是否禁用自定义内核。
  • global_pointer_head_size (int,可选,默认为 64) — 全局指针头的大小。
  • gp_dropout_value (float,可选,默认值为 0.1) — 全局指针头中的 dropout 概率。
  • hidden_size (int,可选,默认值为 256) — 解码器层的维度,不包含混合编码器。也可以读取为 d_model,这是该模型所源自的 RT-DETR 系列中使用的名称。
  • num_coords (int, 可选,默认为 10) — bbox 头预测的框参数化的大小。PP-DocLayoutV4 回归一个四点四边形,在 sigmoid 空间中编码为 [center_x, center_y, dx1, dy1, dx2, dy2, dx3, dy3, dx4, dy4],其中角点偏移量会加上 +0.5。仅支持 10。
  • s2r_steps (int,可选,默认为 3) — 用于近似后继矩阵传递闭包的传播步数。
  • s2r_damping (float,可选,默认值为 0.5) — 应用于传递闭包中每个额外传播步骤的阻尼因子。
  • s2r_closure_weight_init (float,可选,默认值为 0.0) — 用于加权 closure 项的可学习门控的初始值。默认值为 0.0,因此未经训练的融合模块在数值上与仅使用相对顺序 logits 完全一致。

这是用于存储 PPDocLayoutV4Model 配置的类。它根据指定的参数实例化 Pp Doclayout V4 模型,并定义模型架构。使用默认值实例化配置将得到与 PaddlePaddle/PP-DocLayoutV4_safetensors 类似的配置。

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

示例:

>>> from transformers import PPDocLayoutV4Config, PPDocLayoutV4ForObjectDetection

>>> # Initializing a PP-DocLayoutV4 configuration
>>> configuration = PPDocLayoutV4Config()

>>> # Initializing a model (with random weights) from the configuration
>>> model = PPDocLayoutV4ForObjectDetection(configuration)

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

PPDocLayoutV4ImageProcessor

类 transformers.PPDocLayoutV4ImageProcessor

< >

( **kwargs: *<class 'transformers.processing_utils.ImagesKwargs'> )

参数

  • do_convert_rgb (bool,kwargs,可选) — 是否将图像转换为 RGB。
  • do_resize (bool,kwargs,可选,默认为 True) — 是否调整图像大小。
  • size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs,默认为 {'height' -- 800, 'width': 800}): 描述输入到模型的最大尺寸。
  • default_to_square (bool,kwargs,可选,默认为 True) — 当 size 为 int 时,是否在调整大小时默认使用正方形图像。
  • crop_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 应用 center_crop 后输出图像的尺寸。
  • resample (Annotated[Union[int, PILImageResampling, NoneType], None], kwargs,默认为 3) — 如果调整图像大小,则使用的重采样滤波器。它可以是枚举 PILImageResampling 中的一个值。仅当 do_resize 设置为 True 时才会生效。
  • do_rescale (bool,kwargs,可选,默认为 True) — 是否对图像进行重新缩放。
  • rescale_factor (float,kwargs,可选,默认为 0.00392156862745098) — 当 do_rescale 设置为 True 时,用于对图像进行缩放的缩放因子。
  • do_normalize (bool,kwargs,可选,默认为 True) — 是否对图像进行归一化。
  • image_mean (Union[float, list[float], tuple[float, ...]],kwargs,可选,默认为 [0, 0, 0]) — 用于归一化的图像均值。仅当 do_normalize 设置为 True 时生效。
  • image_std (Union[float, list[float], tuple[float, ...]],kwargs,可选,默认为 [1, 1, 1]) — 用于归一化的图像标准差。仅当 do_normalize 设置为 True 时生效。
  • do_pad (bool, kwargs, 可选) — 是否对图像进行填充。填充操作会将图像填充至批次中的最大尺寸,或填充至每张图像的固定正方形尺寸。具体的填充策略取决于模型。
  • pad_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 用于填充图像的 {"height": int, "width" int} 尺寸。必须大于为预处理提供的任何图像尺寸。如果未提供 pad_size,图像将被填充到批次中最大的高度和宽度。仅在 do_pad=True. 时应用。
  • do_center_crop (bool,kwargs,可选) — 是否对图像进行中心裁剪。
  • data_format (Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 仅支持 ChannelDimension.FIRST。为兼容旧版处理器而添加。
  • input_data_format (Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:
    • "channels_first" 或 ChannelDimension.FIRST:图像采用 (num_channels, height, width) 格式。
    • "channels_last" 或 ChannelDimension.LAST:图像采用 (height, width, num_channels) 格式。
    • "none" 或 ChannelDimension.NONE:图像为 (height, width) 格式。
  • device (Annotated[Union[str, torch.device, NoneType], None], kwargs) — 用于处理视频的设备。如果未设置,则从输入视频中推断设备。
  • return_tensors (Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。
  • disable_grouping (bool,kwargs,可选) — 是否禁用按尺寸对图像进行分组,从而逐个处理图像而非批量处理。 如果为 None,则当图像位于 CPU 上时设置为 True,否则设置为 False。此选择基于经验观察,详见此处:https://github.com/huggingface/transformers/pull/38157
  • image_seq_length (int, kwargs, optional) — 输入中每张图片所使用的图像 token 数量。 为向后兼容而添加,但在未来的模型中应将其设置为处理器属性。 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。
  • disable_grouping (bool,kwargs,可选) — 是否禁用按尺寸对图像进行分组,从而逐个处理图像而非批量处理。 如果为 None,则当图像位于 CPU 上时设置为 True,否则设置为 False。此选择基于经验观察,详见此处:https://github.com/huggingface/transformers/pull/38157
  • image_seq_length (int, kwargs, optional) — 输入中每张图片所使用的图像 token 数量。 为向后兼容而添加,但在未来的模型中应将其设置为处理器属性。 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。
  • disable_grouping (bool,kwargs,可选) — 是否禁用按尺寸对图像进行分组,从而逐个处理图像而非批量处理。 如果为 None,则当图像位于 CPU 上时设置为 True,否则设置为 False。此选择基于经验观察,详见此处:https://github.com/huggingface/transformers/pull/38157
  • image_seq_length (int,kwargs,可选) — 输入中每张图片所使用的图像 token 数量。 为向后兼容而添加,但在未来的模型中,应将其设置为处理器的属性。
  • Returns 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。 —

构建一个 PPDocLayoutV4ImageProcessor 图像处理器。

disable_grouping (bool, kwargs, 可选): 是否禁用按尺寸对图像进行分组,从而逐个处理图像而非批量处理。 如果为 None,则当图像位于 CPU 上时设置为 True,否则设置为 False。此选择基于经验观察,详情见此处:https://github.com/huggingface/transformers/pull/38157 image_seq_length (int, kwargs, 可选): 输入中每张图像所使用的图像 token 数量。 为向后兼容而添加,但在未来的模型中应将其设置为处理器属性。

预处理

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]*argsimage_like_kwargs: dict[str, typing.Any] | None = None**kwargs: *<class 'transformers.processing_utils.ImagesKwargs'> ) → ~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。
  • image_like_kwargs (dict[str, Any], 可选) — 用于额外图像类输入的开发者标志,这些输入也将被预处理。仅在以关键字参数传递输入不起作用时使用此标志。例如,preprocess(images, masks=masks) 是首选方式,但对于某些模型会导致参数优先级问题。在这种情况下,可以改用 preprocess(images, image_like_inputs={"masks": masks})。
  • do_convert_rgb (bool,kwargs,可选) — 是否将图像转换为 RGB。
  • do_resize (bool,kwargs,可选) — 是否调整图像大小。
  • size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 描述模型的最大输入维度。
  • default_to_square (bool, kwargs, 可选) — 当 size 为整数时,是否在调整大小时默认使用正方形图像。
  • crop_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 应用 center_crop 后输出图像的尺寸。
  • resample (Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — 如果调整图像大小,则使用的重采样滤波器。可以是枚举 PILImageResampling 中的一个值。仅当 do_resize 设置为 True 时生效。
  • do_rescale (bool,kwargs,可选) — 是否对图像进行重新缩放。
  • rescale_factor (float, kwargs, 可选) — 如果 do_rescale 设置为 True,则用于对图像进行缩放的缩放因子。
  • do_normalize (bool,kwargs,可选) — 是否对图像进行归一化。
  • image_mean (Union[float, list[float], tuple[float, ...]], kwargs, 可选) — 用于归一化的图像均值。仅当 do_normalize 设置为 True 时生效。
  • image_std (Union[float, list[float], tuple[float, ...]], kwargs, 可选) — 用于归一化的图像标准差。仅当 do_normalize 设置为 True 时生效。
  • do_pad (bool, kwargs, 可选) — 是否对图像进行填充。填充操作会将图像填充至批次中的最大尺寸,或填充至每张图像的固定正方形尺寸。具体的填充策略取决于模型。
  • pad_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 用于填充图像的 {"height": int, "width" int} 尺寸。必须大于为预处理提供的任何图像尺寸。如果未提供 pad_size,图像将被填充到批次中最大的高度和宽度。仅在 do_pad=True. 时应用。
  • do_center_crop (bool,kwargs,可选) — 是否对图像进行中心裁剪。
  • data_format (Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 仅支持 ChannelDimension.FIRST。为兼容旧版处理器而添加。
  • input_data_format (Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:
    • "channels_first" 或 ChannelDimension.FIRST:图像采用 (num_channels, height, width) 格式。
    • "channels_last" 或 ChannelDimension.LAST:图像采用 (height, width, num_channels) 格式。
    • "none" 或 ChannelDimension.NONE:图像为 (height, width) 格式。
  • device (Annotated[Union[str, torch.device, NoneType], None], kwargs) — 用于处理视频的设备。如果未设置,则从输入视频中推断设备。
  • return_tensors (Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — 如果设置为 'pt',则返回堆叠的张量,否则返回张量列表。
  • disable_grouping (bool,kwargs,可选) — 是否禁用按尺寸对图像进行分组,从而逐个处理图像而非批量处理。 如果为 None,则当图像位于 CPU 上时设置为 True,否则设置为 False。此选择基于经验观察,详见此处:https://github.com/huggingface/transformers/pull/38157
  • image_seq_length (int,kwargs,可选) — 输入中每张图片所使用的图像 token 数量。 为向后兼容而添加,但在未来的模型中,应将其设置为处理器的属性。

返回值

~image_processing_base.BatchFeature

  • data (dict) — 由 call 方法返回的列表/数组/张量字典(如 ‘pixel_values’ 等)。
  • tensor_type (Union[None, str, TensorType], 可选) — 您可以在此处指定 tensor_type,以便在初始化时将 PyTorch/Numpy 张量中的整数列表进行转换。

预处理一张图像或一批图像。

post_process_object_detection

< >

( outputsthreshold: float = 0.5target_sizes = None ) → list[Dict]

参数

  • outputs (PPDocLayoutV4ForObjectDetectionOutput) — 模型的原始输出。
  • threshold (float,可选,默认为 0.5) — 用于保留目标检测预测结果的分数阈值。
  • target_sizes (torch.Tensor 或 list[tuple[int, int]]) — 形状为 (batch_size, 2) 的张量,或元组列表((height, width)),表示批次中每张图片的目标尺寸。

返回值

list[Dict]

一个字典列表,每张图片对应一个字典,每个字典包含模型预测的 scores、labels、boxes、polygon_points 和 order_seq。预测结果按阅读顺序排序,因此 order_seq 是非递减的(在多个标签下被选中的查询仅保留一个排名)。

将 PPDocLayoutV4ForObjectDetection 的原始输出转换为最终的四个角点,以 (top_left_x, top_left_y, bottom_right_x, bottom_right_y) 格式表示的包围框,以及阅读顺序排名。仅支持 PyTorch。

Update on GitHub