# FocalNet

## Обзор

Модель FocalNet была предложена в статье [Focal Modulation Networks](https://huggingface.co/papers/2203.11926) авторами Jianwei Yang, Chunyuan Li, Xiyang Dai, Lu Yuan, Jianfeng Gao. FocalNets полностью заменяют само-внимание (используемое в моделях, таких как [ViT](vit) и [Swin](swin)) механизмом фокальной модуляции для моделирования взаимодействий между токенами в задачах компьютерного зрения. Авторы утверждают, что FocalNets превосходят модели на основе само-внимания с сопоставимыми вычислительными затратами на задачах классификации изображений, обнаружения объектов и сегментации.

Аннотация из статьи следующая:

*Мы предлагаем сети фокальной модуляции (в сокращённом виде — FocalNets), в которых само-внимание (SA) полностью заменяется механизмом фокальной модуляции для моделирования взаимодействий между токенами в задачах компьютерного зрения. Фокальная модуляция состоит из трёх компонентов: (i) иерархическая контекстуализация, реализованная с помощью стека слоёв глубинной свёртки, для кодирования визуальных контекстов от коротких до длинных диапазонов; (ii) агрегация с гейтами для селективного сбора контекстов для каждого запросного токена на основе его содержимого; и (iii) поэлементная модуляция или аффинное преобразование для внедрения агрегированного контекста в запрос. Обширные эксперименты показывают, что FocalNets превосходят передовые аналоги на основе SA (например, Swin и Focal Transformers) при сопоставимых вычислительных затратах на задачах классификации изображений, обнаружения объектов и сегментации. В частности, FocalNets с размером tiny и base достигают точности top-1 82,3% и 83,9% на ImageNet-1K. После предобучения на ImageNet-22K с разрешением 224, модель достигает точности top-1 86,5% и 87,3% при дообучении с разрешением 224 и 384 соответственно. При переносе на задачи нижнего уровня FocalNets демонстрируют явное превосходство. Для обнаружения объектов с Mask R-CNN FocalNet base, обученный с расписанием 1\times, превосходит аналог Swin на 2,1 балла и уже превосходит Swin, обученный с расписанием 3\times (49,0 против 48,5). Для семантической сегментации с UPerNet FocalNet base в одно-масштабном режиме превосходит Swin на 2,4 балла и превосходит Swin в много-масштабном режиме (50,5 против 49,7). Используя большой FocalNet и Mask2former, мы достигли 58,5 mIoU для семантической сегментации ADE20K и 57,9 PQ для паноптической сегментации COCO. Используя огромный FocalNet и DINO, мы достигли 64,3 и 64,4 mAP на COCO minival и test-dev соответственно, установив новый SoTA поверх значительно более крупных моделей на основе внимания, таких как Swinv2-G и BEIT-3.*

Эта модель была предоставлена пользователем [nielsr](https://huggingface.co/nielsr). Исходный код можно найти [здесь](https://github.com/microsoft/FocalNet).

## FocalNetConfig[[transformers.FocalNetConfig]]

#### transformers.FocalNetConfig[[transformers.FocalNetConfig]]

```python
transformers.FocalNetConfig(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, image_size: int | list[int] | tuple[int, int] = 224, patch_size: int | list[int] | tuple[int, int] = 4, num_channels: int = 3, embed_dim: int = 96, use_conv_embed: bool = False, hidden_sizes: list[int] | tuple[int, ...] = (192, 384, 768, 768), depths: list[int] | tuple[int, ...] = (2, 2, 6, 2), focal_levels: list[int] | tuple[int, ...] = (2, 2, 2, 2), focal_windows: list[int] | tuple[int, ...] = (3, 3, 3, 3), hidden_act: str = 'gelu', mlp_ratio: float = 4.0, hidden_dropout_prob: float | int = 0.0, drop_path_rate: float | int = 0.1, use_layerscale: bool = False, layerscale_value: float = 0.0001, use_post_layernorm: bool = False, use_post_layernorm_in_modulation: bool = False, normalize_modulator: bool = False, initializer_range: float = 0.02, layer_norm_eps: float = 1e-05, encoder_stride: int = 32, _out_features: list[str] | None = None, _out_indices: list[int] | None = None)
```

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

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

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

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

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

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

use_conv_embed (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли свёрточное встраивание. Авторы отметили, что использование свёрточного встраивания обычно улучшает производительность, но по умолчанию оно не используется.

hidden_sizes (`Union[list[int], tuple[int, ...]]`, *необязательный*, по умолчанию `(192, 384, 768, 768)`) : Размерность (скрытый размер) на каждом этапе модели.

depths (`Union[list[int], tuple[int, ...]]`, *необязательный*, по умолчанию `(2, 2, 6, 2)`) : Глубина каждого слоя в Transformer.

focal_levels (`list(int)`, *необязательный*, по умолчанию `[2, 2, 2, 2]`) : Количество фокусных уровней в каждом слое соответствующих стадий в кодере.

focal_windows (`list(int)`, *необязательный*, по умолчанию `[3, 3, 3, 3]`) : Размер фокального окна в каждом слое соответствующих стадий в кодере.

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

mlp_ratio (`float`, *необязательный*, по умолчанию `4.0`) : Соотношение скрытого размера MLP к размеру эмбеддинга.

hidden_dropout_prob (`float`, *optional*, по умолчанию 0.0) : Вероятность dropout для всех полносвязных слоев в эмбеддингах и энкодере.

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

use_layerscale (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли layer scale в энкодере.

layerscale_value (`float`, *необязательный*, по умолчанию 0.0001) : Начальное значение масштаба слоя.

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

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

normalize_modulator (`bool`, *необязательный*, по умолчанию `False`) : Нужно ли нормализовать модулятор.

initializer_range (`float`, *необязательный*, по умолчанию `0.02`) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

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

encoder_stride (`int`, *optional*, по умолчанию 32) : Коэффициент увеличения пространственного разрешения в головной части декодера для моделирования изображений с масками.

Это класс конфигурации для хранения настроек модели FocalNetModel. Он используется для создания модели Focalnet в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации [microsoft/focalnet-tiny](https://huggingface.co/microsoft/focalnet-tiny)

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

Пример:

```python
>>> from transformers import FocalNetConfig, FocalNetModel

>>> # Initializing a FocalNet microsoft/focalnet-tiny style configuration
>>> configuration = FocalNetConfig()

>>> # Initializing a model (with random weights) from the microsoft/focalnet-tiny style configuration
>>> model = FocalNetModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## FocalNetModel[[transformers.FocalNetModel]]

#### transformers.FocalNetModel[[transformers.FocalNetModel]]

```python
transformers.FocalNetModel(config: FocalNetConfig, add_pooling_layer = True, use_mask_token = False)
```

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

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

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

add_pooling_layer (`bool`, *необязательный*, по умолчанию `True`) : Нужно ли добавлять слой пулинга

use_mask_token (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли токен маски для моделирования замаскированных изображений.

Модель Focalnet без дополнительных компонентов, выводящая необработанные скрытые состояния без какого-либо специализированного слоя на выходе.

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

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, bool_masked_pos: typing.Optional[torch.BoolTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

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

bool_masked_pos (`torch.BoolTensor` формы `(batch_size, num_patches)`) : Булевы позиции маски. Указывает, какие патчи замаскированы (1), а какие нет (0).

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

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

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

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

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

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

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

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

Пример:

```python
```

## FocalNetForMaskedImageModeling[[transformers.FocalNetForMaskedImageModeling]]

#### transformers.FocalNetForMaskedImageModeling[[transformers.FocalNetForMaskedImageModeling]]

```python
transformers.FocalNetForMaskedImageModeling(config: FocalNetConfig)
```

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

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

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

Модель FocalNet с декодером для моделирования замаскированных изображений.

Это следует той же реализации, что и в [SimMIM](https://huggingface.co/papers/2111.09886).

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

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, bool_masked_pos: typing.Optional[torch.BoolTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

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

bool_masked_pos (`torch.BoolTensor` формы `(batch_size, num_patches)`) : Булевы позиции маски. Указывает, какие патчи замаскированы (1), а какие нет (0).

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

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

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

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

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

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если передан `bool_masked_pos`) -- Потеря маскированного моделирования изображений (MLM).
- **восстановление** (`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)`.

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

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

Примеры:
```python
>>> from transformers import AutoImageProcessor, FocalNetConfig, FocalNetForMaskedImageModeling
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/focalnet-base-simmim-window6-192")
>>> config = FocalNetConfig()
>>> model = FocalNetForMaskedImageModeling(config)

>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.logits
>>> list(reconstructed_pixel_values.shape)
[1, 3, 192, 192]
```

## FocalNetForImageClassification[[transformers.FocalNetForImageClassification]]

#### transformers.FocalNetForImageClassification[[transformers.FocalNetForImageClassification]]

```python
transformers.FocalNetForImageClassification(config: FocalNetConfig)
```

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

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

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

Модель FocalNet с головой для классификации изображений (линейный слой поверх пуллинг-выхода), например, для ImageNet.

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

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

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

labels (`torch.LongTensor` формы `(batch_size,)`, *необязательный*) : Метки для вычисления потерь классификации/регрессии изображений. Индексы должны находиться в диапазоне `[0, ..., config.num_labels - 1]`. Если `config.num_labels == 1`, вычисляется потеря регрессии (среднеквадратичная потеря), если `config.num_labels > 1`, вычисляется потеря классификации (кросс-энтропия).

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

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

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

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

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

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если задан `labels`) -- Потери классификации (или регрессии, если config.num_labels==1).
- **logits** (`torch.Tensor` формы `(batch_size, config.num_labels)`) — Оценки классификации (или регрессии, если config.num_labels==1) до применения SoftMax.
- **hidden_states** (`tuple[torch.Tensor]`, *необязательный*, возвращается, если передано `output_hidden_states=True` или если `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

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

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

Пример:

```python
>>> from transformers import AutoImageProcessor, FocalNetForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/focalnet-tiny")
>>> model = FocalNetForImageClassification.from_pretrained("microsoft/focalnet-tiny")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...
```

