# PP-OCRv6_medium_det

## 概述

PP-OCRv6_medium_det 是 PaddleOCR 团队开发的 PP-OCRv6 检测系列中最大的模型。它采用 LCNetV4 作为骨干网络，RepLKFPN 作为特征金字塔颈部，能够在多种场景下提供精确的文本定位，包括手写、印刷、旋转、弯曲以及多语言的艺术字。该模型包含 1550 万个参数。

## 模型架构

## 用法

### 单输入推理

以下示例演示了如何使用 [AutoModel](/docs/transformers/main/zh/model_doc/auto#transformers.AutoModel) 通过 PP-OCRv6_medium_det 检测文本。

```python
from io import BytesIO

from huggingface_hub.utils import httpx
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from transformers.image_utils import load_image

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

image_url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/paddle_general_ocr_001.png"
image = load_image(image_url)
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
outputs = model(**inputs)

results = image_processor.post_process_object_detection(
    outputs, 
    target_sizes=inputs["target_sizes"],
    threshold=0.2,
    box_threshold=0.45,
    max_candidates=3000,
    unclip_ratio=1.4,
)

for result in results:
    print(result)
```

### 批量推理

以下是使用 [AutoModel](/docs/transformers/main/zh/model_doc/auto#transformers.AutoModel) 和 PP-OCRv6_medium_det 实现此操作的方法：

```python
from io import BytesIO

from huggingface_hub.utils import httpx
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from transformers.image_utils import load_image

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

image_url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/paddle_general_ocr_001.png"
image = load_image(image_url)
inputs = image_processor(images=[image, image], return_tensors="pt").to(model.device)
outputs = model(**inputs)

results = image_processor.post_process_object_detection(
    outputs, 
    target_sizes=inputs["target_sizes"],
    threshold=0.2,
    box_threshold=0.45,
    max_candidates=3000,
    unclip_ratio=1.4,
)

for result in results:
    print(result)
```

## PPOCRV6MediumDetForObjectDetection[[transformers.PPOCRV6MediumDetForObjectDetection]]

#### transformers.PPOCRV6MediumDetForObjectDetection[[transformers.PPOCRV6MediumDetForObjectDetection]]

```python
transformers.PPOCRV6MediumDetForObjectDetection(config: PPOCRV6MediumDetConfig)
```

[来源](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/modeling_pp_ocrv6_medium_det.py#L363)

**参数：**

config ([PPOCRV6MediumDetConfig](/docs/transformers/main/zh/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig))：模型配置类，包含模型的所有参数。通过配置文件进行初始化时，不会加载与模型关联的权重，仅加载配置。请查看 [from_pretrained()](/docs/transformers/main/zh/main_classes/model#transformers.PreTrainedModel.from_pretrained) 方法以加载模型权重。

用于文本检测任务的 PPOCRV6MediumDet 模型。

该模型继承自 [PreTrainedModel](/docs/transformers/main/zh/main_classes/model#transformers.PreTrainedModel)。请查阅父类文档，了解该库为所有模型实现的通用方法（例如下载或保存、调整输入嵌入大小、剪枝头等）。

该模型也是 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) 的子类。请将其作为常规的 PyTorch Module 使用，有关通用用法和行为的所有事项，请参阅 PyTorch 文档。

## PPOCRV6MediumDetConfig[[transformers.PPOCRV6MediumDetConfig]]

#### transformers.PPOCRV6MediumDetConfig[[transformers.PPOCRV6MediumDetConfig]]

```python
transformers.PPOCRV6MediumDetConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, id2label: dict[int, str] | dict[str, str] | None = None, interpolate_mode: str = 'nearest', backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, neck_out_channels: int = 256, reduce_factor: int = 2, intraclass_block_number: int = 4, intraclass_block_config: dict | None = None, scale_factor: int = 2, scale_factor_list: list | None = None, kernel_list: list | None = None)
```

[来源](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/configuration_pp_ocrv6_medium_det.py#L31)

**参数：**

id2label (`Union[dict[int, str], dict[str, str]]`, *可选*) : 从索引（例如预测索引或目标索引）到标签的映射。

interpolate_mode (`str`, *可选*, 默认为 `"nearest"`) : 在颈部网络中对特征图进行上采样或下采样时使用的插值模式。

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`，*可选*)：骨干模型的配置。

neck_out_channels (`int`, *可选*，默认为 256)：颈部网络的输出通道数，负责特征融合与细化。

reduce_factor (`int`, *可选*，默认为 2)：用于颈部模块的通道缩减因子，以平衡性能与复杂度。

intraclass_block_number (`int`，*可选*，默认为 4)：用于增强特征表示的 Intra-Class Block 模块数量。

intraclass_block_config (`dict`, *可选*, 默认为 `None`) : 用于增强特征表示的 Intra-Class Block 模块的配置（如果存在）。

scale_factor (`int`，*可选*，默认为 2)：用于调整特征图空间分辨率的缩放因子。

scale_factor_list (`list[int]`, *可选*, 默认为 `None`) : 用于调整特征图空间分辨率的缩放因子列表。

kernel_list (`list[int]`, *可选*, 默认为 `[3, 2, 2]`) : 用于多头网络中卷积层的核大小列表，以实现多尺度特征提取。

这是用于存储 PPOCRV6MediumDetModel 配置的类。它根据指定的参数实例化 Pp Ocrv6 Medium Det 模型，并定义模型架构。使用默认值实例化配置将得到与 [PaddlePaddle/PP-OCRv6_medium_det_safetensors](https://huggingface.co/PaddlePaddle/PP-OCRv6_medium_det_safetensors) 类似的配置。

配置对象继承自 [PreTrainedConfig](/docs/transformers/main/zh/main_classes/configuration#transformers.PreTrainedConfig)，可用于控制模型输出。有关更多信息，请参阅 [PreTrainedConfig](/docs/transformers/main/zh/main_classes/configuration#transformers.PreTrainedConfig) 的文档。

## PPOCRV6MediumDetModel[[transformers.PPOCRV6MediumDetModel]]

#### transformers.PPOCRV6MediumDetModel[[transformers.PPOCRV6MediumDetModel]]

```python
transformers.PPOCRV6MediumDetModel(config: PPOCRV6MediumDetConfig)
```

[来源](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/modeling_pp_ocrv6_medium_det.py#L338)

**参数：**

config ([PPOCRV6MediumDetConfig](/docs/transformers/main/zh/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig))：模型配置类，包含模型的所有参数。通过配置文件进行初始化时，不会加载与模型关联的权重，仅加载配置。请查看 [from_pretrained()](/docs/transformers/main/zh/main_classes/model#transformers.PreTrainedModel.from_pretrained) 方法以加载模型权重。

裸 Pp Ocrv6 Medium Det 模型，输出原始 hidden-states，顶部未添加任何特定 head。

该模型继承自 [PreTrainedModel](/docs/transformers/main/zh/main_classes/model#transformers.PreTrainedModel)。请查阅父类文档，了解该库为所有模型实现的通用方法（例如下载或保存、调整输入嵌入大小、剪枝头等）。

该模型也是 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) 的子类。请将其作为常规的 PyTorch Module 使用，有关通用用法和行为的所有事项，请参阅 PyTorch 文档。

#### forward[[transformers.PPOCRV6MediumDetModel.forward]]

```python
forward(pixel_values: Tensor, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[来源](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/modeling_pp_ocrv6_medium_det.py#L345)

**参数：**

pixel_values (`torch.Tensor`，形状为 `(batch_size, num_channels, image_size, image_size)`)：与输入图像对应的张量。可以使用 [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/zh/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor) 获取像素值。有关详细信息，请参阅 [PPOCRV5ServerDetImageProcessor.__call__()](/docs/transformers/main/zh/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__)（`processor_class` 使用 [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/zh/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor) 处理图像）。

**返回：** `BaseModelOutputWithNoAttention` 或 `tuple(torch.Tensor)`

`BaseModelOutputWithNoAttention` 或 `torch.Tensor` 元组（如果传入 `return_dict=False` 或 `config.return_dict=False`），包含根据配置（[PPOCRV6MediumDetConfig](/docs/transformers/main/zh/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)）和输入而定的各种元素。

[PPOCRV6MediumDetModel](/docs/transformers/main/zh/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetModel) 的 forward 方法重写了 `__call__` 特殊方法。

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

- **last_hidden_state**（形状为 `(batch_size, num_channels, height, width)` 的 `torch.Tensor`）-- 模型最后一层输出的隐藏状态序列。
- **hidden_states** (`tuple(torch.Tensor)`，*可选*，在传入 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) -- 一个 `torch.Tensor` 元组（如果模型具有嵌入层，则包含嵌入层输出的一个张量，以及每个层输出的一个张量），形状为 `(batch_size, num_channels, height, width)`。

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

