# PP-OCRv6_medium_det

## Visão geral

PP-OCRv6_medium_det é o maior modelo da série de detecção PP-OCRv6, desenvolvido pela equipe PaddleOCR. Ele utiliza LCNetV4 como backbone e RepLKFPN como o pescoço da pirâmide de características, oferecendo localização precisa de texto em diversos cenários, incluindo texto manuscrito, impresso, rotacionado, curvo e artístico em múltiplos idiomas. O modelo contém 15,5M de parâmetros.

## Arquitetura do Modelo

## Uso

### Inferência com entrada única

O exemplo abaixo demonstra como detectar texto com PP-OCRv6_medium_det usando o [AutoModel](/docs/transformers/main/pt/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)
```

### Inferência em lote

Aqui está como você pode fazer isso com PP-OCRv6_medium_det usando o [AutoModel](/docs/transformers/main/pt/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)
```

[Origem](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/pt/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para carregar os pesos do modelo.

Modelo PPOCRV6MediumDet para tarefas de detecção de texto.

Este modelo herda de [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel). Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.).

Este modelo também é uma subclasse de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso e comportamento gerais.

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

[Origem](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*) : Um mapa de índice (por exemplo, índice de previsão ou índice de alvo) para rótulo.

interpolate_mode (`str`, *opcional*, padrão `"nearest"`) : O modo de interpolação usado para aumentar ou reduzir o tamanho dos mapas de características na rede de pescoço.

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *opcional*) : A configuração do modelo backbone.

neck_out_channels (`int`, *opcional*, padrão 256) : O número de canais de saída da rede neck, responsável pela fusão e refinamento de recursos.

reduce_factor (`int`, *opcional*, padrão 2) : O fator de redução de canais usado nos blocos do pescoço para equilibrar desempenho e complexidade.

intraclass_block_number (`int`, *opcional*, padrão 4) : O número de módulos Intra-Class Block usados para aprimorar a representação de recursos.

intraclass_block_config (`dict`, *opcional*, padrão `None`) : Configuração para os módulos Intra-Class Block, se houver, usados para aprimorar a representação de recursos.

scale_factor (`int`, *opcional*, padrão 2) : O fator de escala usado para ajustes de resolução espacial nos mapas de características.

scale_factor_list (`list[int]`, *opcional*, padrão `None`) : Uma lista de fatores de escala usados para ajustes de resolução espacial nos mapas de características.

kernel_list (`list[int]`, *opcional*, padrão `[3, 2, 2]`) : A lista de tamanhos de kernel para as camadas convolucionais na rede de cabeçalho para extração de recursos em múltiplas escalas.

Esta é a classe de configuração para armazenar a configuração de um PPOCRV6MediumDetModel. Ela é usada para instanciar um modelo Pp Ocrv6 Medium Det de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do [PaddlePaddle/PP-OCRv6_medium_det_safetensors](https://huggingface.co/PaddlePaddle/PP-OCRv6_medium_det_safetensors)

Os objetos de configuração herdam de [PreTrainedConfig](/docs/transformers/main/pt/main_classes/configuration#transformers.PreTrainedConfig) e podem ser usados para controlar as saídas do modelo. Leia a documentação de [PreTrainedConfig](/docs/transformers/main/pt/main_classes/configuration#transformers.PreTrainedConfig) para mais informações.

## PPOCRV6MediumDetModel[[transformers.PPOCRV6MediumDetModel]]

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

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

[Origem](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/pt/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para carregar os pesos do modelo.

O modelo Pp Ocrv6 Medium Det puro, que produz estados ocultos brutos sem nenhum cabeçalho específico no topo.

Este modelo herda de [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel). Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.).

Este modelo também é uma subclasse de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso e comportamento gerais.

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

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

[Origem](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)`) : Os tensores correspondentes às imagens de entrada. Os valores de pixels podem ser obtidos usando [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/pt/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor). Veja [PPOCRV5ServerDetImageProcessor.__call__()](/docs/transformers/main/pt/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) para detalhes (`processor_class` usa [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/pt/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor) para processar imagens).

**Retorna:** `BaseModelOutputWithNoAttention` ou `tuple(torch.Tensor)`

Um `BaseModelOutputWithNoAttention` ou uma tupla de `torch.Tensor` (se `return_dict=False` for passado ou quando `config.return_dict=False`) contendo vários elementos dependendo da configuração ([PPOCRV6MediumDetConfig](/docs/transformers/main/pt/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) e das entradas.

O método forward do [PPOCRV6MediumDetModel](/docs/transformers/main/pt/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetModel) substitui o método especial `__call__`.

Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de `Module` em seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.

- **last_hidden_state** (`torch.Tensor` de forma `(batch_size, num_channels, height, width)`) -- Sequência de estados ocultos na saída da última camada do modelo.
- **hidden_states** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_hidden_states=True` é passado ou quando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) com a forma `(batch_size, num_channels, height, width)`.

  Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.

