# MM Grounding DINO

[MM Grounding DINO](https://huggingface.co/papers/2401.02361)モデルは、Xiangyu Zhao、Yicheng Chen、Shilin Xu、Xiangtai Li、Xinjiang Wang、Yining Li、Haian Huang による [An Open and Comprehensive Pipeline for Unified Object Grounding and Detection](https://huggingface.co/papers/2401.02361) で提案されました。

MM Grounding DINO は、対比クラスヘッドの改善とデコーダーにおけるパラメータ共有の除去により、[Grounding DINO](./grounding-dino) を改善しています。これにより、COCO（50.6(+2.2) AP）および LVIS（31.9(+11.8) val AP および 41.4(+12.6) minival AP）の両方で、ゼロショット検出の性能が向上しました。

[MM Grounding DINO](https://huggingface.co/collections/openmmlab-community/mm-grounding-dino-688cbde05b814c4e2832f9df)コレクションに、MM Grounding DINOのすべてのオリジナルチェックポイントが格納されています。このモデルはLLMDet推論にも対応しています。LLMDetのチェックポイントは[LLMDet](https://huggingface.co/collections/iSEE-Laboratory/llmdet-688475906dc235d5f1dc678e)コレクションで確認できます。

> [!TIP]
> MM Grounding DINO モデルの右サイドバーをクリックすると、MM Grounding DINO をさまざまな MM Grounding DINO タスクに適用する方法の例をさらに確認できます。

以下の例では、[AutoModelForZeroShotObjectDetection](/docs/transformers/main/ja/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)の結果）:

    |                                                              モデル                                                             | バックボーン |      事前学習データ      |   スタイル   |  COCO mAP  |
    | ------------------------------------------------------------------------------------------------------------------------------ | -------- | ------------------------ | --------- | ---------- |
    |  [mm_grounding_dino_tiny_o365v1_goldg](https://huggingface.co/openmmlab-community/mm_grounding_dino_tiny_o365v1_goldg)                       |  Swin-T  |        O365,GoldG        | ゼロショット | 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      | ゼロショット | 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     | ゼロショット | 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   | ゼロショット | 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     | ゼロショット |    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 | ゼロショット |    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/main/src/transformers/models/mm_grounding_dino/configuration_mm_grounding_dino.py#L29)

**パラメータ:**

is_encoder_decoder (`bool`、*任意*、デフォルトは`True`) : モデルがエンコーダー/デコーダーとして使用されるかどうかを示します。

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`、*optional*) : バックボーンモデルの設定です。

text_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *任意*) : テキストバックボーンの config オブジェクトまたは辞書。

num_queries (`int`、*optional*、デフォルトは 900) : オブジェクトクエリ数、すなわち検出スロットの数です。これは、[MMGroundingDinoModel](/docs/transformers/main/ja/model_doc/mm-grounding-dino#transformers.MMGroundingDinoModel) が 1 枚の画像内で検出できるオブジェクトの最大数を表します。

encoder_layers (`int`、*任意*、デフォルトは`6`) : Transformerエンコーダーの隠れ層の数。設定されていない場合は、`num_layers`と同じ値が使用されます。

encoder_ffn_dim (`int`、*optional*、デフォルトは`2048`) : エンコーダー内の「intermediate」（feed-forward とも呼ばれる）層の次元数。

encoder_attention_heads (`int`、*optional*、デフォルトは`8`) : Transformer エンコーダーの各アテンション層におけるアテンションヘッドの数。

decoder_layers (`int`、*任意*、デフォルトは`6`) : Transformer デコーダーの隠れ層の数。設定されていない場合は、`num_layers` と同じ値が使用されます。

decoder_ffn_dim (`int`、*任意*、デフォルトは `2048`) : デコーダー内の「intermediate」（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`) : 注意確率のドロップアウト率。

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`) : 2段階の deformable DETR を適用するかどうか。この場合、Grounding DINO のバリアントによってリージョン提案も生成され、それらがデコーダーにさらに渡されてバウンディングボックスの反復的な精緻化が行われます。

class_cost (`float`, *任意*, デフォルトは `1.0`) : ハンガリアンマッチングのコストにおける分類誤差の相対的な重み。

bbox_cost (`float`、*任意*、デフォルトは `5.0`) : ハンガリアンマッチングのコストにおける L1 バウンディングボックス誤差の相対的な重み。

giou_cost (`float`、*任意*、デフォルトは `2.0`) : ハンガリアンマッチングのコストにおける汎化 IoU ロスの相対重み。

bbox_loss_coefficient (`float`、*任意*、デフォルトは `5.0`) : パノプティックセグメンテーション損失における L1 バウンディングボックス損失の相対的な重み。

giou_loss_coefficient (`float`、*任意*、デフォルトは `2.0`) : パノプティックセグメンテーション損失における汎化 IoU 損失の相対的な重み。

focal_alpha (`float`、*任意*、デフォルトは `0.25`) : focal loss の Alpha パラメータです。

disable_custom_kernels (`bool`、*任意*、デフォルトは`False`) : カスタム CUDA カーネルおよび CPU カーネルの使用を無効にします。PyTorch の ONNX エクスポートではカスタムカーネルがサポートされていないため、ONNX エクスポートを行うにはこのオプションが必要です。

max_text_len (`int`、*任意*、デフォルトは 256) : テキスト入力の最大長です。

text_enhancer_dropout (`float`、*任意*、デフォルトは 0.0) : テキストエンハンサーの dropout 率です。

fusion_droppath (`float`、*任意*、デフォルトは 0.1) : 融合モジュールの droppath 比率です。

fusion_dropout (`float`, *optional*, デフォルトは 0.0) : 融合モジュールの dropout 率です。

embedding_init_target (`bool`、*任意*、デフォルトは`True`) : Embedding の重みでターゲットを初期化するかを指定します。

query_dim (`int`、*optional*、デフォルトは 4) : クエリベクトルの次元数。

positional_embedding_temperature (`float`、*任意*、デフォルト値は 20) : ビジョンバックボーンと併せて使用される Sine Positional Embedding の温度です。

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`) : Layer Normalization 層で使用する 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/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/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/main/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L1784)

**パラメータ:**

config ([MMGroundingDinoConfig](/docs/transformers/main/ja/model_doc/mm-grounding-dino#transformers.MMGroundingDinoConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

Grounding DINOのベースモデル（バックボーンとエンコーダー・デコーダーのTransformerで構成され、特定のヘッドが上に付いておらず、生の隠れ状態を出力するもの）。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、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/main/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L1905)

**パラメータ:**

pixel_values (`torch.Tensor`、shape `(batch_size, num_channels, image_size, image_size)`) : 入力画像に対応するテンソルです。ピクセル値は [GroundingDinoImageProcessor](/docs/transformers/main/ja/model_doc/grounding-dino#transformers.GroundingDinoImageProcessor) を使用して取得できます。詳細は [GroundingDinoImageProcessor.__call__()](/docs/transformers/main/ja/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) を参照してください（[GroundingDinoProcessor](/docs/transformers/main/ja/model_doc/grounding-dino#transformers.GroundingDinoProcessor) は画像の処理に [GroundingDinoImageProcessor](/docs/transformers/main/ja/model_doc/grounding-dino#transformers.GroundingDinoImageProcessor) を使用します）。

input_ids (`torch.LongTensor`、shape `(batch_size, text_sequence_length)`) : 語彙における入力シーケンスのトークンインデックスです。パディングを指定した場合、デフォルトでは無視されます。インデックスは [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用して取得できます。詳細は [BertTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。

token_type_ids (`torch.LongTensor`、shape `(batch_size, text_sequence_length)`、*任意*) : 入力の前半と後半を示すセグメントトークンインデックス。インデックスは`[0, 1]`から選択されます: 0 は`sentence A`トークンに対応し、1 は`sentence B`トークンに対応します  [トークンタイプIDとは何ですか?](../glossary#token-type-ids)

attention_mask (`torch.Tensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

pixel_mask (`torch.Tensor`、shape `(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*) is a sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention of the decoder.

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/main/ja/main_classes/output#transformers.utils.ModelOutput) を返すかどうか。

**戻り値:** `MMGroundingDinoModelOutput` または `tuple(torch.FloatTensor)`

`MMGroundingDinoModelOutput`、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。設定（[MMGroundingDinoConfig](/docs/transformers/main/ja/model_doc/mm-grounding-dino#transformers.MMGroundingDinoConfig)）と入力に応じて、さまざまな要素で構成されます。

[MMGroundingDinoModel](/docs/transformers/main/ja/model_doc/mm-grounding-dino#transformers.MMGroundingDinoModel)のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, num_queries, hidden_size)`) -- モデルのデコーダーの最終層の出力における、隠れ状態のシーケンス。
- **init_reference_points** (`torch.FloatTensor`、shape `(batch_size, num_queries, 4)`) -- Transformer デコーダーに渡される初期の参照点。
- **intermediate_hidden_states** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- 中間の隠れ状態のスタック（デコーダーの各層の出力）。
- **intermediate_reference_points** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, 4)`) -- 中間参照点のスタック（デコーダーの各層の参照点）。
- **decoder_hidden_states** (`tuple[torch.FloatTensor]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用 1 つ + 各層の出力用 1 つ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力および初期埋め込み出力における、デコーダーの隠れ状態。
- **decoder_attentions** (`tuple[tuple[torch.FloatTensor]]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
- **encoder_last_hidden_state_vision** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。
- **encoder_last_hidden_state_text** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。
- **encoder_vision_hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合、または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（ビジョン埋め込みの出力用 1 つ + 各層の出力用 1 つ）、形状は `(batch_size, sequence_length, hidden_size)`。各層の出力および初期埋め込み出力におけるビジョンエンコーダーの隠れ状態。
- **encoder_text_hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返される) -- `torch.FloatTensor` のタプル（テキスト埋め込みの出力用 1 つ + 各層の出力用 1 つ）、形状は `(batch_size, sequence_length, hidden_size)`。各層の出力および初期埋め込み出力におけるテキストエンコーダーの隠れ状態。
- **encoder_attentions** (`tuple(tuple(torch.FloatTensor))`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプルのタプル（各レイヤーの注意機構に対応する 1 つずつ）で、形状は `(batch_size, num_heads, sequence_length, sequence_length)` です。attention softmax 後のアテンション重みで、テキスト-ビジョンアテンション、ビジョン-テキストアテンション、テキストエンハンサー（自己アテンション）、マルチスケール変形アテンションヘッドにおける加重平均の計算に使用されます。attention softmax 後のアテンション重みで、バイアテンションヘッドにおける加重平均の計算に使用されます。
- **enc_outputs_class** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.num_labels)`、*optional*、`config.two_stage=True` の場合に返される) -- 第1段階でスコア上位の `config.num_queries` 個のバウンディングボックスがリージョンプロポーザルとして選択される、予測されたバウンディングボックスのスコア。バウンディングボックスの二値分類（すなわち前景と背景）の出力です。
- **enc_outputs_coord_logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, 4)`、*optional*、`config.two_stage=True` の場合に返される) -- 第1段階で予測されるバウンディングボックス座標の logits。
- **encoder_logits** (`torch.FloatTensor`、形状 `(batch_size, sequence_length, config.num_labels)`、*任意*、`config.two_stage=True` の場合に返されます) -- 第1段階でスコアリングされた上位 `config.num_queries` 個のバウンディングボックスの logits。
- **encoder_pred_boxes** (`torch.FloatTensor`、shape `(batch_size, sequence_length, 4)`、*optional*、`config.two_stage=True` の場合に返されます) -- 第1段階でスコアが上位の `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/main/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L2354)

**パラメータ:**

config ([MMGroundingDinoConfig](/docs/transformers/main/ja/model_doc/mm-grounding-dino#transformers.MMGroundingDinoConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

Grounding DINO モデル（バックボーンとエンコーダー・デコーダー型 Transformer で構成）の上部にオブジェクト検出ヘッドを備え、COCO 検出などのタスクに対応します。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

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

```python
forward(pixel_values: FloatTensor, 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.FloatTensor]]] | None = None, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py#L2395)

**パラメータ:**

pixel_values (`torch.FloatTensor`、shape `(batch_size, num_channels, image_size, image_size)`) : 入力画像に対応するテンソルです。ピクセル値は [GroundingDinoImageProcessor](/docs/transformers/main/ja/model_doc/grounding-dino#transformers.GroundingDinoImageProcessor) を使用して取得できます。詳細は [GroundingDinoImageProcessor.__call__()](/docs/transformers/main/ja/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) を参照してください（[GroundingDinoProcessor](/docs/transformers/main/ja/model_doc/grounding-dino#transformers.GroundingDinoProcessor) は画像の処理に [GroundingDinoImageProcessor](/docs/transformers/main/ja/model_doc/grounding-dino#transformers.GroundingDinoImageProcessor) を使用します）。

input_ids (`torch.LongTensor`、shape `(batch_size, text_sequence_length)`) : 語彙における入力シーケンスのトークンインデックスです。パディングを指定した場合、デフォルトでは無視されます。インデックスは [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用して取得できます。詳細は [BertTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。

token_type_ids (`torch.LongTensor`、shape `(batch_size, text_sequence_length)`、*任意*) : 入力の前半と後半を示すセグメントトークンインデックス。インデックスは`[0, 1]`から選択されます: 0 は`sentence A`トークンに対応し、1 は`sentence B`トークンに対応します  [トークンタイプIDとは何ですか?](../glossary#token-type-ids)

attention_mask (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンインデックスに対する attention を行わないためのマスク。`[0, 1]` から選択されるマスク値:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

pixel_mask (`torch.BoolTensor`、shape `(batch_size, height, width)`、*任意*) : パディングピクセル値に対するアテンションの実行を回避するためのマスク。`[0, 1]` から選択されるマスク値:  - 実ピクセル（つまり **マスクされていない**）は 1、 - パディングピクセル（つまり **マスクされている**）は 0。  [アテンションマスクとは何ですか？](../glossary#attention-mask)

encoder_outputs (`Union[~models.mm_grounding_dino.modeling_mm_grounding_dino.MMGroundingDinoEncoderOutput, tuple]`, *optional*) : (`last_hidden_state`, *optional*: `hidden_states`, *optional*: `attentions`) `last_hidden_state` の形状が `(batch_size, sequence_length, hidden_size)` の *optional* なタプルです。エンコーダの最終層の出力における隠れ状態のシーケンスです。デコーダのクロスアテンションで使用されます。

output_attentions (`bool`, *任意*) : すべてのアテンション層のアテンションテンソルを返すかどうか。詳細は、返されるテンソルの `attentions` を参照してください。

output_hidden_states (`bool`, *任意*) : 全レイヤーの hidden states を返すかどうかを指定します。詳細は、返されるテンソルの `hidden_states` を参照してください。

return_dict (`bool`, *任意*) : プレーンなタプルではなく [ModelOutput](/docs/transformers/main/ja/main_classes/output#transformers.utils.ModelOutput) を返すかどうか。

labels (`list[Dict]`、長さ `(batch_size,)`、*任意*) : 二部マッチング損失を計算するためのラベル。辞書のリストで、各辞書には少なくとも以下の 2 つのキーが含まれます: 'class_labels' と 'boxes'（それぞれバッチ内の画像のクラスラベルとバウンディングボックス）。クラスラベル自体は長さ `(number of bounding boxes in the image,)` の `torch.LongTensor` であり、ボックスは形状 `(number of bounding boxes in the image, 4)` の `torch.FloatTensor` である必要があります。

[MMGroundingDinoForObjectDetection](/docs/transformers/main/ja/model_doc/mm-grounding-dino#transformers.MMGroundingDinoForObjectDetection)のforwardメソッドは、`__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]
```

