# LW-DETR

[LW-DETR](https://huggingface.co/papers/2407.17140) は、リアルタイム物体検出において支配的な YOLO シリーズと競い、それを上回ることを目的に設計された軽量な Detection Transformer (DETR) アーキテクチャを提案しています。最新の Transformer の進歩と効率的な設計選択を組み合わせることで、速度（レイテンシ）と精度（mAP）の間の新たな最良のバランスを実現しています。

LW-DETRアーキテクチャは、シンプルな構造と高い効率性が特徴です。プレーンなViT Encoder、Projector、そして浅いDETR Decoderで構成されています。以下のコアな変更により、DETRアーキテクチャの効率性と速度を向上させています。
1. Efficient ViT Encoder: ウィンドウ/グローバル注意を交互に適用し、ウィンドウ優先の構成を用いたプレーンな ViT を採用することで、注意の計算複雑度とレイテンシを大幅に削減します。
2. リッチな入力: エンコーダーからマルチレベルの特徴量を集約し、C2f Projector（YOLOv8）を使用して2スケールの特徴量（$1/8$と$1/32$）を渡します。
3. より高速なデコーダー: 変形クロスアテンションを備えた浅い3層のDETRデコーダーを採用し、レイテンシの低減と収束の高速化を実現します。
4. 最適化されたクエリ: 学習可能なコンテンツクエリと生成された空間クエリを組み合わせた混合クエリ方式を使用します。

利用可能な LW DETR のチェックポイントはすべて、[AnnaZhang](https://huggingface.co/AnnaZhang) 組織の下にあります。元のコードは[こちら](https://github.com/Atten4Vis/LW-DETR)で確認できます。

> [!TIP]
> このモデルは [stevenbucaille](https://huggingface.co/stevenbucaille) によって提供されました。
>
> 右側のサイドバーにあるLW-DETRモデルをクリックすると、LW-DETRをさまざまな物体検出タスクに適用する方法の例をさらに確認できます。

以下の例では、[Pipeline](/docs/transformers/main/ja/main_classes/pipelines#transformers.Pipeline)と[AutoModel](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel)クラスを使用してオブジェクト検出を実行する方法を示しています。

```python

from transformers import pipeline

pipeline = pipeline(
    "object-detection",
    model="AnnaZhang/lwdetr_small_60e_coco",
    device_map=0
)

pipeline("http://images.cocodataset.org/val2017/000000039769.jpg")
```

```python
import requests
import torch
from PIL import Image

from transformers import AutoImageProcessor, AutoModelForObjectDetection

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

image_processor = AutoImageProcessor.from_pretrained("AnnaZhang/lwdetr_small_60e_coco")
model = AutoModelForObjectDetection.from_pretrained("AnnaZhang/lwdetr_small_60e_coco", device_map="auto")

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

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

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

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

## リソース

LwDetrの入門を支援するための、Hugging Face公式およびコミュニティ（🌎で示されます）のリソースのリストです。

- 関連項目: [オブジェクト検出タスクガイド](../tasks/object_detection)。

## LwDetrConfig[[transformers.LwDetrConfig]]

#### transformers.LwDetrConfig[[transformers.LwDetrConfig]]

```python
transformers.LwDetrConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, projector_scale_factors: list[float] | tuple[float, ...] = (), hidden_expansion: float = 0.5, c2f_num_blocks: int = 3, activation_function: str = 'silu', batch_norm_eps: float = 1e-05, dropout: float | int = 0.0, decoder_ffn_dim: int = 2048, decoder_n_points: int = 4, decoder_layers: int = 3, decoder_self_attention_heads: int = 8, decoder_cross_attention_heads: int = 16, decoder_activation_function: str = 'relu', num_queries: int = 300, attention_bias: bool = True, attention_dropout: float | int = 0.0, activation_dropout: float | int = 0.0, group_detr: int = 13, init_std: float = 0.02, disable_custom_kernels: bool = True, class_cost: int | float = 2, bbox_cost: int | float = 5, giou_cost: int | float = 2, class_loss_coefficient: int | float = 1, dice_loss_coefficient: int | float = 1, bbox_loss_coefficient: int | float = 5, giou_loss_coefficient: int | float = 2, eos_coefficient: float = 0.1, focal_alpha: float = 0.25, auxiliary_loss: bool = True, d_model: int = 256)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/configuration_lw_detr.py#L109)

**パラメータ:**

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

projector_scale_factors (`list[float]`、*optional*、デフォルトは`[]`) : 特徴ピラミッドネットワークのスケーリング係数です。各スケーリング係数は、異なるレベルでの特徴の解像度を決定します。サポートされる値は 0.5、1.0、2.0 です。

hidden_expansion (`float`、*任意*、デフォルトは 0.5) : プロジェクター層の隠れ次元の拡張係数。

c2f_num_blocks (`int`、*optional*、デフォルトは 3) : C2F レイヤーのブロック数。

activation_function (`str`、*任意*、デフォルトは`"silu"`) : プロジェクターで使用する非線形活性化関数。サポートされる値は`"silu"`、`"relu"`、`"gelu"`です。

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

dropout (`Union[float, int]`、*任意*、デフォルトは`0.0`) : すべての dropout レイヤーの比率。

decoder_ffn_dim (`int`、*任意*、デフォルトは 2048) : デコーダー内の「intermediate」（feed-forward と呼ばれることが多い）層の次元数。

decoder_n_points (`int`、*optional*、デフォルトは 4) : デコーダーの各アテンションヘッドにおける、各特徴レベルでサンプリングされるキーの数。

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

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

decoder_cross_attention_heads (`int`、*optional*、デフォルトは 16) : デコーダーのクロスアテンションにおける各アテンション層のアテンションヘッド数。

decoder_activation_function (`str`、*任意*、デフォルトは`"relu"`) : デコーダーで使用する非線形活性化関数。サポートされる値は`"relu"`、`"silu"`、`"gelu"`です。

num_queries (`int`、*optional*、デフォルト値は 300) : オブジェクトクエリ数、すなわち検出スロットの数。[LwDetrModel](/docs/transformers/main/ja/model_doc/lw_detr#transformers.LwDetrModel) が 1 枚の画像で検出できるオブジェクトの最大数を示します。

attention_bias (`bool`, *任意*, デフォルトは `True`) : セルフアテンションにおいて、クエリ、キー、バリュー、出力の投影層にバイアスを使用するかどうか。

attention_dropout (`Union[float, int]`、*任意*、デフォルトは`0.0`) : 注意確率のドロップアウト率。

activation_dropout (`Union[float, int]`、*任意*、デフォルトは`0.0`) : 全結合層内の活性化に対する dropout 率。

group_detr (`int`、*optional*、デフォルトは 13) : Group DETR 注意機構のグループ数です。計算複雑性を低減するのに役立ちます。

init_std (`float`、*任意*、デフォルトは`0.02`) : すべての重み行列を初期化するためのtruncated_normal_initializerの標準偏差です。

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

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

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

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

class_loss_coefficient (`float`、*任意*、デフォルト値は 1) : ハンガリアンマッチングのコストにおける分類損失の相対的な重み。

dice_loss_coefficient (`Union[int, float]`、*任意*、デフォルトは`1`) : パノプティックセグメンテーション損失における dice loss の相対的な重み。

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

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

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

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

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

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

これは LwDetrModel の設定を保存するための設定クラスです。指定された引数に基づいて Lw Detr モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[AnnaZhang/lwdetr_small_60e_coco](https://huggingface.co/AnnaZhang/lwdetr_small_60e_coco) と同様の設定が得られます。

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) のドキュメントを参照してください。

例:

```python
>>> from transformers import LwDetrConfig, LwDetrModel

>>> # Initializing a LW-DETR AnnaZhang/lwdetr_small_60e_coco style configuration
>>> configuration = LwDetrConfig()

>>> # Initializing a model (with random weights) from the AnnaZhang/lwdetr_small_60e_coco style configuration
>>> model = LwDetrModel(configuration)

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

## LwDetrViTConfig[[transformers.LwDetrViTConfig]]

#### transformers.LwDetrViTConfig[[transformers.LwDetrViTConfig]]

```python
transformers.LwDetrViTConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, hidden_size: int = 768, num_hidden_layers: int = 12, num_attention_heads: int = 12, mlp_ratio: int = 4, hidden_act: str = 'gelu', dropout_prob: float | int = 0.0, initializer_range: float = 0.02, layer_norm_eps: float = 1e-06, image_size: int | list[int] | tuple[int, int] = 256, pretrain_image_size: int | list[int] | tuple[int, int] = 224, patch_size: int | list[int] | tuple[int, int] = 16, num_channels: int = 3, qkv_bias: bool = True, window_block_indices: list[int] | tuple[int, ...] = (), use_absolute_position_embeddings: bool = True, _out_features: list[str] | None = None, _out_indices: list[int] | None = None, cae_init_values: float = 0.1, num_windows: int = 16)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/configuration_lw_detr.py#L35)

**パラメータ:**

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

num_hidden_layers (`int`, *任意*, デフォルトは `12`) : Transformer デコーダーの隠れ層の数。

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

mlp_ratio (`int`、*任意*、デフォルトは`4`) : MLPの隠れ層次元と埋め込み次元の比率。

hidden_act (`str`、*任意*、デフォルトは`gelu`) : デコーダーで使用する非線形活性化関数（関数または文字列）。例えば、`"gelu"`、`"relu"`、`"silu"`など。

dropout_prob (`Union[float, int]`、*任意*、デフォルトは`0.0`) : すべての dropout レイヤーの比率。

initializer_range (`float`、*任意*、デフォルトは`0.02`) : すべての重み行列を初期化するためのtruncated_normal_initializerの標準偏差です。

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

image_size (`Union[int, list[int], tuple[int, int]]`、*任意*、デフォルトは`256`) : 各画像のサイズ（解像度）。

pretrain_image_size (`int`、*optional*、デフォルトは 224) : プリトレーニング中の各画像のサイズ（解像度）。

patch_size (`Union[int, list[int], tuple[int, int]]`、*任意*、デフォルトは`16`) : 各パッチのサイズ（解像度）。

num_channels (`int`、*任意*、デフォルトは`3`) : 入力チャネル数。

qkv_bias (`bool`, *任意*, デフォルトは `True`) : クエリ、キー、バリューにバイアスを追加するかどうか。

window_block_indices (`list[int]`、*任意*、デフォルトは`[]`) : 通常のグローバル自己注意ではなくウィンドウ注意を使用すべきブロックのインデックスのリスト。

use_absolute_position_embeddings (`bool`、*任意*、デフォルトは`True`) : パッチ埋め込みに絶対位置埋め込みを追加するかどうか。

cae_init_values (`float`、*任意*、デフォルト値は 0.1) : `use_cae` が有効な場合の CAE パラメータの初期化値です。

num_windows (`int`、*optional*、デフォルトは 16) : ウィンドウベースの注意機構におけるウィンドウ数。完全な平方数である必要があり、画像サイズはこの値の平方根で割り切れる必要があります。これにより、効率的なウィンドウ優先のフィーチャマップの整理が可能になります。

これは LwDetrModel の設定を保存するための設定クラスです。指定された引数に基づいて Lw Detr モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[AnnaZhang/lwdetr_small_60e_coco](https://huggingface.co/AnnaZhang/lwdetr_small_60e_coco) と同様の設定が得られます。

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) のドキュメントを参照してください。

例:

```python
>>> from transformers import LwDetrViTConfig, LwDetrViTModel

>>> # Initializing a LW-DETR ViT configuration
>>> configuration = LwDetrViTConfig()

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

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

## LwDetrModel[[transformers.LwDetrModel]]

#### transformers.LwDetrModel[[transformers.LwDetrModel]]

```python
transformers.LwDetrModel(config: LwDetrConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/modeling_lw_detr.py#L1204)

**パラメータ:**

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

裸の LW Detr Model（バックボーンとデコーダー Transformer で構成）は、上部に特定のヘッドを持たず、生の hidden-states を出力します。

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

```python
forward(pixel_values: FloatTensor = None, pixel_mask: typing.Optional[torch.LongTensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/modeling_lw_detr.py#L1310)

**パラメータ:**

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

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

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

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

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

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

- **init_reference_points** (`torch.FloatTensor`、shape `(batch_size, num_queries, 4)`) -- Transformer デコーダーに渡される初期の参照点。
- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルの最終層の出力における隠れ状態のシーケンス。
- **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)`) -- 中間参照点のスタック（デコーダーの各層の参照点）。
- **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。
- **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)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **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適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。

例:

```python
>>> from transformers import AutoImageProcessor, DeformableDetrModel
>>> 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("AnnaZhang/lwdetr_small_60e_coco")
>>> model = DeformableDetrModel.from_pretrained("AnnaZhang/lwdetr_small_60e_coco")

>>> 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]
```

## LwDetrForObjectDetection[[transformers.LwDetrForObjectDetection]]

#### transformers.LwDetrForObjectDetection[[transformers.LwDetrForObjectDetection]]

```python
transformers.LwDetrForObjectDetection(config: LwDetrConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/modeling_lw_detr.py#L1540)

**パラメータ:**

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

LW DETR モデル（バックボーンとデコーダーの 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.LwDetrForObjectDetection.forward]]

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

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/modeling_lw_detr.py#L1554)

**パラメータ:**

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

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

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

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

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

[LwDetrForObjectDetection](/docs/transformers/main/ja/model_doc/lw_detr#transformers.LwDetrForObjectDetection)の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] の範囲で正規化されています（パディングは考慮されません）。正規化されていないバウンディングボックスを取得するには、`~DeformableDetrProcessor.post_process_object_detection` を使用できます。
- **auxiliary_outputs** (`list[Dict]`, *optional*) -- 任意。補助損失が有効化されている場合（つまり `config.auxiliary_loss` が `True` に設定されている場合）かつラベルが提供されている場合にのみ返されます。各デコーダ層について、上記の 2 つのキー（`logits` と `pred_boxes`）を含む辞書のリストです。
- **init_reference_points** (`torch.FloatTensor`、shape `(batch_size, num_queries, 4)`) -- Transformer デコーダーに渡される初期の参照点。
- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*optional*) -- モデルの最終層の出力における隠れ状態のシーケンス。
- **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)`) -- 中間参照点のスタック（デコーダーの各層の参照点）。
- **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。
- **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)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **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適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。

例:

```python
>>> from transformers import AutoImageProcessor, LwDetrForObjectDetection
>>> 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("AnnaZhang/lwdetr_small_60e_coco")
>>> model = LwDetrForObjectDetection.from_pretrained("AnnaZhang/lwdetr_small_60e_coco")

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

>>> # 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.5, target_sizes=target_sizes)[
...     0
... ]
>>> for score, label, box in zip(results["scores"], results["labels"], results["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}"
...     )
Detected cat with confidence 0.8 at location [16.5, 52.84, 318.25, 470.78]
Detected cat with confidence 0.789 at location [342.19, 24.3, 640.02, 372.25]
Detected remote with confidence 0.633 at location [40.79, 72.78, 176.76, 117.25]
```

## LwDetrViTBackbone[[transformers.LwDetrViTBackbone]]

#### transformers.LwDetrViTBackbone[[transformers.LwDetrViTBackbone]]

```python
transformers.LwDetrViTBackbone(config: LwDetrViTConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/modeling_lw_detr.py#L342)

**パラメータ:**

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

Lw 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.LwDetrViTBackbone.forward]]

```python
forward(pixel_values: Tensor, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/lw_detr/modeling_lw_detr.py#L356)

**パラメータ:**

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

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

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

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

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

- **feature_maps** (`tuple(torch.FloatTensor)`、形状 `(batch_size, num_channels, height, width)`) -- 各ステージのフィーチャマップ。
- **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)` または `(batch_size, num_channels, height, width)` になります。

  各ステージの出力におけるモデルのHidden-states、および初期の埋め込み出力。
- **attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返される) -- `torch.FloatTensor` のタプル（レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。バックボーンがアテンションを使用する場合にのみ適用されます。

  アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

例:

```python
>>> from transformers import LwDetrViTConfig, LwDetrViTBackbone
>>> import torch

>>> config = LwDetrViTConfig()
>>> model = LwDetrViTBackbone(config)

>>> pixel_values = torch.randn(1, 3, 224, 224)

>>> with torch.no_grad():
...     outputs = model(pixel_values)

>>> feature_maps = outputs.feature_maps
>>> list(feature_maps[-1].shape)
[1, 768, 14, 14]
```

