# PP-OCRv6_medium_det

## Resumen

PP-OCRv6_medium_det es el modelo más grande de la serie de detección PP-OCRv6 desarrollada por el equipo de PaddleOCR. Utiliza LCNetV4 como backbone y RepLKFPN como cuello de pirámide de características, proporcionando una localización precisa de texto en diversos escenarios, incluido texto manuscrito, impreso, rotado, curvo y artístico en múltiples idiomas. El modelo contiene 15,5M de parámetros.

## Arquitectura del modelo

## Uso

### Inferencia con una sola entrada

El siguiente ejemplo demuestra cómo detectar texto con PP-OCRv6_medium_det usando [AutoModel](/docs/transformers/main/es/model_doc/auto#transformers.AutoModel).

```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)
```

### Inferencia por lotes

Así es como puedes hacerlo con PP-OCRv6_medium_det usando [AutoModel](/docs/transformers/main/es/model_doc/auto#transformers.AutoModel):

```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)
```

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

**Parámetros:**

config ([PPOCRV6MediumDetConfig](/docs/transformers/main/es/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método [from_pretrained()](/docs/transformers/main/es/main_classes/model#transformers.PreTrainedModel.from_pretrained) para cargar los pesos del modelo.

Modelo PPOCRV6MediumDet para tareas de detección de texto.

Este modelo hereda de [PreTrainedModel](/docs/transformers/main/es/main_classes/model#transformers.PreTrainedModel). Consulte la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

## 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)
```

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

**Parámetros:**

id2label (`Union[dict[int, str], dict[str, str]]`, *opcional*) : Un mapa de índice (por ejemplo, índice de predicción o índice de destino) a etiqueta.

interpolate_mode (`str`, *opcional*, valor predeterminado `"nearest"`) : El modo de interpolación utilizado para aumentar o reducir el tamaño de los mapas de características en la red neck.

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *opcional*) : La configuración del modelo de base.

neck_out_channels (`int`, *opcional*, valor predeterminado 256) : El número de canales de salida de la red neck, responsable de la fusión y el refinamiento de características.

reduce_factor (`int`, *opcional*, valor predeterminado 2) : Factor de reducción de canales utilizado en los bloques del cuello para equilibrar el rendimiento y la complejidad.

intraclass_block_number (`int`, *opcional*, valor predeterminado: 4) : El número de módulos Intra-Class Block utilizados para mejorar la representación de características.

intraclass_block_config (`dict`, *opcional*, valor predeterminado `None`) : Configuración de los módulos Intra-Class Block, si los hay, utilizados para mejorar la representación de características.

scale_factor (`int`, *opcional*, valor predeterminado: 2) : El factor de escala utilizado para los ajustes de resolución espacial en los mapas de características.

scale_factor_list (`list[int]`, *opcional*, valor predeterminado `None`) : Una lista de factores de escala utilizados para los ajustes de resolución espacial en los mapas de características.

kernel_list (`list[int]`, *opcional*, valor predeterminado `[3, 2, 2]`) : La lista de tamaños de kernel para las capas convolucionales de la red de cabecera para la extracción de características a múltiples escalas.

Esta es la clase de configuración para almacenar la configuración de un PPOCRV6MediumDetModel. Se utiliza para instanciar un modelo Pp Ocrv6 Medium Det según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de [PaddlePaddle/PP-OCRv6_medium_det_safetensors](https://huggingface.co/PaddlePaddle/PP-OCRv6_medium_det_safetensors)

Los objetos de configuración heredan de [PreTrainedConfig](/docs/transformers/main/es/main_classes/configuration#transformers.PreTrainedConfig) y se pueden utilizar para controlar las salidas del modelo. Consulte la documentación de [PreTrainedConfig](/docs/transformers/main/es/main_classes/configuration#transformers.PreTrainedConfig) para obtener más información.

## PPOCRV6MediumDetModel[[transformers.PPOCRV6MediumDetModel]]

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

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

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

**Parámetros:**

config ([PPOCRV6MediumDetConfig](/docs/transformers/main/es/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método [from_pretrained()](/docs/transformers/main/es/main_classes/model#transformers.PreTrainedModel.from_pretrained) para cargar los pesos del modelo.

El modelo Pp Ocrv6 Medium Det básico que genera estados ocultos sin ningún cabezal específico en la parte superior.

Este modelo hereda de [PreTrainedModel](/docs/transformers/main/es/main_classes/model#transformers.PreTrainedModel). Consulte la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

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

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

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

**Parámetros:**

pixel_values (`torch.Tensor` de forma `(batch_size, num_channels, image_size, image_size)`) : Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener usando [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/es/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor). Consulte [PPOCRV5ServerDetImageProcessor.__call__()](/docs/transformers/main/es/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) para más detalles (`processor_class` usa [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/es/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor) para procesar las imágenes).

**Devuelve:** `BaseModelOutputWithNoAttention` o `tuple(torch.Tensor)`

Un `BaseModelOutputWithNoAttention` o una tupla de `torch.Tensor` (si se pasa `return_dict=False` o cuando `config.return_dict=False`) que comprende varios elementos según la configuración ([PPOCRV6MediumDetConfig](/docs/transformers/main/es/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) y las entradas.

El método forward de [PPOCRV6MediumDetModel](/docs/transformers/main/es/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetModel) sobrescribe el método especial `__call__`.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de `Module` después, en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de preprocesamiento y posprocesamiento, mientras que la segunda los ignora silenciosamente.

- **last_hidden_state** (`torch.Tensor` de forma `(batch_size, num_channels, height, width)`) -- Secuencia de estados ocultos en la salida de la última capa del modelo.
- **hidden_states** (`tuple(torch.Tensor)`, *opcional*, devuelto cuando se pasa `output_hidden_states=True` o cuando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (una para la salida de los embeddings, si el modelo tiene una capa de embedding, + una para la salida de cada capa) de forma `(batch_size, num_channels, height, width)`.

  Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.

