# PPLCNetV3

[PPLCNetV3](https://huggingface.co/papers/2109.15099) — это лёгкий свёрточный бэкбон, оптимизированный для CPU, предназначенный для эффективной классификации изображений и других задач компьютерного зрения. Он основан на архитектуре PP-LCNet и дополнен улучшенными стратегиями обучения и структурными доработками, обеспечивающими более оптимальный баланс между точностью и задержкой на CPU-оборудовании.

## Примечания

- 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`, *optional*, по умолчанию 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_stride (`int`, *optional*, по умолчанию 2) : Шаг для сверточного слоя стебля.

reduction (`int`, *optional*, по умолчанию 4) : Коэффициент сжатия для размерности каналов признаков в блоках squeeze-and-excitation (SE), используемый для уменьшения количества параметров модели и вычислительной сложности при сохранении выразительности признаков.

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

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

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

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

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

Базовая модель PPLCNetV3 для извлечения признаков.

Эта модель наследуется от [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.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` формы `(batch_size, num_channels, image_size, image_size)`) : Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью `image_processor_class`. Подробности см. в `image_processor_class.__call__` (`processor_class` использует `image_processor_class` для обработки изображений).

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

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

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

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

- **feature_maps** (`tuple(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, sequence_length, hidden_size)` или `(batch_size, num_channels, height, width)`, в зависимости от базовой модели.

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

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Примеры:

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

