# PP-OCRv6_small_det

## Visão geral

PP-OCRv6_small_det é o modelo pequeno 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, fornecendo 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 2,48M de parâmetros.

## Arquitetura do Modelo

## Uso

### Inferência com entrada única

O exemplo abaixo demonstra como detectar texto com PP-OCRv6_small_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_small_det_safetensors" # or "PaddlePaddle/PP-OCRv6_tiny_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_small_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_small_det_safetensors" # or "PaddlePaddle/PP-OCRv6_tiny_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)
```

## PPOCRV6SmallDetForObjectDetection[[transformers.PPOCRV6SmallDetForObjectDetection]]

#### transformers.PPOCRV6SmallDetForObjectDetection[[transformers.PPOCRV6SmallDetForObjectDetection]]

```python
transformers.PPOCRV6SmallDetForObjectDetection(config: PPOCRV6SmallDetConfig)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_small_det/modeling_pp_ocrv6_small_det.py#L314)

**Parâmetros:**

config ([PPOCRV6SmallDetConfig](/docs/transformers/main/pt/model_doc/pp_ocrv6_small_det#transformers.PPOCRV6SmallDetConfig)) : 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 PPOCR6SmallRec para tarefas de reconhecimento 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.

## PPOCRV6SmallDetConfig[[transformers.PPOCRV6SmallDetConfig]]

#### transformers.PPOCRV6SmallDetConfig[[transformers.PPOCRV6SmallDetConfig]]

```python
transformers.PPOCRV6SmallDetConfig(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, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, reduction: int = 4, neck_out_channels: int = 96, interpolate_mode: str = 'nearest', kernel_list: list[int] | tuple[int, ...] = (3, 2, 2), layer_list_out_channels: list[int] | tuple[int, ...] = (12, 18, 42, 360), dilated_kernel_size: int = 7)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_small_det/configuration_pp_ocrv6_small_det.py#L31)

**Parâmetros:**

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

reduction (`int`, *opcional*, padrão 4) : O fator de redução para as dimensões dos canais de características, usado para reduzir o número de parâmetros do modelo e a complexidade computacional, mantendo a representatividade das características.

neck_out_channels (`int`, *opcional*, padrão 96) : O número de canais de saída da rede neck, que é responsável pela fusão e refinamento de recursos antes de passá-los para a rede head.

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. Os modos suportados incluem `"nearest"` (interpolação do vizinho mais próximo) e `"bilinear"`.

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, usada para extração de recursos em múltiplas escalas a fim de detectar regiões de texto de diferentes tamanhos.

layer_list_out_channels (`List[int]`, *opcional*, padrão `[12, 18, 42, 360]`) : A lista de canais de saída para cada estágio do backbone, usada para configurar os canais de entrada das camadas RSE na rede neck para fusão de recursos em múltiplas escalas.

dilated_kernel_size (`int`, *opcional*, padrão 7) : O tamanho do kernel da camada de convolução dilatada no caminho de convolução de entrada, usado para capturar dependências de longo alcance nos mapas de características.

Esta é a classe de configuração para armazenar a configuração de um PPOCRV6SmallDetModel. Ela é usada para instanciar um modelo Pp Ocrv6 Small 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_small_det_safetensors](https://huggingface.co/PaddlePaddle/PP-OCRv6_small_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.

## PPOCRV6SmallDetModel[[transformers.PPOCRV6SmallDetModel]]

#### transformers.PPOCRV6SmallDetModel[[transformers.PPOCRV6SmallDetModel]]

```python
transformers.PPOCRV6SmallDetModel(config: PPOCRV6SmallDetConfig)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_small_det/modeling_pp_ocrv6_small_det.py#L289)

**Parâmetros:**

config ([PPOCRV6SmallDetConfig](/docs/transformers/main/pt/model_doc/pp_ocrv6_small_det#transformers.PPOCRV6SmallDetConfig)) : 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 Small Det básico, 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.PPOCRV6SmallDetModel.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_small_det/modeling_pp_ocrv6_small_det.py#L296)

**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 ([PPOCRV6SmallDetConfig](/docs/transformers/main/pt/model_doc/pp_ocrv6_small_det#transformers.PPOCRV6SmallDetConfig)) e das entradas.

O método forward do [PPOCRV6SmallDetModel](/docs/transformers/main/pt/model_doc/pp_ocrv6_small_det#transformers.PPOCRV6SmallDetModel) sobrescreve 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.

