# SLANeXt

## Обзор

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

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

Серия SLANeXt представляет собой новое поколение моделей распознавания структуры таблиц, разработанных командой Baidu PaddlePaddle Vision Team. SLANeXt ориентирована на распознавание структуры таблиц и обучает отдельные веса для таблиц с рамками и без рамок. Способность распознавать все типы таблиц была значительно улучшена, особенно для таблиц с рамками.

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

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

Приведённый ниже пример показывает, как обнаруживать текст с помощью PP-OCRV5_Mobile_Det, используя [AutoModel](/docs/transformers/v5.23.0/ru/model_doc/auto#transformers.AutoModel).

```python
import requests
from PIL import Image

from transformers import AutoImageProcessor, AutoModelForTableRecognition

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

image = Image.open(requests.get("https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/paddle_table_recognition.jpg", stream=True).raw)
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'])
```

## SLANeXtConfig[[transformers.SLANeXtConfig]]

#### transformers.SLANeXtConfig[[transformers.SLANeXtConfig]]

```python
transformers.SLANeXtConfig(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, vision_config: dict | transformers.models.slanext.configuration_slanext.SLANeXtVisionConfig | None = None, post_conv_in_channels: int = 256, post_conv_out_channels: int = 512, out_channels: int = 50, hidden_size: int = 512, max_text_length: int = 500)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/configuration_slanext.py#L70)

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

vision_config (`dict` или [SLANeXtVisionConfig](/docs/transformers/v5.23.0/ru/model_doc/slanext#transformers.SLANeXtVisionConfig), *необязательный*) : Конфигурация для визуального энкодера. Если `None`, используется конфигурация [SLANeXtVisionConfig](/docs/transformers/v5.23.0/ru/model_doc/slanext#transformers.SLANeXtVisionConfig) по умолчанию.

post_conv_in_channels (`int`, *необязательный*, по умолчанию 256) : Количество входных каналов для свёрточного слоя после энкодера.

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

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

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

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

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

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

## SLANeXtVisionConfig[[transformers.SLANeXtVisionConfig]]

#### transformers.SLANeXtVisionConfig[[transformers.SLANeXtVisionConfig]]

```python
transformers.SLANeXtVisionConfig(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, hidden_size: int = 768, output_channels: int = 256, num_hidden_layers: int = 12, num_attention_heads: int = 12, num_channels: int = 3, image_size: int = 512, patch_size: int | list[int] | tuple[int, int] = 16, hidden_act: str = 'gelu', layer_norm_eps: float = 1e-06, attention_dropout: float | int = 0.0, initializer_range: float = 1e-10, qkv_bias: bool = True, use_abs_pos: bool = True, use_rel_pos: bool = True, window_size: int = 14, global_attn_indexes: list[int] | tuple[int, ...] = (2, 5, 8, 11), mlp_dim: int = 3072)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/configuration_slanext.py#L30)

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

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

output_channels (`int`, *optional*, по умолчанию 256) : Размерность выходных каналов в Patch Encoder.

num_hidden_layers (`int`, *необязательный*, по умолчанию `12`) : Количество скрытых слоев в декодере Transformer.

num_attention_heads (`int`, *необязательный*, по умолчанию `12`) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

num_channels (`int`, *необязательный*, по умолчанию `3`) : Количество входных каналов.

image_size (`int`, *необязательный*, по умолчанию `512`) : Размер (разрешение) каждого изображения.

patch_size (`Union[int, list[int], tuple[int, int]]`, *необязательный*, по умолчанию `16`) : Размер (разрешение) каждого патча.

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

layer_norm_eps (`float`, *необязательный*, по умолчанию `1e-06`) : Значение epsilon, используемое слоями нормализации.

attention_dropout (`Union[float, int]`, *необязательный*, по умолчанию `0.0`) : Коэффициент dropout для вероятностей внимания.

initializer_range (`float`, *optional*, по умолчанию `1e-10`) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

qkv_bias (`bool`, *необязательный*, по умолчанию `True`) : Добавлять ли смещение (bias) к запросам, ключам и значениям.

use_abs_pos (`bool`, *необязательный*, по умолчанию `True`) : Использовать ли абсолютное встраивание позиций.

use_rel_pos (`bool`, *необязательный*, по умолчанию `True`) : Использовать ли встраивание относительных позиций.

window_size (`int`, *optional*, по умолчанию 14) : Размер окна для относительного положения.

global_attn_indexes (`list[int]`, *необязательный*, по умолчанию `[2, 5, 8, 11]`) : Индексы глобальных слоев внимания.

mlp_dim (`int`, *optional*, по умолчанию 3072) : Размерность слоя MLP в кодере Transformer.

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

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

## SLANeXtForTableRecognition[[transformers.SLANeXtForTableRecognition]]

#### transformers.SLANeXtForTableRecognition[[transformers.SLANeXtForTableRecognition]]

```python
transformers.SLANeXtForTableRecognition(config: SLANeXtConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/modeling_slanext.py#L618)

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

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

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

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

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.SLANeXtForTableRecognition.forward]]

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

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/modeling_slanext.py#L625)

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

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

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

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

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

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

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

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

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

## SLANeXtBackbone[[transformers.SLANeXtBackbone]]

#### transformers.SLANeXtBackbone[[transformers.SLANeXtBackbone]]

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

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/modeling_slanext.py#L522)

## SLANeXtSLAHead[[transformers.SLANeXtSLAHead]]

#### transformers.SLANeXtSLAHead[[transformers.SLANeXtSLAHead]]

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

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/modeling_slanext.py#L546)

## SLANeXtImageProcessor[[transformers.SLANeXtImageProcessor]]

#### transformers.SLANeXtImageProcessor[[transformers.SLANeXtImageProcessor]]

```python
transformers.SLANeXtImageProcessor(**kwargs: *<class 'transformers.processing_utils.ImagesKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/image_processing_slanext.py#L38)

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

do_convert_rgb (`bool`, *kwargs*, *необязательный*, по умолчанию `True`) : Преобразовать ли изображение в RGB.

do_resize (`bool`, *kwargs*, *optional*, по умолчанию `True`) : Нужно ли изменять размер изображения.

size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*, по умолчанию `{'height' : 512, 'width': 512}`): описывает максимальные размеры входных данных для модели.

default_to_square (`bool`, *kwargs*, *optional*, по умолчанию `True`) : Использовать ли квадратное изображение по умолчанию при изменении размера, если size является int.

crop_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*) : Размер выходного изображения после применения `center_crop`.

resample (`Annotated[Union[int, PILImageResampling, NoneType], None]`, *kwargs*, по умолчанию `2`) : Фильтр ресемплинга, используемый при изменении размера изображения. Может быть одним из значений перечисления `PILImageResampling`. Действует только если `do_resize` установлено в `True`.

do_rescale (`bool`, *kwargs*, *optional*, по умолчанию `True`) : Нужно ли масштабировать изображение.

rescale_factor (`float`, *kwargs*, *optional*, по умолчанию `0.00392156862745098`) : Коэффициент масштабирования для изменения масштаба изображения, если `do_rescale` установлен в `True`.

do_normalize (`bool`, *kwargs*, *optional*, по умолчанию `True`) : Нужно ли нормализовать изображение.

image_mean (`Union[float, list[float], tuple[float, ...]]`, *kwargs*, *optional*, по умолчанию `[0.485, 0.456, 0.406]`) : Средние значения изображения, используемые для нормализации. Влияет только в том случае, если `do_normalize` установлено в `True`.

image_std (`Union[float, list[float], tuple[float, ...]]`, *kwargs*, *optional*, по умолчанию `[0.229, 0.224, 0.225]`) : Стандартное отклонение изображения, используемое для нормализации. Влияет только в том случае, если `do_normalize` установлено в `True`.

do_pad (`bool`, *kwargs*, *optional*, по умолчанию `True`) : Нужно ли дополнять изображение. Дополнение выполняется либо до максимального размера в батче, либо до фиксированного квадратного размера для каждого изображения. Точная стратегия дополнения зависит от модели.

pad_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*, по умолчанию `{'height' : 512, 'width': 512}`): размер в формате `{"height": int, "width" int}`, до которого следует дополнить изображения. Должен быть больше любого размера изображения, переданного для предобработки. Если `pad_size` не указан, изображения будут дополнены до наибольшей высоты и ширины в батче. Применяется только при `do_pad=True.`

do_center_crop (`bool`, *kwargs*, *optional*) : Центрировать ли изображение при обрезке.

data_format (`Union[str, ~image_utils.ChannelDimension]`, *kwargs*, *необязательный*) : Поддерживается только `ChannelDimension.FIRST`. Добавлено для совместимости с медленными процессорами.

input_data_format (`Union[str, ~image_utils.ChannelDimension]`, *kwargs*, *optional*) : Формат размерности каналов для входного изображения. Если не задано, формат размерности каналов определяется по входному изображению. Может быть одним из: - `"channels_first"` или `ChannelDimension.FIRST`: изображение в формате (num_channels, height, width). - `"channels_last"` или `ChannelDimension.LAST`: изображение в формате (height, width, num_channels). - `"none"` или `ChannelDimension.NONE`: изображение в формате (height, width).

device (`Annotated[Union[str, torch.device, NoneType], None]`, *kwargs*) : Устройство для обработки видео. Если не задано, устройство определяется на основе входных видео.

return_tensors (`Annotated[str | ~utils.generic.TensorType | None, None]`, *kwargs*) : Возвращает стопку тензоров, если установлено значение `'pt'`, иначе возвращает список тензоров.

disable_grouping (`bool`, *kwargs*, *optional*) : Указывает, следует ли отключить группировку изображений по размеру для их индивидуальной обработки, а не пачками. Если значение равно None, оно будет установлено в True, если изображения находятся на CPU, и в False в противном случае. Этот выбор основан на эмпирических наблюдениях, подробно описанных здесь: https://github.com/huggingface/transformers/pull/38157

image_seq_length (`int`, *kwargs*, *необязательный*) : Количество токенов изображения, используемых для каждого изображения во входных данных. Добавлено для обратной совместимости, но в будущих моделях это значение следует задавать как атрибут процессора.

Создает процессор изображений SLANeXtImageProcessor.

#### init_decoder[[transformers.SLANeXtImageProcessor.init_decoder]]

```python
init_decoder()
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/image_processing_slanext.py#L170)

Инициализируйте словарь декодера для распознавания структуры таблицы.

Создаёт словарь символов, сопоставляющий токены структуры HTML-таблицы (например, `<thead>`, `<tr>`, `<td>`, атрибуты colspan/rowspan) целочисленным индексам. Словарь включает специальные токены `"sos"` (начало последовательности) и `"eos"` (конец последовательности). Слитые токены `<td></td>` используются вместо отдельных токенов `<td>`, когда это применимо.

#### post_process_table_recognition[[transformers.SLANeXtImageProcessor.post_process_table_recognition]]

```python
post_process_table_recognition(outputs)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/slanext/image_processing_slanext.py#L206)

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

outputs (`SLANeXtForTableRecognitionOutput`) : Сырые выходные данные модели SLANeXt. Поле `last_hidden_state` содержит предсказанные распределения вероятностей по словарю структур на каждом шаге декодирования, с формой `(batch_size, max_text_length, num_classes)`.

**Возвращает:** `dict`

Словарь, содержащий:
- **структура** (`list[str]`): Предсказанная структура HTML-таблицы в виде списка токенов, обёрнутая в теги `<html>`, `<body>` и `<table>`.
- **structure_score** (`float`): Средний показатель уверенности по всем предсказанным токенам.

После получения сырых выходов модели декодируйте предсказанную структуру таблицы в последовательность HTML-токенов.

Преобразует предсказанные моделью распределения вероятностей по словарю структур в последовательность HTML-токенов, представляющих структуру таблицы. Декодированные токены оборачиваются в теги `<html>`, `<body>` и `<table>`, чтобы сформировать полную структуру HTML-таблицы.

