# PPLCNetV3

[PPLCNetV3](https://huggingface.co/papers/2109.15099)는 효율적인 이미지 분류 및 하위 비전 작업을 위해 설계된 경량 CPU 최적화 컨볼루션 백본입니다. PP-LCNet 아키텍처를 기반으로 하며, CPU 하드웨어에서 정확도와 지연 시간 간의 트레이드오프를 개선하기 위해 향상된 학습 전략과 구조적 정교화를 적용했습니다.

## The input is a single word "Notes".

참고

- PPLCNetV3는 백본 네트워크로만 제공됩니다. 사전 학습된 이미지 분류 체크포인트는 공식적으로 공개되지 않았습니다.

## PPLCNetV3Config[[transformers.PPLCNetV3Config]]

#### transformers.PPLCNetV3Config[[transformers.PPLCNetV3Config]]

```python
transformers.PPLCNetV3Config(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, scale: float | int = 1.0, block_configs: list | None = None, stem_channels: int = 16, stem_stride: int = 2, reduction: int = 4, divisor: int = 8, hidden_act: str = 'hardswish', _out_features: list[str] | None = None, _out_indices: list[int] | None = None, conv_symmetric_num: int = 4)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_lcnet_v3/configuration_pp_lcnet_v3.py#L31)

**매개변수:**

scale (`float`, *선택 사항*, 기본값 1.0) : 모델의 채널 차원을 위한 스케일링 팩터로, 전체 아키텍처를 변경하지 않고 모델 크기와 계산 비용을 조정하는 데 사용됩니다 (예: 0.25, 0.5, 1.0, 1.5).

block_configs (`list[list[tuple]]`, *선택 사항*, 기본값 `None`) : 각 스테이지의 각 블록에 대한 구성입니다. 각 튜플에는 다음이 포함됩니다: (kernel_size, in_channels, out_channels, stride, use_squeeze_excitation). `None`인 경우 기본 PP-LCNet 구성을 사용합니다.

stem_channels (`int`, *선택 사항*, 기본값 16) : stem 레이어의 출력 채널 수입니다.

stem_stride (`int`, *선택 사항*, 기본값 2) : stem convolution layer의 stride입니다.

reduction (`int`, *선택 사항*, 기본값 4) : squeeze-and-excitation (SE) 블록에서 feature channel 차원의 축소 계수입니다. feature의 표현력을 유지하면서 모델 파라미터 수와 계산 복잡도를 줄이는 데 사용됩니다.

divisor (`int`, *선택 사항*, 기본값 8) : 다양한 모델 파라미터(예: 채널 차원, 커널 크기)가 이 값의 배수가 되도록 보장하는 데 사용되는 나눗셈 값입니다. 이를 통해 효율적인 모델 구현과 자원 활용을 촉진합니다.

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

conv_symmetric_num (`int`, *선택 사항*, 기본값 `4`) : 학습 가능한 재매개변수화(reparameterization) 레이어에서 kxk 컨볼루션 브랜치의 수입니다. 학습 시 다중 브랜치 구조를 통해 특징 추출 능력을 강화하고, 추론 시 구조적 재매개변수화를 통해 효율적인 추론을 가능하게 합니다.

이것은 Pp Lcnet V3Model의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Pp Lcnet V3 모델을 인스턴스화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 인스턴스화하면 [PaddlePaddle/Not_yet_released](https://huggingface.co/PaddlePaddle/Not_yet_released)와 유사한 구성이 생성됩니다.

Configuration 객체는 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)를 상속하며, 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)의 문서를 참고하세요.

## PPLCNetV3Backbone[[transformers.PPLCNetV3Backbone]]

#### transformers.PPLCNetV3Backbone[[transformers.PPLCNetV3Backbone]]

```python
transformers.PPLCNetV3Backbone(config: PPLCNetV3Config)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_lcnet_v3/modeling_pp_lcnet_v3.py#L327)

**매개변수:**

config ([PPLCNetV3Config](/docs/transformers/main/ko/model_doc/pp_lcnet_v3#transformers.PPLCNetV3Config)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

특징 추출을 위한 PPLCNetV3 백본 모델.

이 모델은 [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.PPLCNetV3Backbone.forward]]

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

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_lcnet_v3/modeling_pp_lcnet_v3.py#L340)

**매개변수:**

pixel_values (`torch.Tensor`, shape `(batch_size, num_channels, image_size, image_size)`) : 입력 이미지에 해당하는 텐서입니다. 픽셀 값은 `image_processor_class`를 사용하여 얻을 수 있습니다. 자세한 내용은 `image_processor_class.__call__`를 참조하세요 (`processor_class`는 이미지 처리에 `image_processor_class`를 사용합니다).

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

구성([PPLCNetV3Config](/docs/transformers/main/ko/model_doc/pp_lcnet_v3#transformers.PPLCNetV3Config))과 입력에 따라 다양한 요소를 포함하는 `BackboneOutput` 또는 `torch.Tensor`의 튜플(`return_dict=False`가 전달되거나 `config.return_dict=False`인 경우).

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

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

- **feature_maps** (`tuple(torch.Tensor)`, shape `(batch_size, num_channels, height, width)`) -- 각 단계의 feature maps.
- **hidden_states** (`tuple(torch.Tensor)`, *선택*, `output_hidden_states=True`가 전달되거나 `config.output_hidden_states=True`인 경우 반환) -- 백본에 따라 shape가 `(batch_size, sequence_length, hidden_size)` 또는 `(batch_size, num_channels, height, width)`인 `torch.Tensor` 튜플 (임베딩 출력 1개 + 각 레이어 출력 1개)

  각 단계의 출력에서 모델의 Hidden-states와 초기 임베딩 출력을 포함합니다.
- **attentions** (`tuple(torch.Tensor)`, *선택*, `output_attentions=True`가 전달되거나 `config.output_attentions=True`인 경우 반환) -- 각 레이어당 하나씩, shape가 `(batch_size, num_heads, sequence_length, sequence_length)`인 `torch.Tensor`의 튜플. backbone이 attention을 사용하는 경우에만 적용됩니다.

  self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치입니다.

예:

```python
>>> from transformers import PPLCNetV3Config, PPLCNetV3Backbone
>>> import torch

>>> config = PPLCNetV3Config()
>>> model = PPLCNetV3Backbone(config)

>>> pixel_values = torch.randn(1, 3, 224, 224)

>>> with torch.no_grad():
...     outputs = model(pixel_values)

>>> feature_maps = outputs.feature_maps
>>> list(feature_maps[-1].shape)
```

