# PP-OCRv6_medium_det

## Обзор

PP-OCRv6_medium_det — самая крупная модель в серии PP-OCRv6 для детекции, разработанная командой PaddleOCR. В качестве backbone используется LCNetV4, а в качестве feature pyramid neck — RepLKFPN, что обеспечивает точную локализацию текста в разнообразных сценариях, включая рукописный, печатный, повёрнутый, изогнутый и художественный текст на нескольких языках. Модель содержит 15,5 млн параметров.

## Архитектура модели

## Использование

### Вывод для одного входа

Приведённый ниже пример показывает, как обнаруживать текст с помощью PP-OCRv6_medium_det, используя [AutoModel](/docs/transformers/main/ru/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)
```

### Пакетный вывод

Вот как это можно сделать с помощью PP-OCRv6_medium_det, используя [AutoModel](/docs/transformers/main/ru/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)
```

[Источник](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/ru/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель PPOCRV6MediumDet для задач обнаружения текста.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации 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"`) : Режим интерполяции, используемый для увеличения или уменьшения размерности карт признаков в neck-сети.

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *необязательный*) : Конфигурация базовой модели.

neck_out_channels (`int`, *optional*, по умолчанию 256) : Количество выходных каналов из neck-сети, отвечающей за слияние и уточнение признаков.

reduce_factor (`int`, *optional*, по умолчанию 2) : Коэффициент сокращения каналов, используемый в neck-блоках для баланса между производительностью и сложностью.

intraclass_block_number (`int`, *optional*, по умолчанию 4) : Количество модулей Intra-Class Block, используемых для улучшения представления признаков.

intraclass_block_config (`dict`, *необязательный*, по умолчанию `None`) : Конфигурация модулей Intra-Class Block, если они используются для улучшения представления признаков.

scale_factor (`int`, *optional*, по умолчанию 2) : Коэффициент масштабирования, используемый для корректировки пространственного разрешения в картах признаков.

scale_factor_list (`list[int]`, *необязательный*, по умолчанию `None`) : Список коэффициентов масштабирования, используемых для корректировки пространственного разрешения в картах признаков.

kernel_list (`list[int]`, *optional*, по умолчанию `[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/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/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/ru/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Pp Ocrv6 Medium Det, выводящая необработанные скрытые состояния без какого-либо специализированного слоя на выходе.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации 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/ru/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor). Подробности см. в [PPOCRV5ServerDetImageProcessor.__call__()](/docs/transformers/main/ru/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) (`processor_class` использует [PPOCRV5ServerDetImageProcessor](/docs/transformers/main/ru/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/ru/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) и входных данных.

Метод forward модели [PPOCRV6MediumDetModel](/docs/transformers/main/ru/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetModel) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **last_hidden_state** (`torch.Tensor` формы `(batch_size, num_channels, height, width)`) -- Последовательность скрытых состояний на выходе последнего слоя модели.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, num_channels, height, width)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

