Transformers documentation
PP-DocLayoutV4
该模型于 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 路径来获取四边形和 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, 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]])
for result in results:
for score, label_id, box, quad, rank in zip(
result["scores"], result["labels"], result["boxes"], result["polygon_points"], result["order_seq"]
):
box = [round(i, 2) for i in box.tolist()]
print(f"Order {rank.item()}: {model.config.id2label[label_id.item()]}, score: {score.item():.2f}, box: {box}")
print(f" corners: {[[round(x, 2) for x in point] for point in quad.tolist()]}")批量推理
传入一个图像列表,并为每张图像指定一个目标尺寸。每张图像的读取顺序将单独解码。
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
< source >( config: PPDocLayoutV4Config )
参数
- config (PPDocLayoutV4Config) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
PP-DocLayoutV4 模型(由骨干网络和编码器-解码器组成)输出四边形、类别 logits 和阅读顺序 logits,用于文档版面分析等任务。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( 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
< source >( config: PPDocLayoutV4Config )
参数
- config (PPDocLayoutV4Config) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
PP-DocLayoutV4 模型(由骨干网络和编码器-解码器组成),输出未经任何头部处理的原始隐藏状态。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( 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
< source >( 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.configPPDocLayoutV4ImageProcessor
类 transformers.PPDocLayoutV4ImageProcessor
< source >( **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 数量。
为向后兼容而添加,但在未来的模型中应将其设置为处理器属性。
预处理
< source >( 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
< source >( 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。