# DEIMv2

## Обзор

DEIMv2 (DETR with Improved Matching v2) был предложен в [DEIMv2: Real-Time Object Detection Meets DINOv3](https://huggingface.co/papers/2509.20787) Shihua Huang, Yongjie Hou, Longfei Liu, Xuanlong Yu и Xi Shen.

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

*Благодаря простому и эффективному Dense O2O, DEIM демонстрирует более быструю сходимость и улучшенную производительность. В данной работе мы расширяем его с помощью фич DINOv3, что приводит к созданию DEIMv2. DEIMv2 включает восемь размеров моделей от X до Atto, охватывая развертывание на GPU, edge-устройствах и мобильных платформах. Для вариантов X, L, M и S мы используем предобученные / дистиллированные бэкбоны DINOv3 и вводим Spatial Tuning Adapter (STA), который эффективно преобразует одноуровневый вывод DINOv3 в многоуровневые фичи и дополняет сильную семантику детализированными деталями для улучшения обнаружения. Для сверхлегких моделей (Nano, Pico, Femto и Atto) мы применяем HGNetv2 с обрезкой глубины и ширины, чтобы соответствовать строгим бюджетам ресурсов. В сочетании с упрощенным декодером и обновленным Dense O2O этот единый дизайн позволяет DEIMv2 достичь превосходного соотношения производительности и стоимости в различных сценариях, устанавливая новые рекордные результаты. Примечательно, что наша самая большая модель, DEIMv2-X, достигает 57.8 AP всего с 50.3M параметров, превосходя предыдущие модели масштаба X, которым требуется более 60M параметров для достижения лишь 56.5 AP. На компактном уровне DEIMv2-S — первая модель менее 10M параметров (9.71M), превысившая рубеж 50 AP на COCO, достигнув 50.9 AP. Даже сверхлегкая DEIMv2-Pico, имеющая всего 1.5M параметров, обеспечивает 38.5 AP, что соответствует YOLOv10-Nano (2.3M) при примерно на 50% меньшем количестве параметров.*

Эта модель была предоставлена [Harshal Janjani](https://huggingface.co/harshaljanjani). Исходный код можно найти [здесь](https://github.com/Intellindust-AI-Lab/DEIMv2).

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

```python
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from transformers.image_utils import load_image

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = load_image(url)

image_processor = AutoImageProcessor.from_pretrained("harshaljanjani/DEIMv2_HGNetv2_N_COCO_Transformers")
model = AutoModelForObjectDetection.from_pretrained("harshaljanjani/DEIMv2_HGNetv2_N_COCO_Transformers", device_map="auto")

inputs = image_processor(images=image, return_tensors="pt").to(model.device)
outputs = model(**inputs)

results = image_processor.post_process_object_detection(
    outputs, threshold=0.5, target_sizes=[image.size[::-1]]
)

for result in results:
    for score, label, box in zip(result["scores"], result["labels"], result["boxes"]):
        box = [round(i, 2) for i in box.tolist()]
        print(f"Detected {model.config.id2label[label.item()]} with confidence {round(score.item(), 3)} at location {box}")
```

## Deimv2Config[[transformers.Deimv2Config]]

#### transformers.Deimv2Config[[transformers.Deimv2Config]]

```python
transformers.Deimv2Config(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, 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, is_encoder_decoder: bool = True, initializer_range: float = 0.01, initializer_bias_prior_prob: float | None = None, layer_norm_eps: float = 1e-05, batch_norm_eps: float = 1e-05, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, freeze_backbone_batch_norms: bool = True, encoder_hidden_dim: int = 256, encoder_in_channels: list[int] | tuple[int, ...] = (512, 1024, 2048), feat_strides: list[int] | tuple[int, ...] = (8, 16, 32), encoder_layers: int = 1, encoder_ffn_dim: int = 1024, encoder_attention_heads: int = 8, dropout: float | int = 0.0, activation_dropout: float | int = 0.0, encode_proj_layers: list[int] | tuple[int, ...] = (2,), positional_encoding_temperature: int = 10000, encoder_activation_function: str = 'gelu', activation_function: str = 'silu', eval_size: list[int] | tuple[int, int] | None = None, normalize_before: bool = False, hidden_expansion: float = 1.0, d_model: int = 256, num_queries: int = 300, decoder_in_channels: list[int] | tuple[int, ...] = (256, 256, 256), decoder_ffn_dim: int = 1024, num_feature_levels: int = 3, decoder_n_points: int | list[int] = 4, decoder_layers: int = 6, decoder_attention_heads: int = 8, decoder_activation_function: str = 'relu', attention_dropout: float | int = 0.0, num_denoising: int = 100, label_noise_ratio: float = 0.5, box_noise_scale: float = 1.0, learn_initial_query: bool = False, anchor_image_size: int | list[int] | None = None, with_box_refine: bool = True, matcher_alpha: float = 0.25, matcher_gamma: float = 2.0, matcher_class_cost: float = 2.0, matcher_bbox_cost: float = 5.0, matcher_giou_cost: float = 2.0, use_focal_loss: bool = True, auxiliary_loss: bool = True, focal_loss_alpha: float = 0.75, focal_loss_gamma: float = 2.0, weight_loss_vfl: float = 1.0, weight_loss_bbox: float = 5.0, weight_loss_giou: float = 2.0, weight_loss_fgl: float = 0.15, weight_loss_ddf: float = 1.5, eos_coefficient: float = 0.0001, eval_idx: int = -1, layer_scale: int | float = 1.0, max_num_bins: int = 32, reg_scale: float = 4.0, depth_mult: float = 1.0, top_prob_values: int = 4, lqe_hidden_dim: int = 64, lqe_layers: int = 2, decoder_offset_scale: float = 0.5, decoder_method: str = 'default', up: float = 0.5, tie_word_embeddings: bool = True, weight_loss_mal: float = 1.0, use_dense_one_to_one: bool = True, mal_alpha: float | None = None, encoder_fuse_op: str = 'sum', spatial_tuning_adapter_inplanes: int = 16, encoder_type: str = 'hybrid', use_gateway: bool = True, share_bbox_head: bool = False, encoder_has_trailing_conv: bool = True)
```

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

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

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

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

initializer_bias_prior_prob (`float`, *optional*) : Априорная вероятность, используемая инициализатором смещений для инициализации смещений `enc_score_head` и `class_embed`. Если `None`, `prior_prob` вычисляется как `prior_prob = 1 / (num_labels + 1)` при инициализации весов модели.

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

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

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *необязательный*) : Конфигурация базовой модели.

freeze_backbone_batch_norms (`bool`, *необязательный*, по умолчанию `True`) : Зафиксировать ли слои batch normalization в backbone.

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

encoder_in_channels (`list`, *необязательный*, по умолчанию `[512, 1024, 2048]`) : Входные многоуровневые признаки для кодировщика.

feat_strides (`list[int]`, *необязательный*, по умолчанию `[8, 16, 32]`) : Шаги, используемые в каждой feature map.

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

encoder_ffn_dim (`int`, *optional*, по умолчанию `1024`) : Размерность «промежуточного» (часто называемого feed-forward) слоя в энкодере.

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

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

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

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

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

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

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

eval_size (`list[int]` или `tuple[int, int]`, *необязательный*) : Высота и ширина, используемые для вычисления эффективной высоты и ширины позиционных эмбеддингов с учётом шага.

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

hidden_expansion (`float`, *optional*, по умолчанию 1.0) : Коэффициент расширения для увеличения размера размерности RepVGGBlock и CSPRepLayer.

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

num_queries (`int`, *optional*, по умолчанию 300) : Количество запросов объектов.

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

decoder_ffn_dim (`int`, *optional*, по умолчанию `1024`) : Размерность «промежуточного» (часто называемого feed-forward) слоя в декодере.

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

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

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

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

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

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

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

label_noise_ratio (`float`, *optional*, по умолчанию 0.5) : Доля меток денойзинга, к которым следует добавить случайный шум.

box_noise_scale (`float`, *необязательный*, по умолчанию 1.0) : Масштаб или величина шума, добавляемого к ограничивающим рамкам.

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

anchor_image_size (`tuple[int, int]`, *optional*) : Высота и ширина входного изображения, используемые во время оценки для генерации якорей ограничивающих прямоугольников.

with_box_refine (`bool`, *необязательный*, по умолчанию `True`) : Нужно ли применять итеративное уточнение ограничивающих прямоугольников.

matcher_alpha (`float`, *optional*, по умолчанию 0.25) : Параметр alpha, используемый Hungarian Matcher.

matcher_gamma (`float`, *необязательный*, по умолчанию 2.0) : Параметр gamma, используемый Hungarian Matcher.

matcher_class_cost (`float`, *optional*, по умолчанию 2.0) : Относительный вес потерь класса, используемый Hungarian Matcher.

matcher_bbox_cost (`float`, *optional*, по умолчанию 5.0) : Относительный вес потерь для ограничивающих прямоугольников, используемый Hungarian Matcher.

matcher_giou_cost (`float`, *optional*, по умолчанию 2.0) : Относительный вес потери giou, используемой Hungarian Matcher.

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

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

focal_loss_alpha (`float`, *необязательный*, по умолчанию 0.75) : Параметр alpha, используемый для вычисления focal loss.

focal_loss_gamma (`float`, *необязательный*, по умолчанию 2.0) : Параметр gamma, используемый для вычисления focal loss.

weight_loss_vfl (`float`, *необязательный*, по умолчанию 1.0) : Относительный вес varifocal loss в функции потерь обнаружения объектов.

weight_loss_bbox (`float`, *optional*, по умолчанию 5.0) : Относительный вес потери L1 для ограничивающих прямоугольников в функции потерь обнаружения объектов.

weight_loss_giou (`float`, *optional*, по умолчанию 2.0) : Относительный вес обобщённой функции потерь IoU в функции потерь обнаружения объектов.

weight_loss_fgl (`float`, *optional*, по умолчанию 0.15) : Относительный вес функции потерь локализации с высокой детализацией в общей функции потерь обнаружения объектов.

weight_loss_ddf (`float`, *optional*, по умолчанию 1.5) : Относительный вес фокальной функции потерь дистилляции с развязкой в функции потерь обнаружения объектов.

eos_coefficient (`float`, *необязательный*, по умолчанию `0.0001`) : Относительный вес класса «нет объекта» в функции потерь обнаружения объектов.

eval_idx (`int`, *необязательный*, по умолчанию -1) : Индекс слоя декодера, используемого для оценки.

layer_scale (`float`, *необязательный*, по умолчанию `1.0`) : Коэффициент масштабирования скрытого измерения в последующих слоях декодера.

max_num_bins (`int`, *optional*, по умолчанию 32) : Максимальное количество бинов для уточнения ограничивающих прямоугольников с использованием распределения.

reg_scale (`float`, *необязательный*, по умолчанию 4.0) : Коэффициент масштабирования для распределения регрессии.

depth_mult (`float`, *необязательный*, по умолчанию 1.0) : Множитель для количества блоков в слоях RepNCSPELAN5.

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

lqe_hidden_dim (`int`, *optional*, по умолчанию 64) : Размер скрытого слоя для сети Location Quality Estimator (LQE).

lqe_layers (`int`, *optional*, по умолчанию 2) : Количество слоёв в MLP оценщика качества расположения.

decoder_offset_scale (`float`, *optional*, по умолчанию 0.5) : Масштаб смещения, используемый в деформируемом внимании.

decoder_method (`str`, *необязательный*, по умолчанию `"default"`) : Метод, используемый декодером: `"default"` или `"discrete"`.

up (`float`, *необязательный*, по умолчанию 0.5) : Управляет верхними границами функции взвешивания.

tie_word_embeddings (`bool`, *необязательный*, по умолчанию `True`) : Связывать ли веса эмбеддингов согласно отображению `tied_weights_keys` модели.

weight_loss_mal (`float`, *необязательный*, по умолчанию 1.0) : Относительный вес вспомогательной функции потерь совпадения в функции потерь обнаружения объектов.

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

mal_alpha (`float`, *необязательный*) : Параметр Alpha для вспомогательной функции потерь соответствия (MAL). Если `None`, используется `focal_loss_alpha`.

encoder_fuse_op (`str`, *необязательный*, по умолчанию `"sum"`) : Операция слияния, используемая в FPN кодировщика. DEIMv2 использует `"sum"` вместо `"cat"` из D-FINE.

spatial_tuning_adapter_inplanes (`int`, *optional*, по умолчанию 16) : Количество входных плоскостей для сверточного стебля STA.

encoder_type (`str`, *optional*, по умолчанию `"hybrid"`) : Тип используемого энкодера. `"hybrid"` использует полный HybridEncoder с AIFI, FPN и PAN. `"lite"` использует облегчённый LiteEncoder с слиянием GAP для меньших вариантов (Atto, Femto, Pico).

use_gateway (`bool`, *необязательный*, по умолчанию `True`) : Использовать ли механизм gateway (cross-attention gating) в слоях декодера. Если `False`, вместо этого применяется RMSNorm к выходу внимания энкодера.

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

encoder_has_trailing_conv (`bool`, *необязательный*, по умолчанию `True`) : Включают ли CSP-блоки энкодера завершающую 3x3 свёртку после бутылочного горлышка. `True` для RepNCSPELAN4 (используется в вариантах HGNetV2 N и LiteEncoder). `False` для RepNCSPELAN5 (используется в вариантах DINOv3).

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

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

## Deimv2Model[[transformers.Deimv2Model]]

#### transformers.Deimv2Model[[transformers.Deimv2Model]]

```python
transformers.Deimv2Model(config: Deimv2Config)
```

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

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

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

Модель RT-DETR (состоящая из backbone и encoder-decoder), выводящая необработанные скрытые состояния без какого-либо head сверху.

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

```python
forward(pixel_values: Tensor, pixel_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: list[dict] | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

pixel_values (`torch.Tensor` формы `(batch_size, num_channels, image_size, image_size)`) : Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью `image_processor_class`. Подробности см. в `image_processor_class.__call__` (`processor_class` использует `image_processor_class` для обработки изображений).

pixel_mask (`torch.LongTensor` формы `(batch_size, height, width)`, *необязательно*) : Маска для исключения значений пикселей отступов из внимания. Значения маски выбираются из `[0, 1]`:  - 1 для реальных пикселей (т. е. **не замаскированных**), - 0 для пикселей отступов (т. е. **замаскированных**).  [Что такое маски внимания?](../glossary#attention-mask)

encoder_outputs (`torch.Tensor`, *необязательный*) : Кортеж, состоящий из (`last_hidden_state`, *необязательный*: `hidden_states`, *необязательный*: `attentions`) `last_hidden_state` формы `(batch_size, sequence_length, hidden_size)`, *необязательный*) представляет собой последовательность скрытых состояний на выходе последнего слоя кодировщика. Используется в кросс-внимании декодера.

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи сглаженной карты признаков (выход backbone + проекционного слоя), можно напрямую передать сглаженное представление изображения.

labels (`list[Dict]` длины `(batch_size,)`, *необязательный*) : Метки для вычисления функции потерь бипартитного сопоставления. Список словарей, каждый из которых содержит как минимум следующие два ключа: 'class_labels' и 'boxes' (соответственно, метки классов и ограничивающие рамки изображения в батче). Сами метки классов должны представлять собой `torch.LongTensor` длины `(number of bounding boxes in the image,)`, а рамки — `torch.Tensor` формы `(number of bounding boxes in the image, 4)`.

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

`Deimv2ModelOutput` или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации (`None`) и входных данных.

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

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

- **last_hidden_state** (`torch.Tensor` формы `(batch_size, num_queries, hidden_size)`) -- Последовательность скрытых состояний на выходе последнего слоя декодера модели.
- **intermediate_hidden_states** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- Стек промежуточных скрытых состояний (выход каждого слоя декодера).
- **intermediate_logits** (`torch.Tensor` формы `(batch_size, config.decoder_layers, sequence_length, config.num_labels)`) -- Стек промежуточных логитов (логиты каждого слоя декодера).
- **intermediate_reference_points** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, 4)`) -- Стек промежуточных опорных точек (опорные точки каждого слоя декодера).
- **intermediate_predicted_corners** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, 4)`) -- Стек промежуточных предсказанных углов (предсказанные углы каждого слоя декодера).
- **initial_reference_points** (`torch.Tensor` формы `(batch_size, num_queries, 4)`) -- Начальные опорные точки, используемые для первого слоя декодера.
- **decoder_hidden_states** (`tuple[torch.Tensor]`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода эмбеддингов, если у модели есть слой эмбеддингов, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

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

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

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

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

  Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
- **init_reference_points** (`torch.Tensor` формы `(batch_size, num_queries, 4)`) -- Начальные опорные точки, передаваемые через декодер Transformer.
- **enc_topk_logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.num_labels)`) — Оценки предсказанных ограничивающих прямоугольников, где в качестве региональных предложений на этапе кодировщика выбираются прямоугольники с наивысшими оценками (топ-`config.two_stage_num_proposals`). Результат бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).
- **enc_topk_bboxes** (`torch.Tensor` формы `(batch_size, sequence_length, 4)`) -- Логиты координат предсказанных ограничивающих прямоугольников на этапе кодирования.
- **enc_outputs_class** (`torch.Tensor` формы `(batch_size, sequence_length, config.num_labels)`, *необязательный*, возвращается, если `config.with_box_refine=True` и `config.two_stage=True`) -- Оценки предсказанных ограничивающих прямоугольников, где в первом этапе в качестве региональных предложений выбираются `config.two_stage_num_proposals` прямоугольников с наивысшими оценками. Результат бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).
- **enc_outputs_coord_logits** (`torch.Tensor` формы `(batch_size, sequence_length, 4)`, *необязательный*, возвращается, если `config.with_box_refine=True` и `config.two_stage=True`) -- Логиты координат предсказанных ограничивающих прямоугольников на первом этапе.
- **denoising_meta_values** (`dict`, *необязательный*) -- Дополнительный словарь для значений, связанных с процессом денойзинга.

Примеры:

```python
>>> from transformers import AutoImageProcessor, Deimv2Model
>>> 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("PekingU/Deimv2_r50vd")
>>> model = Deimv2Model.from_pretrained("PekingU/Deimv2_r50vd")

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

>>> outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 300, 256]
```

## Deimv2ForObjectDetection[[transformers.Deimv2ForObjectDetection]]

#### transformers.Deimv2ForObjectDetection[[transformers.Deimv2ForObjectDetection]]

```python
transformers.Deimv2ForObjectDetection(config: Deimv2Config)
```

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

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

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

Модель RT-DETR (состоящая из backbone и encoder-decoder), на выходе выдающая bounding boxes и logits, которые затем декодируются в scores и classes.

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

```python
forward(pixel_values: Tensor, pixel_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: list[dict] | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

pixel_values (`torch.Tensor` формы `(batch_size, num_channels, image_size, image_size)`) : Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью `image_processor_class`. Подробности см. в `image_processor_class.__call__` (`processor_class` использует `image_processor_class` для обработки изображений).

pixel_mask (`torch.LongTensor` формы `(batch_size, height, width)`, *необязательно*) : Маска для исключения значений пикселей отступов из внимания. Значения маски выбираются из `[0, 1]`:  - 1 для реальных пикселей (т. е. **не замаскированных**), - 0 для пикселей отступов (т. е. **замаскированных**).  [Что такое маски внимания?](../glossary#attention-mask)

encoder_outputs (`torch.Tensor`, *необязательный*) : Кортеж, состоящий из (`last_hidden_state`, *необязательный*: `hidden_states`, *необязательный*: `attentions`) `last_hidden_state` формы `(batch_size, sequence_length, hidden_size)`, *необязательный*) представляет собой последовательность скрытых состояний на выходе последнего слоя кодировщика. Используется в кросс-внимании декодера.

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

labels (`list[Dict]` длины `(batch_size,)`, *необязательный*) : Метки для вычисления функции потерь бипартитного сопоставления. Список словарей, каждый из которых содержит как минимум следующие два ключа: 'class_labels' и 'boxes' (соответственно, метки классов и ограничивающие рамки изображения в батче). Сами метки классов должны представлять собой `torch.LongTensor` длины `(number of bounding boxes in the image,)`, а рамки — `torch.Tensor` формы `(number of bounding boxes in the image, 4)`.

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

Объект `Deimv2ObjectDetectionOutput` или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации (`None`) и входных данных.

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

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

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если предоставлены `labels`)) -- Суммарная потеря, представляющая собой линейную комбинацию отрицательного логарифма правдоподобия (кросс-энтропии) для предсказания класса и потери для ограничивающих прямоугольников. Последняя определяется как линейная комбинация L1-потери и обобщенной масштабно-инвариантной потери IoU.
- **loss_dict** (`Dict`, *необязательный*) -- Словарь, содержащий отдельные значения потерь. Полезно для ведения журнала.
- **logits** (`torch.Tensor` формы `(batch_size, num_queries, num_classes + 1)`) -- Логиты классификации (включая no-object) для всех запросов.
- **pred_boxes** (`torch.Tensor` формы `(batch_size, num_queries, 4)`) -- Нормализованные координаты границ для всех запросов, представленные в виде (center_x, center_y, width, height). Эти значения нормализованы в диапазоне [0, 1] относительно размера каждого отдельного изображения в батче (игнорируя возможное выравнивание). Для получения ненормализованных (абсолютных) границ используйте `~Deimv2ImageProcessor.post_process_object_detection`.
- **auxiliary_outputs** (`list[Dict]`, *необязательный*) -- Необязательный параметр, возвращается только при активации вспомогательных потерь (т. е. когда `config.auxiliary_loss` установлен в `True`) и при наличии меток. Это список словарей, содержащих два указанных выше ключа (`logits` и `pred_boxes`) для каждого слоя декодера.
- **last_hidden_state** (`torch.Tensor` формы `(batch_size, num_queries, hidden_size)`) -- Последовательность скрытых состояний на выходе последнего слоя декодера модели.
- **intermediate_hidden_states** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- Стек промежуточных скрытых состояний (выход каждого слоя декодера).
- **intermediate_logits** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, config.num_labels)`) -- Стек промежуточных логитов (логиты каждого слоя декодера).
- **intermediate_reference_points** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, 4)`) -- Стек промежуточных опорных точек (опорные точки каждого слоя декодера).
- **intermediate_predicted_corners** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, 4)`) -- Стек промежуточных предсказанных углов (предсказанные углы каждого слоя декодера).
- **initial_reference_points** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, 4)`) -- Стек начальных опорных точек (начальные опорные точки каждого слоя декодера).
- **decoder_hidden_states** (`tuple[torch.Tensor]`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода эмбеддингов, если у модели есть слой эмбеддингов, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

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

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

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

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

  Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
- **init_reference_points** (`torch.Tensor` формы  `(batch_size, num_queries, 4)`) -- Начальные опорные точки, передаваемые через декодер Transformer.
- **enc_topk_logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.num_labels)`, *необязательный*, возвращается, если `config.with_box_refine=True` и `config.two_stage=True`) -- Логиты координат предсказанных ограничивающих прямоугольников в энкодере.
- **enc_topk_bboxes** (`torch.Tensor` формы `(batch_size, sequence_length, 4)`, *необязательный*, возвращается, если `config.with_box_refine=True` и `config.two_stage=True`) -- Логиты координат предсказанных ограничивающих прямоугольников в энкодере.
- **enc_outputs_class** (`torch.Tensor` формы `(batch_size, sequence_length, config.num_labels)`, *необязательный*, возвращается, если `config.with_box_refine=True` и `config.two_stage=True`) -- Оценки предсказанных ограничивающих прямоугольников, где в первом этапе в качестве региональных предложений выбираются `config.two_stage_num_proposals` прямоугольников с наивысшими оценками. Результат бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).
- **enc_outputs_coord_logits** (`torch.Tensor` формы `(batch_size, sequence_length, 4)`, *необязательный*, возвращается, если `config.with_box_refine=True` и `config.two_stage=True`) -- Логиты координат предсказанных ограничивающих прямоугольников на первом этапе.
- **denoising_meta_values** (`dict`, *необязательный*) -- Дополнительный словарь для значений, связанных с денойзингом

Пример:

```python
>>> import torch
>>> from transformers.image_utils import load_image
>>> from transformers import AutoImageProcessor, Deimv2ForObjectDetection

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = load_image(url)

>>> image_processor = AutoImageProcessor.from_pretrained("harshaljanjani/DEIMv2_HGNetv2_N_COCO_Transformers")
>>> model = Deimv2ForObjectDetection.from_pretrained("harshaljanjani/DEIMv2_HGNetv2_N_COCO_Transformers")

>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")

>>> # forward pass
>>> outputs = model(**inputs)

>>> logits = outputs.logits
>>> list(logits.shape)
[1, 300, 80]

>>> boxes = outputs.pred_boxes
>>> list(boxes.shape)
[1, 300, 4]

>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([image.size[::-1]])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)
>>> result = results[0]  # first image in batch

>>> for score, label, box in zip(result["scores"], result["labels"], result["boxes"]):
...     box = [round(i, 2) for i in box.tolist()]
...     print(
...         f"Detected {model.config.id2label[label.item()]} with confidence "
...         f"{round(score.item(), 3)} at location {box}"
...     )
```

