# DEIMv2

## 概要

DEIMv2 (DETR with Improved Matching v2) は、Shihua Huang、Yongjie Hou、Longfei Liu、Xuanlong Yu、Xi Shen による [DEIMv2: Real-Time Object Detection Meets DINOv3](https://huggingface.co/papers/2509.20787) で提案されました。

論文の抄録は以下の通りです。

*シンプルかつ効果的な Dense O2O により、DEIM はより高速な収束と性能の向上を実現しています。本稿では、DINOv3 の特徴量を組み込むことで DEIMv2 を構築しました。DEIMv2 は X から Atto までの 8 つのモデルサイズを備え、GPU、エッジ、モバイル環境でのデプロイメントに対応しています。X、L、M、S のバリアントでは、DINOv3 で事前学習 / 蒸留されたバックボーンを採用し、Spatial Tuning Adapter (STA) を導入しました。STA は、DINOv3 の単一スケール出力を効率的にマルチスケール特徴量に変換し、強力なセマンティクスと細粒度の詳細を補完することで検出性能を向上させます。超軽量モデル（Nano、Pico、Femto、Atto）では、厳格なリソース制約を満たすために、深さと幅のプルーニングを施した HGNetv2 を採用しています。簡素化されたデコーダーとアップグレードされた Dense O2O との組み合わせにより、この統一設計は多様なシナリオにおいて優れた性能とコストのトレードオフを実現し、新たな SOTA 結果を打ち立てています。特に、最大モデルである DEIMv2-X は、わずか 50.3M パラメータで 57.8 AP を達成し、56.5 AP に留まる従来の X スケールモデル（60M パラメータ以上を必要とする）を上回っています。コンパクトな側面では、DEIMv2-S は COCO で 50 AP のマイルストーンを突破した初の 10M パラメータ未満モデル（9.71M）であり、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`, *任意*) : `enc_score_head` および `class_embed` のバイアスを初期化するために、バイアス初期化器が使用する事前確率。`None` の場合、モデルの重みを初期化する際に `prior_prob` は `prior_prob = 1 / (num_labels + 1)` として計算されます。

layer_norm_eps (`float`、*任意*、デフォルトは`1e-05`) : Layer Normalization 層で使用する epsilon。

batch_norm_eps (`float`、*任意*、デフォルトは`1e-05`) : バッチ正規化レイヤーで使用するepsilonです。

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

freeze_backbone_batch_norms (`bool`, *任意*, デフォルトは `True`) : バックボーン内のバッチ正規化レイヤーを凍結するかどうかを指定します。

encoder_hidden_dim (`int`、*任意*、デフォルトは`256`) : 隠れ表現の次元数。

encoder_in_channels (`list`、*任意*、デフォルトは `[512, 1024, 2048]`) : エンコーダーのマルチレベル特徴量入力。

feat_strides (`list[int]`、*optional*、デフォルトは `[8, 16, 32]`) : 各特徴量マップで使用するストライド。

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

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

encoder_attention_heads (`int`、*optional*、デフォルトは`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]`、*任意*) : stride を考慮した後に、position embeddings の実効的な高さおよび幅を計算するために使用される高さおよび幅。

normalize_before (`bool`, *任意*, デフォルトは `False`) : Transformerエンコーダー層において、自己注意機構とフィードフォワードモジュールの前にレイヤーノーマルを適用するかどうかを決定します。

hidden_expansion (`float`、*任意*、デフォルト値は 1.0) : RepVGGBlock と CSPRepLayer の次元サイズを拡大するための拡張比率。

d_model (`int`、*任意*、デフォルトは`256`) : エンコーダ層とプーラー層のサイズ。

num_queries (`int`、*任意*、デフォルトは 300) : オブジェクトクエリの数。

decoder_in_channels (`list`、*任意*、デフォルトは`[256, 256, 256]`) : デコーダーのマルチレベル特徴量次元。

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

num_denoising (`int`、*optional*、デフォルトは 100) : 対照的デノイジングに使用されるデノイジングタスクまたはクエリの総数。

label_noise_ratio (`float`、*任意*、デフォルト値は 0.5) : 乱数を追加するべきデノイジングラベルの割合です。

box_noise_scale (`float`、*任意*、デフォルト値は 1.0) : 境界ボックスに追加されるノイズのスケールまたは大きさ。

learn_initial_query (`bool`、*任意*、デフォルトは`False`) : 学習中にデコーダーの初期クエリ埋め込みを学習するかどうかを示します。

anchor_image_size (`tuple[int, int]`、*任意*) : 評価時にバウンディングボックスアンカーを生成するために使用される入力画像の高さと幅。

with_box_refine (`bool`、*任意*、デフォルトは`True`) : 反復的なバウンディングボックスの精緻化を適用するかどうか。

matcher_alpha (`float`、*任意*、デフォルト値は 0.25) : Hungarian Matcher で使用されるパラメータ alpha。

matcher_gamma (`float`、*optional*、デフォルト値は 2.0) : Hungarian Matcher で使用されるパラメータ gamma。

matcher_class_cost (`float`、*任意*、デフォルトは 2.0) : Hungarian Matcher が使用するクラス損失の相対的な重みです。

matcher_bbox_cost (`float`、*任意*、デフォルト値は 5.0) : Hungarian Matcher が使用するバウンディングボックス損失の相対的な重みです。

matcher_giou_cost (`float`、*optional*、デフォルトは 2.0) : Hungarian Matcher が使用する giou loss の相対的な重みです。

use_focal_loss (`bool`, *任意*, デフォルトは `True`) : focal loss を使用するかどうかを指定するパラメータ。

auxiliary_loss (`bool`, *任意*, デフォルトは `True`) : 補助的なデコーディング損失（各デコーダ層での損失）を使用するかどうかを指定します。

focal_loss_alpha (`float`、*任意*、デフォルト値 0.75) : フォーカル損失を計算するために使用されるパラメータ alpha。

focal_loss_gamma (`float`、*optional*、デフォルト値は 2.0) : フォーカル損失を計算するために使用されるパラメータ gamma。

weight_loss_vfl (`float`、*任意*、デフォルトは 1.0) : オブジェクト検出損失における varifocal loss の相対的な重み。

weight_loss_bbox (`float`、*任意*、デフォルト値は 5.0) : オブジェクト検出損失における L1 バウンディングボックス損失の相対的な重み。

weight_loss_giou (`float`、*任意*、デフォルト値は 2.0) : オブジェクト検出損失における汎化 IoU 損失の相対的な重み。

weight_loss_fgl (`float`、*任意*、デフォルト値は 0.15) : オブジェクト検出損失における、細粒度ローカライゼーション損失の相対的な重み。

weight_loss_ddf (`float`、*任意*、デフォルト値は 1.5) : オブジェクト検出損失における、デカップルされた蒸留フォーカル損失の相対的な重み。

eos_coefficient (`float`、*任意*、デフォルトは `0.0001`) : オブジェクト検出損失における「no-object」クラスの相対的な分類重み。

eval_idx (`int`、*optional*、デフォルトは -1) : 評価に使用するデコーダー層のインデックス。

layer_scale (`float`、*任意*、デフォルトは`1.0`) : 後続のデコーダ層における隠れ次元のスケーリング係数。

max_num_bins (`int`、*任意*、デフォルトは 32) : 分布ガイド型バウンディングボックスの精緻化における、最大ビン数。

reg_scale (`float`、*optional*、デフォルト値は 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) : Location Quality Estimator MLP の層数。

decoder_offset_scale (`float`、*任意*、デフォルトは 0.5) : 変形アテンションで使用するオフセットスケール。

decoder_method (`str`、*任意*、デフォルトは`"default"`) : デコーダーに使用するメソッド: `"default"`または`"discrete"`。

up (`float`、*任意*、デフォルト値は 0.5) : Weighting Function の上限を制御します。

tie_word_embeddings (`bool`、*任意*、デフォルトは`True`) : モデルの`tied_weights_keys`マッピングに従って重み埋め込みを共有するかどうか。

weight_loss_mal (`float`、*任意*、デフォルト値は 1.0) : オブジェクト検出損失における、マッチング補助損失の相対的な重み。

use_dense_one_to_one (`bool`、*任意*、デフォルトは`True`) : デコーダー層全体で密な1対1マッチングを使用するかどうか。

mal_alpha (`float`, *任意*) : Matching Auxiliary Loss (MAL) の Alpha パラメータ。`None` の場合、`focal_loss_alpha` が使用されます。

encoder_fuse_op (`str`、*任意*、デフォルトは `"sum"`) : エンコーダー FPN で使用される融合操作。DEIMv2 は D-FINE の `"cat"` の代わりに `"sum"` を使用します。

spatial_tuning_adapter_inplanes (`int`、*任意*、デフォルトは 16) : STA 畳み込みステムの入力プレーンの数。

encoder_type (`str`、*任意*、デフォルトは`"hybrid"`) : 使用するエンコーダーの種類。`"hybrid"`は、AIFI、FPN、PANを備えた完全なHybridEncoderを使用します。`"lite"`は、GAP融合を用いた軽量なLiteEncoderを使用し、Atto、Femto、Picoなどの小型バリアント向けです。

use_gateway (`bool`、*任意*、デフォルトは`True`) : デコーダー層でゲートウェイ機構（クロスアテンションゲーティング）を使用するかどうか。`False`の場合、エンコーダーアテンションの出力にはRMSNormを使用します。

share_bbox_head (`bool`、*任意*、デフォルトは`False`) : 境界ボックス予測ヘッドをすべてのデコーダー層で共有するかどうか。

encoder_has_trailing_conv (`bool`、*任意*、デフォルトは`True`) : エンコーダーのCSPブロックが、ボトルネックパスの後に3x3畳み込みを含むかどうか。`True`はRepNCSPELAN4（HGNetV2 NおよびLiteEncoderのバリアントで使用）の場合。`False`はRepNCSPELAN5（DINOv3のバリアントで使用）の場合。

This is the configuration class to store the configuration of a Deimv2Model. It is used to instantiate a Deimv2 model according to the specified arguments, defining the model architecture. Instantiating a configuration with the defaults will yield a similar configuration to that of the [Intellindust/DEIMv2_HGNetv2_N_COCO](https://huggingface.co/Intellindust/DEIMv2_HGNetv2_N_COCO)

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/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/ja/model_doc/deimv2#transformers.Deimv2Config)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

RT-DETRモデル（バックボーンとエンコーダー・デコーダーで構成）は、上部にヘッドを備えずに生の隠れ状態を出力します。

このモデルは [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.Deimv2Model.forward]]

```python
forward(pixel_values: FloatTensor, pixel_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: typing.Optional[torch.FloatTensor] = None, inputs_embeds: typing.Optional[torch.FloatTensor] = 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.FloatTensor`、shape `(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.FloatTensor`, *任意*) : (`last_hidden_state`, *任意*: `hidden_states`, *任意*: `attentions`) のタプル。`last_hidden_state` の形状は `(batch_size, sequence_length, hidden_size)`、*任意*) で、エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。

inputs_embeds (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*任意*) : フラット化された特徴量マップ（backbone + projection layer の出力）を渡す代わりに、画像のフラット化された表現を直接渡すこともできます。

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` である必要があります。

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

`Deimv2ModelOutput`、または`torch.FloatTensor`のタプル(`return_dict=False`が渡された場合、または`config.return_dict=False`の場合)。設定(`None`)と入力に応じて、さまざまな要素で構成されます。

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

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

- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, num_queries, hidden_size)`) -- モデルのデコーダーの最終層の出力における、隠れ状態のシーケンス。
- **intermediate_hidden_states** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- 中間の隠れ状態のスタック（デコーダーの各層の出力）。
- **intermediate_logits** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, sequence_length, config.num_labels)`) -- 中間 logits のスタック（デコーダーの各層の logits）。
- **intermediate_reference_points** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, 4)`) -- 中間参照点のスタック（デコーダーの各層の参照点）。
- **intermediate_predicted_corners** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, 4)`) -- 積み重ねられた中間予測コーナー（デコーダーの各層の予測コーナー）。
- **initial_reference_points** (`torch.FloatTensor`、shape `(batch_size, 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[torch.FloatTensor]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
- **cross_attentions** (`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** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。
- **encoder_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[torch.FloatTensor]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
- **init_reference_points** (`torch.FloatTensor`、shape `(batch_size, num_queries, 4)`) -- Transformer デコーダーに渡される初期の参照点。
- **enc_topk_logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.num_labels)`) -- エンコーダ段階で、スコアが上位の `config.two_stage_num_proposals` 個のバウンディングボックスがリージョンプロポーザルとして選択される、予測されたバウンディングボックスのスコアです。バウンディングボックスの二値分類（すなわち、フォアグラウンドとバックグラウンド）の出力です。
- **enc_topk_bboxes** (`torch.FloatTensor`、shape `(batch_size, sequence_length, 4)`) -- エンコーダ段階で予測されるバウンディングボックス座標の logits。
- **enc_outputs_class** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.num_labels)`、*optional*、`config.with_box_refine=True` かつ `config.two_stage=True` の場合に返されます) -- 第1段階でスコア上位の `config.two_stage_num_proposals` 個のバウンディングボックスがリージョンプロポーザルとして選択される、予測されたバウンディングボックスのスコアです。バウンディングボックスの二値分類（すなわち前景と背景）の出力です。
- **enc_outputs_coord_logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, 4)`、*optional*、`config.with_box_refine=True` かつ `config.two_stage=True` の場合に返されます) -- 第1段階で予測されるバウンディングボックス座標の logits。
- **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/ja/model_doc/deimv2#transformers.Deimv2Config)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

RT-DETRモデル（バックボーンとエンコーダー・デコーダーで構成）は、バウンディングボックスとロジットを出力し、これらはさらにスコアとクラスにデコードされます。

このモデルは [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.Deimv2ForObjectDetection.forward]]

```python
forward(pixel_values: FloatTensor, pixel_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: typing.Optional[torch.FloatTensor] = None, inputs_embeds: typing.Optional[torch.FloatTensor] = 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.FloatTensor`、shape `(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.FloatTensor`, *任意*) : (`last_hidden_state`, *任意*: `hidden_states`, *任意*: `attentions`) のタプル。`last_hidden_state` の形状は `(batch_size, sequence_length, hidden_size)`、*任意*) で、エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。

inputs_embeds (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*任意*) : `input_ids` を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、`input_ids` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。

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` である必要があります。

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

`Deimv2ObjectDetectionOutput`、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。設定（`None`）や入力に応じて、さまざまな要素で構成されます。

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

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

- **loss** (`torch.FloatTensor`、shape `(1,)`、*optional*、`labels` が提供された場合に返されます) -- クラス予測の負の対数尤度（クロスエントロピー）とバウンディングボックス損失の線形結合による総損失。後者は、L1損失と汎用スケール不変IoU損失の線形結合として定義されます。
- **loss_dict** (`Dict`, *任意*) -- 個別の損失を含む辞書です。ログ出力に便利です。
- **logits** (`torch.FloatTensor`、shape `(batch_size, num_queries, num_classes + 1)`) -- すべてのクエリに対する分類 logits（no-object を含む）。
- **pred_boxes** (`torch.FloatTensor`、shape `(batch_size, num_queries, 4)`) -- すべてのクエリに対する正規化されたボックス座標です。(center_x, center_y, width, height) で表されます。これらの値は、バッチ内の各画像のサイズに対して [0, 1] の範囲で正規化されています（パディングは考慮されません）。`~Deimv2ImageProcessor.post_process_object_detection` を使用すると、正規化されていない（絶対座標の）バウンディングボックスを取得できます。
- **auxiliary_outputs** (`list[Dict]`, *optional*) -- 任意。補助損失が有効化されている場合（つまり `config.auxiliary_loss` が `True` に設定されている場合）かつラベルが提供されている場合にのみ返されます。各デコーダ層について、上記の 2 つのキー（`logits` と `pred_boxes`）を含む辞書のリストです。
- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, num_queries, hidden_size)`) -- モデルのデコーダーの最終層の出力における、隠れ状態のシーケンス。
- **intermediate_hidden_states** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- 中間の隠れ状態のスタック（デコーダーの各層の出力）。
- **intermediate_logits** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, config.num_labels)`) -- 中間層の logits をスタックしたもの（デコーダーの各層の logits）。
- **intermediate_reference_points** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, 4)`) -- 中間参照点のスタック（デコーダーの各層の参照点）。
- **intermediate_predicted_corners** (`torch.FloatTensor`、shape `(batch_size, config.decoder_layers, num_queries, 4)`) -- 積み重ねられた中間予測コーナー（デコーダーの各層の予測コーナー）。
- **initial_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[torch.FloatTensor]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
- **cross_attentions** (`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** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。
- **encoder_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[torch.FloatTensor]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
- **init_reference_points** (`torch.FloatTensor`、shape `(batch_size, num_queries, 4)`) -- Transformer デコーダーに渡される初期の参照点。
- **enc_topk_logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.num_labels)`、*optional*、`config.with_box_refine=True` かつ `config.two_stage=True` の場合に返されます) -- エンコーダーにおける予測バウンディングボックス座標の logits。
- **enc_topk_bboxes**（`torch.FloatTensor`、形状 `(batch_size, sequence_length, 4)`、*任意*、`config.with_box_refine=True` かつ `config.two_stage=True` の場合に返されます）-- エンコーダーにおける予測バウンディングボックス座標の logits。
- **enc_outputs_class** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.num_labels)`、*optional*、`config.with_box_refine=True` かつ `config.two_stage=True` の場合に返されます) -- 第1段階でスコア上位の `config.two_stage_num_proposals` 個のバウンディングボックスがリージョンプロポーザルとして選択される、予測されたバウンディングボックスのスコアです。バウンディングボックスの二値分類（すなわち前景と背景）の出力です。
- **enc_outputs_coord_logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, 4)`、*optional*、`config.with_box_refine=True` かつ `config.two_stage=True` の場合に返されます) -- 第1段階で予測されるバウンディングボックス座標の logits。
- **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}"
...     )
```

