# SLANet

## 개요

**SLANet**과 **SLANet_plus**는 문서 및 자연 장면에서 표 구조를 정확하게 인식하는 데 초점을 맞춘 표 구조 인식 전용 경량 모델 시리즈의 일부입니다. SLANet 시리즈 모델에 대한 자세한 내용은 [공식 문서](https://www.paddleocr.ai/latest/en/version3.x/module_usage/table_structure_recognition.html)를 참고하세요.

## 모델 아키텍처

SLANet은 Baidu PaddlePaddle Vision Team이 개발한 표 구조 인식 모델입니다. 이 모델은 CPU에 적합한 경량 백본 네트워크인 PP-LCNet, 고-저수준 특징 융합 모듈인 CSP-PAN, 그리고 구조 및 위치 정보를 정렬하는 특징 디코딩 모듈인 SLA Head를 채택하여 표 구조 인식의 정확도와 추론 속도를 크게 향상시킵니다.

## 사용

### 단일 입력 추론

아래 예제는 [AutoModel](/docs/transformers/main/ko/model_doc/auto#transformers.AutoModel)을 사용하여 SLANet으로 텍스트를 감지하는 방법을 보여줍니다.

```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`, *선택 사항*, 기본값 96) : 인코더 후처리 컨볼루션 레이어의 출력 채널 수.

out_channels (`int`, *선택 사항*, 기본값 50) : 테이블 구조 토큰 예측 헤드의 어휘 크기, 즉 모델이 예측할 수 있는 고유한 구조 토큰의 수입니다.

hidden_size (`int`, *선택 사항*, 기본값 256) : attention GRU 셀 및 구조/위치 예측 헤드에서 hidden states의 차원입니다.

max_text_length (`int`, *선택 사항*, 기본값 500) : 구조 및 위치 디코더의 오토레거시 디코딩 단계(토큰) 최대 수.

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *선택*) : 백본 모델의 구성입니다.

hidden_act (`str`, *선택 사항*, 기본값 `hardswish`) : 디코더의 비선형 활성화 함수(함수 또는 문자열). 예를 들어, `"gelu"`, `"relu"`, `"silu"` 등.

csp_kernel_size (`int`, *선택 사항*, 기본값 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)와 유사한 구성이 생성됩니다.

Configuration 객체는 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)를 상속하며, 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 [PreTrainedConfig](/docs/transformers/main/ko/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/ko/model_doc/slanet#transformers.SLANetConfig)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

작업을 위한 SLANet Table Recognition 모델. 핵심 SLANetPreTrainedModel을 래핑하여 Transformers의 table recognition API와 호환되는 출력을 반환합니다.

이 모델은 [PreTrainedModel](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel)에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대해서는 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법과 동작에 관한 모든 사항은 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`, shape `(batch_size, num_channels, image_size, image_size)`) : 입력 이미지에 해당하는 텐서입니다. 픽셀 값은 [SLANeXtImageProcessor](/docs/transformers/main/ko/model_doc/slanext#transformers.SLANeXtImageProcessor)를 사용하여 얻을 수 있습니다. 자세한 내용은 [SLANeXtImageProcessor.__call__()](/docs/transformers/main/ko/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__)를 참조하세요 (`processor_class`는 이미지 처리에 [SLANeXtImageProcessor](/docs/transformers/main/ko/model_doc/slanext#transformers.SLANeXtImageProcessor)를 사용합니다).

**반환값:** `SLANetForTableRecognitionOutput` 또는 `tuple(torch.Tensor)`

`SLANetForTableRecognitionOutput` 또는 `torch.Tensor`의 튜플(`return_dict=False`가 전달되거나 `config.return_dict=False`인 경우)이며, [SLANetConfig](/docs/transformers/main/ko/model_doc/slanet#transformers.SLANetConfig) 및 입력에 따라 다양한 요소를 포함합니다.

[SLANetForTableRecognition](/docs/transformers/main/ko/model_doc/slanet#transformers.SLANetForTableRecognition)의 forward 메서드는 `__call__` 특수 메서드를 오버라이드합니다.

`Module` 인스턴스는 전처리 및 후처리 단계를 실행하는 것을 처리하지만, 이 함수는 해당 단계를 조용히 무시하므로, 순전파(forward pass) 레시피를 이 함수 내에서 정의해야 하더라도 이후에는 이 함수 대신 `Module` 인스턴스를 호출해야 합니다.

- **last_hidden_state** (`torch.Tensor`, shape `(batch_size, num_channels, height, width)`) -- 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.
- **hidden_states** (`tuple(torch.Tensor)`, *선택 사항*, `output_hidden_states=True`가 전달되었거나 `config.output_hidden_states=True`인 경우 반환됨) -- `torch.Tensor`의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은 `(batch_size, num_channels, height, width)`입니다.

  각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- **head_hidden_states** (`tuple(torch.Tensor)`, *선택 사항*, `output_hidden_states=True`가 전달되거나 `config.output_hidden_states=True`인 경우 반환됨) -- 각 예측 단계에서 SLANetSLAHead의 hidden-states입니다. 조기 종료(early exit)에 따라 최대 `self.config.max_text_length`개의 state까지 달라질 수 있습니다.
- **head_attentions** (`tuple(torch.Tensor)`, *선택 사항*, `output_attentions=True`가 전달되거나 `config.output_attentions=True`인 경우 반환됨) -- 각 예측 단계에서 SLANetSLAHead의 어텐션입니다. 조기 종료(early exits)에 따라 최대 `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/ko/model_doc/slanet#transformers.SLANetConfig)) 및 입력에 따라 다양한 요소를 포함합니다.

[SLANetBackbone](/docs/transformers/main/ko/model_doc/slanet#transformers.SLANetBackbone)의 forward 메서드는 `__call__` 특수 메서드를 오버라이드합니다.

`Module` 인스턴스는 전처리 및 후처리 단계를 실행하는 것을 처리하지만, 이 함수는 해당 단계를 조용히 무시하므로, 순전파(forward pass) 레시피를 이 함수 내에서 정의해야 하더라도 이후에는 이 함수 대신 `Module` 인스턴스를 호출해야 합니다.

- **last_hidden_state** (`torch.Tensor`, shape `(batch_size, num_channels, height, width)`) -- 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.
- **hidden_states** (`tuple(torch.Tensor)`, *선택 사항*, `output_hidden_states=True`가 전달되었거나 `config.output_hidden_states=True`인 경우 반환됨) -- `torch.Tensor`의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은 `(batch_size, num_channels, height, width)`입니다.

  각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.

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

