# SLANet

## Обзор

**SLANet** и **SLANet_plus** входят в серию специализированных лёгких моделей для распознавания структуры таблиц, ориентированных на точное определение структуры таблиц в документах и естественных сценах. Дополнительные сведения о серии моделей SLANet приведены в [официальной документации](https://www.paddleocr.ai/latest/en/version3.x/module_usage/table_structure_recognition.html).

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

SLANet — это модель распознавания структуры таблиц, разработанная командой Baidu PaddlePaddle Vision Team. Модель значительно повышает точность и скорость инференса при распознавании структуры таблиц за счёт использования лёгкого бэкбон-сетевого PP-LCNet, оптимизированного для CPU, модуля CSP-PAN для слияния признаков низкого и высокого уровней, а также модуля декодирования признаков SLA Head, который согласует структурную и позиционную информацию.

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

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

Приведённый ниже пример показывает, как обнаруживать текст с помощью SLANet, используя [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, AutoModelForTableRecognition

model_path="PaddlePaddle/SLANet_plus_safetensors"
model = AutoModelForTableRecognition.from_pretrained(model_path, device_map="auto")
image_processor = AutoImageProcessor.from_pretrained(model_path)

image = Image.open(BytesIO(httpx.get(image_url).content))
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
outputs = model(**inputs)

results = image_processor.post_process_table_recognition(outputs)

print(result['structure'])
print(result['structure_score'])
```

## SLANetConfig[[transformers.SLANetConfig]]

#### transformers.SLANetConfig[[transformers.SLANetConfig]]

```python
transformers.SLANetConfig(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, post_conv_out_channels: int = 96, out_channels: int = 50, hidden_size: int = 256, max_text_length: int = 500, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, hidden_act: str = 'hardswish', csp_kernel_size: int = 5, csp_num_blocks: int = 1)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/slanet/configuration_slanet.py#L31)

**Параметры:**

post_conv_out_channels (`int`, *optional*, по умолчанию 96) : Количество выходных каналов для свёрточного слоя после энкодера.

out_channels (`int`, *optional*, по умолчанию 50) : Размер словаря для головы предсказания токенов структуры таблицы, то есть количество различных токенов структуры, которые может предсказать модель.

hidden_size (`int`, *optional*, по умолчанию 256) : Размерность скрытых состояний в ячейке внимания GRU и в головах предсказания структуры/локации.

max_text_length (`int`, *optional*, по умолчанию 500) : Максимальное количество шагов авторегрессионного декодирования (токенов) для декодера структуры и расположения.

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

hidden_act (`str`, *необязательный*, по умолчанию `hardswish`) : Нелинейная функция активации (функция или строка) в декодере. Например, `"gelu"`, `"relu"`, `"silu"` и т. д.

csp_kernel_size (`int`, *optional*, по умолчанию 5) : Размер ядра слоя Cross Stage Partial (CSP).

csp_num_blocks (`int`, *необязательный*, по умолчанию 1) : Количество блоков внутри слоя Cross Stage Partial (CSP).

Это класс конфигурации для хранения настроек SlanetModel. Он используется для создания модели Slanet в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации [PaddlePaddle/SLANet_plus_safetensors](https://huggingface.co/PaddlePaddle/SLANet_plus_safetensors)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig).

## SLANetForTableRecognition[[transformers.SLANetForTableRecognition]]

#### transformers.SLANetForTableRecognition[[transformers.SLANetForTableRecognition]]

```python
transformers.SLANetForTableRecognition(config: SLANetConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/slanet/modeling_slanet.py#L455)

**Параметры:**

config ([SLANetConfig](/docs/transformers/main/ru/model_doc/slanet#transformers.SLANetConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель распознавания таблиц SLANet для задач распознавания таблиц. Оборачивает базовую модель SLANetPreTrainedModel и возвращает выходные данные, совместимые с API распознавания таблиц Transformers.

Эта модель наследуется от [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.SLANetForTableRecognition.forward]]

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

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/slanet/modeling_slanet.py#L464)

**Параметры:**

pixel_values (`torch.Tensor` формы `(batch_size, num_channels, image_size, image_size)`) : Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью [SLANeXtImageProcessor](/docs/transformers/main/ru/model_doc/slanext#transformers.SLANeXtImageProcessor). Подробности см. в [SLANeXtImageProcessor.__call__()](/docs/transformers/main/ru/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) (`processor_class` использует [SLANeXtImageProcessor](/docs/transformers/main/ru/model_doc/slanext#transformers.SLANeXtImageProcessor) для обработки изображений).

**Возвращает:** `SLANetForTableRecognitionOutput` или `tuple(torch.Tensor)`

Объект `SLANetForTableRecognitionOutput` или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([SLANetConfig](/docs/transformers/main/ru/model_doc/slanet#transformers.SLANetConfig)) и входных данных.

Метод forward класса [SLANetForTableRecognition](/docs/transformers/main/ru/model_doc/slanet#transformers.SLANetForTableRecognition) переопределяет специальный метод `__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)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **head_hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) -- Скрытые состояния SLANetSLAHead на каждом шаге предсказания, количество которых варьируется до максимум `self.config.max_text_length` состояний (в зависимости от ранних выходов).
- **head_attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Веса внимания SLANetSLAHead на каждом шаге предсказания, количество которых варьируется до `self.config.max_text_length` (в зависимости от ранних выходов).

## SLANetBackbone[[transformers.SLANetBackbone]]

#### transformers.SLANetBackbone[[transformers.SLANetBackbone]]

```python
transformers.SLANetBackbone(config: SLANetConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/slanet/modeling_slanet.py#L428)

#### forward[[transformers.SLANetBackbone.forward]]

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

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/slanet/modeling_slanet.py#L436)

**Параметры:**

hidden_states (`torch.Tensor`) : вход в слой формы `(batch, seq_len, embed_dim)`

**Возвращает:** `BaseModelOutputWithNoAttention` или `tuple(torch.Tensor)`

Объект `BaseModelOutputWithNoAttention` или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([SLANetConfig](/docs/transformers/main/ru/model_doc/slanet#transformers.SLANetConfig)) и входных данных.

Метод forward класса [SLANetBackbone](/docs/transformers/main/ru/model_doc/slanet#transformers.SLANetBackbone) переопределяет специальный метод `__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)`.

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

## SLANetSLAHead[[transformers.SLANetSLAHead]]

#### transformers.SLANetSLAHead[[transformers.SLANetSLAHead]]

```python
transformers.SLANetSLAHead(config: dict | None = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/slanet/modeling_slanet.py#L138)

