# MM Grounding DINO

Модель [MM Grounding DINO](https://huggingface.co/papers/2401.02361) была предложена в работе [An Open and Comprehensive Pipeline for Unified Object Grounding and Detection](https://huggingface.co/papers/2401.02361) авторами Xiangyu Zhao, Yicheng Chen, Shilin Xu, Xiangtai Li, Xinjiang Wang, Yining Li, Haian Huang.

MM Grounding DINO улучшает [Grounding DINO](./grounding-dino) за счёт доработки контрастивного класс-хэда и отказа от общего использования параметров в декодере, что повышает качество zero-shot обнаружения как на COCO (50.6(+2.2) AP), так и на LVIS (31.9(+11.8) val AP и 41.4(+12.6) minival AP).

Все исходные контрольные точки MM Grounding DINO можно найти в коллекции [MM Grounding DINO](https://huggingface.co/collections/openmmlab-community/mm-grounding-dino-688cbde05b814c4e2832f9df). Эта модель также поддерживает инференс LLMDet. Контрольные точки LLMDet доступны в коллекции [LLMDet](https://huggingface.co/collections/iSEE-Laboratory/llmdet-688475906dc235d5f1dc678e).

> [!TIP]
> Нажмите на модели MM Grounding DINO в боковой панели справа, чтобы увидеть больше примеров применения MM Grounding DINO к различным задачам MM Grounding DINO.

Приведённый ниже пример демонстрирует, как генерировать текст на основе изображения с помощью класса [AutoModelForZeroShotObjectDetection](/docs/transformers/v5.23.0/ru/model_doc/auto#transformers.AutoModelForZeroShotObjectDetection).

```python
import torch

from transformers import AutoModelForZeroShotObjectDetection, AutoProcessor
from transformers.image_utils import load_image

# Prepare processor and model
model_id = "openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_v3det"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForZeroShotObjectDetection.from_pretrained(model_id, device_map="auto")

# Prepare inputs
image_url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = load_image(image_url)
text_labels = [["a cat", "a remote control"]]
inputs = processor(images=image, text=text_labels, return_tensors="pt").to(model.device)

# Run inference
with torch.no_grad():
    outputs = model(**inputs)

# Postprocess outputs
results = processor.post_process_grounded_object_detection(
    outputs,
    threshold=0.4,
    target_sizes=[(image.height, image.width)]
)

# Retrieve the first image result
result = results[0]
for box, score, labels in zip(result["boxes"], result["scores"], result["labels"]):
    box = [round(x, 2) for x in box.tolist()]
    print(f"Detected {labels} with confidence {round(score.item(), 3)} at location {box}")
```

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

- Ниже приведена таблица моделей и результатов их работы по обнаружению объектов на COCO (результаты из [официального репозитория](https://github.com/open-mmlab/mmdetection/blob/main/configs/mm_grounding_dino/README.md)):

    |                                                              Модель                                                             | Backbone |      Данные для предварительного обучения      |   Стиль   |  COCO mAP  |
    | ------------------------------------------------------------------------------------------------------------------------------ | -------- | ------------------------ | --------- | ---------- |
    |  [mm_grounding_dino_tiny_o365v1_goldg](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg)                       |  Swin-T  |        O365,GoldG        | Zero-shot | 50.4(+2.3) |
    |  [mm_grounding_dino_tiny_o365v1_goldg_grit](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_grit)             |  Swin-T  |     O365,GoldG,GRIT      | Zero-shot | 50.5(+2.1) |
    |  [mm_grounding_dino_tiny_o365v1_goldg_v3det](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_v3det)           |  Swin-T  |     O365,GoldG,V3Det     | Zero-shot | 50.6(+2.2) |
    |  [mm_grounding_dino_tiny_o365v1_goldg_grit_v3det](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_grit_v3det) |  Swin-T  |  O365,GoldG,GRIT,V3Det   | Zero-shot | 50.4(+2.0) |
    |  [mm_grounding_dino_base_o365v1_goldg_v3det](https://huggingface.co/openmmlab-community/mm_grounding_dino_base_o365v1_goldg_v3det)           |  Swin-B  |     O365,GoldG,V3Det     | Zero-shot |    52.5    |
    |  [mm_grounding_dino_base_all](https://huggingface.co/openmmlab-community/mm_grounding_dino_base_all)                                         |  Swin-B  |         O365,ALL         |     -     |    59.5    |
    |  [mm_grounding_dino_large_o365v2_oiv6_goldg](https://huggingface.co/openmmlab-community/mm_grounding_dino_large_o365v2_oiv6_goldg)           |  Swin-L  | O365V2,OpenImageV6,GoldG | Zero-shot |    53.0    |
    |  [mm_grounding_dino_large_all](https://huggingface.co/openmmlab-community/mm_grounding_dino_large_all)                                       |  Swin-L  |  O365V2,OpenImageV6,ALL  |     -     |    60.3    |

- Ниже представлена таблица с моделями MM Grounding DINO tiny и их показателями точности обнаружения объектов на LVIS (результаты из [официального репозитория](https://github.com/open-mmlab/mmdetection/blob/main/configs/mm_grounding_dino/README.md)):

    |                                                              Модель                                                             |    Данные для предварительного обучения     | MiniVal APr | MiniVal APc | MiniVal APf | MiniVal AP  | Val1.0 APr | Val1.0 APc | Val1.0 APf |  Val1.0 AP  |
    | ------------------------------------------------------------------------------------------------------------------------------ | --------------------- | ----------- | ----------- | ----------- | ----------- | ---------- | ---------- | ---------- | ----------- |
    |  [mm_grounding_dino_tiny_o365v1_goldg](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg)                       |      O365,GoldG       |    28.1     |    30.2     |    42.0     | 35.7(+6.9)  |    17.1    |    22.4    |    36.5    | 27.0(+6.9)  |
    |  [mm_grounding_dino_tiny_o365v1_goldg_grit](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_grit)             |    O365,GoldG,GRIT    |    26.6     |    32.4     |    41.8     | 36.5(+7.7)  |    17.3    |    22.6    |    36.4    | 27.1(+7.0)  |
    |  [mm_grounding_dino_tiny_o365v1_goldg_v3det](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_v3det)           |   O365,GoldG,V3Det    |    33.0     |    36.0     |    45.9     | 40.5(+11.7) |    21.5    |    25.5    |    40.2    | 30.6(+10.5) |
    |  [mm_grounding_dino_tiny_o365v1_goldg_grit_v3det](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_grit_v3det) | O365,GoldG,GRIT,V3Det |    34.2     |    37.4     |    46.2     | 41.4(+12.6) |    23.6    |    27.6    |    40.5    | 31.9(+11.8) |

- Эта реализация также поддерживает инференс для [LLMDet](https://github.com/iSEE-Laboratory/LLMDet). Ниже приведена таблица моделей LLMDet и их производительность на LVIS (результаты из [официального репозитория](https://github.com/iSEE-Laboratory/LLMDet)):

    |                             Модель                         | Данные для предварительного обучения            |  MiniVal APr | MiniVal APc | MiniVal APf | MiniVal AP  | Val1.0 APr | Val1.0 APc | Val1.0 APf |  Val1.0 AP  |
    | --------------------------------------------------------- | -------------------------------------------- | ------------ | ----------- | ----------- | ----------- | ---------- | ---------- | ---------- | ----------- |
    | [llmdet_tiny](https://huggingface.co/iSEE-Laboratory/llmdet_tiny)   | (O365,GoldG,GRIT,V3Det) + GroundingCap-1M    | 44.7         | 37.3        | 39.5        | 50.7        | 34.9       | 26.0       | 30.1       | 44.3        |
    | [llmdet_base](https://huggingface.co/iSEE-Laboratory/llmdet_base)   | (O365,GoldG,V3Det) + GroundingCap-1M         | 48.3         | 40.8        | 43.1        | 54.3        | 38.5       | 28.2       | 34.3       | 47.8        |
    | [llmdet_large](https://huggingface.co/iSEE-Laboratory/llmdet_large) | (O365V2,OpenImageV6,GoldG) + GroundingCap-1M | 51.1         | 45.1        | 46.1        | 56.6        | 42.0       | 31.6       | 38.8       | 50.2        |

## MMGroundingDinoConfig[[transformers.MMGroundingDinoConfig]]

#### transformers.MMGroundingDinoConfig[[transformers.MMGroundingDinoConfig]]

```python
transformers.MMGroundingDinoConfig(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, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, text_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, num_queries: int = 900, encoder_layers: int = 6, encoder_ffn_dim: int = 2048, encoder_attention_heads: int = 8, decoder_layers: int = 6, decoder_ffn_dim: int = 2048, decoder_attention_heads: int = 8, activation_function: str = 'relu', d_model: int = 256, dropout: float | int = 0.1, attention_dropout: float | int = 0.0, activation_dropout: float | int = 0.0, auxiliary_loss: bool = False, position_embedding_type: str = 'sine', num_feature_levels: int = 4, encoder_n_points: int = 4, decoder_n_points: int = 4, two_stage: bool = True, class_cost: float = 1.0, bbox_cost: float = 5.0, giou_cost: float = 2.0, bbox_loss_coefficient: float = 5.0, giou_loss_coefficient: float = 2.0, focal_alpha: float = 0.25, disable_custom_kernels: bool = False, max_text_len: int = 256, text_enhancer_dropout: float | int = 0.0, fusion_droppath: float | int = 0.1, fusion_dropout: float | int = 0.0, embedding_init_target: bool = True, query_dim: int = 4, positional_embedding_temperature: int = 20, decoder_bbox_embed_share: bool = True, decoder_cls_embed_share: bool = True, init_std: float = 0.02, layer_norm_eps: float = 1e-05, tie_word_embeddings: bool = True)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/mm_grounding_dino/configuration_mm_grounding_dino.py#L29)

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

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

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

text_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *необязательный*) : Объект конфигурации или словарь текстового бэкбона.

num_queries (`int`, *optional*, по умолчанию 900) : Количество запросов объектов, то есть слотов для обнаружения. Это максимальное число объектов, которые [MMGroundingDinoModel](/docs/transformers/v5.23.0/ru/model_doc/mm-grounding-dino#transformers.MMGroundingDinoModel) может обнаружить на одном изображении.

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

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

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

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

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

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

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

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

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

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

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

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

position_embedding_type (`str`, *необязательный*, по умолчанию `"sine"`) : Тип позиционных эмбеддингов, применяемых поверх признаков изображения. Одно из значений `"sine"` или `"learned"`.

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

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

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

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

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

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

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

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

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

focal_alpha (`float`, *необязательный*, по умолчанию `0.25`) : Параметр alpha в функции потерь focal loss.

disable_custom_kernels (`bool`, *необязательный*, по умолчанию `False`) : Отключает использование собственных CUDA- и CPU-ядер. Эта опция необходима для экспорта в ONNX, так как собственные ядра не поддерживаются экспортом PyTorch в ONNX.

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

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

fusion_droppath (`float`, *optional*, по умолчанию 0.1) : Коэффициент droppath для модуля слияния.

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

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

query_dim (`int`, *optional*, по умолчанию 4) : Размерность вектора запроса.

positional_embedding_temperature (`float`, *optional*, по умолчанию 20) : Температура для Sine Positional Embedding, используемая совместно с vision backbone.

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

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

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

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

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

Это класс конфигурации для хранения конфигурации модели Mm Grounding Dino. Он используется для создания модели Mm Grounding Dino в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации [openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_v3det](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg_v3det)

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

Примеры:

```python
>>> from transformers import MMGroundingDinoConfig, MMGroundingDinoModel

>>> # Initializing a MM Grounding DINO configuration
>>> configuration = MMGroundingDinoConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = MMGroundingDinoModel(configuration)

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

## MMGroundingDinoModel[[transformers.MMGroundingDinoModel]]

#### transformers.MMGroundingDinoModel[[transformers.MMGroundingDinoModel]]

```python
transformers.MMGroundingDinoModel(config: MMGroundingDinoConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L1787)

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

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

Модель Grounding DINO без дополнительных компонентов (состоящая из backbone и encoder-decoder Transformer), выводящая «сырые» hidden-states без какого-либо специализированного head сверху.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.MMGroundingDinoModel.forward]]

```python
forward(pixel_values: Tensor, input_ids: Tensor, token_type_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, pixel_mask: typing.Optional[torch.Tensor] = None, encoder_outputs = None, output_attentions = None, output_hidden_states = None, return_dict = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L1912)

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

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

input_ids (`torch.LongTensor` формы `(batch_size, text_sequence_length)`) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется, если вы его предоставляете. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/v5.23.0/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [BertTokenizer.__call__()](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__).

token_type_ids (`torch.LongTensor` формы `(batch_size, text_sequence_length)`, *необязательный*) : Индексы сегментных токенов для указания первой и второй частей входных данных. Индексы выбираются из `[0, 1]`: 0 соответствует токену `sentence A`, 1 соответствует токену `sentence B`  [Что такое идентификаторы типов токенов?](../glossary#token-type-ids)

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

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

encoder_outputs (``) : Tuple consists of (`last_hidden_state`, *optional*: `hidden_states`, *optional*: `attentions`) `last_hidden_state` of shape `(batch_size, sequence_length, hidden_size)`, *optional*) — это последовательность скрытых состояний на выходе последнего слоя кодировщика. Используется в кросс-внимании декодера.

output_attentions (``) : Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned tensors for more detail.

output_hidden_states (``) : Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for more detail.

return_dict (``) : Возвращать ли [ModelOutput](/docs/transformers/v5.23.0/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

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

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

Метод forward модели [MMGroundingDinoModel](/docs/transformers/v5.23.0/ru/model_doc/mm-grounding-dino#transformers.MMGroundingDinoModel) переопределяет специальный метод `__call__`.

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

- **last_hidden_state** (`torch.Tensor` формы `(batch_size, num_queries, hidden_size)`) -- Последовательность скрытых состояний на выходе последнего слоя декодера модели.
- **init_reference_points** (`torch.Tensor` формы  `(batch_size, num_queries, 4)`) -- Начальные опорные точки, передаваемые через декодер Transformer.
- **intermediate_hidden_states** (`torch.Tensor` формы `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- Стек промежуточных скрытых состояний (выход каждого слоя декодера).
- **intermediate_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[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_vision** (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательный*) -- Последовательность скрытых состояний на выходе последнего слоя энкодера модели.
- **encoder_last_hidden_state_text** (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательный*) -- Последовательность скрытых состояний на выходе последнего слоя энкодера модели.
- **encoder_vision_hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода визуальных эмбеддингов + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`. Скрытые состояния визуального энкодера на выходе каждого слоя, а также начальные выводы эмбеддингов.
- **encoder_text_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(tuple(torch.Tensor))`, *optional*, возвращается, если передано `output_attentions=True` или если `config.output_attentions=True`) -- Кортеж кортежей `torch.Tensor` (по одному для внимания каждого слоя) формы `(batch_size, num_heads, sequence_length, sequence_length)`. Веса внимания после softmax внимания, используемые для вычисления взвешенного среднего в заголовках внимания текст-зрение, зрение-текст, текст-усилитель (само-внимание) и многомасштабного деформируемого внимания. softmax внимания, используемый для вычисления взвешенного среднего в заголовках двунаправленного внимания.
- **enc_outputs_class** (`torch.Tensor` формы `(batch_size, sequence_length, config.num_labels)`, *необязательный*, возвращается, если `config.two_stage=True`) -- Оценки предсказанных ограничивающих прямоугольников, где верхние `config.num_queries` прямоугольников с наивысшими оценками выбираются в качестве региональных предложений на первом этапе. Выход бинарной классификации ограничивающих прямоугольников (т. е. передний план и фон).
- **enc_outputs_coord_logits** (`torch.Tensor` формы `(batch_size, sequence_length, 4)`, *необязательный*, возвращается, если `config.two_stage=True`) -- Логиты координат предсказанных ограничивающих прямоугольников на первом этапе.
- **encoder_logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.num_labels)`, *необязательный*, возвращается, если `config.two_stage=True`) -- Логиты верхних `config.num_queries` ограничивающих прямоугольников с наивысшими оценками на первом этапе.
- **encoder_pred_boxes** (`torch.Tensor` формы `(batch_size, sequence_length, 4)`, *необязательный*, возвращается, если `config.two_stage=True`) -- Координаты верхних по оценке `config.num_queries` ограничивающих прямоугольников на первом этапе.

Примеры:

```python
>>> from transformers import AutoProcessor, AutoModel
>>> 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()))
>>> text = "a cat."

>>> processor = AutoProcessor.from_pretrained("IDEA-Research/grounding-dino-tiny")
>>> model = AutoModel.from_pretrained("IDEA-Research/grounding-dino-tiny")

>>> inputs = processor(images=image, text=text, return_tensors="pt")
>>> outputs = model(**inputs)

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

## MMGroundingDinoForObjectDetection[[transformers.MMGroundingDinoForObjectDetection]]

#### transformers.MMGroundingDinoForObjectDetection[[transformers.MMGroundingDinoForObjectDetection]]

```python
transformers.MMGroundingDinoForObjectDetection(config: MMGroundingDinoConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L2363)

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

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

Модель Grounding DINO (состоящая из backbone и encoder-decoder Transformer) с головками для обнаружения объектов, предназначенная для таких задач, как обнаружение объектов COCO.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.MMGroundingDinoForObjectDetection.forward]]

```python
forward(pixel_values: Tensor, input_ids: LongTensor, token_type_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, pixel_mask: typing.Optional[torch.BoolTensor] = None, encoder_outputs: transformers.models.mm_grounding_dino.modeling_mm_grounding_dino.MMGroundingDinoEncoderOutput | tuple | None = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, labels: list[dict[str, typing.Union[torch.LongTensor, torch.Tensor]]] | None = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L2404)

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

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

input_ids (`torch.LongTensor` формы `(batch_size, text_sequence_length)`) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется, если вы его предоставляете. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/v5.23.0/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [BertTokenizer.__call__()](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__).

token_type_ids (`torch.LongTensor` формы `(batch_size, text_sequence_length)`, *необязательный*) : Индексы сегментных токенов для указания первой и второй частей входных данных. Индексы выбираются из `[0, 1]`: 0 соответствует токену `sentence A`, 1 соответствует токену `sentence B`  [Что такое идентификаторы типов токенов?](../glossary#token-type-ids)

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

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

encoder_outputs (`Union[~models.mm_grounding_dino.modeling_mm_grounding_dino.MMGroundingDinoEncoderOutput, tuple]`, *необязательный*) : Кортеж состоит из (`last_hidden_state`, *необязательный*: `hidden_states`, *необязательный*: `attentions`) `last_hidden_state` формы `(batch_size, sequence_length, hidden_size)`, *необязательный*) представляет собой последовательность скрытых состояний на выходе последнего слоя кодировщика. Используется в кросс-внимании декодера.

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

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

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

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

Метод forward класса [MMGroundingDinoForObjectDetection](/docs/transformers/v5.23.0/ru/model_doc/mm-grounding-dino#transformers.MMGroundingDinoForObjectDetection) переопределяет специальный метод `__call__`.

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

Примеры:

```python
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO

>>> import torch
>>> from PIL import Image
>>> from transformers import AutoProcessor, AutoModelForZeroShotObjectDetection

>>> model_id = "IDEA-Research/grounding-dino-tiny"
>>> device = "cuda"

>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = AutoModelForZeroShotObjectDetection.from_pretrained(model_id).to(device)

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))
>>> # Check for cats and remote controls
>>> text_labels = [["a cat", "a remote control"]]

>>> inputs = processor(images=image, text=text_labels, return_tensors="pt").to(device)
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> results = processor.post_process_grounded_object_detection(
...     outputs,
...     threshold=0.4,
...     text_threshold=0.3,
...     target_sizes=[(image.height, image.width)]
... )
>>> # Retrieve the first image result
>>> result = results[0]
>>> for box, score, text_label in zip(result["boxes"], result["scores"], result["text_labels"]):
...     box = [round(x, 2) for x in box.tolist()]
...     print(f"Detected {text_label} with confidence {round(score.item(), 3)} at location {box}")
Detected a cat with confidence 0.479 at location [344.7, 23.11, 637.18, 374.28]
Detected a cat with confidence 0.438 at location [12.27, 51.91, 316.86, 472.44]
Detected a remote control with confidence 0.478 at location [38.57, 70.0, 176.78, 118.18]
```

