# HGNet-V2

[HGNetV2](https://github.com/PaddlePaddle/PaddleClas/blob/v2.6.0/docs/zh_CN/models/ImageNet1k/PP-HGNetV2.md) は、NVIDIA GPU 上で精度とレイテンシの最適なトレードオフを実現するために構築された次世代の畳み込みニューラルネットワーク（CNN）バックボーンです。オリジナルの[HGNet](https://github.com/PaddlePaddle/PaddleClas/blob/v2.6.0/docs/en/models/PP-HGNet_en.md) を基盤として、HGNetV2 は高速な推論速度で高い精度を達成し、画像分類、物体検出、セグメンテーションなどのタスクで優れたパフォーマンスを発揮します。そのため、GPU ベースのコンピュータビジョンアプリケーションにおいて実用的な選択肢となります。

すべてのオリジナルのHGNet V2モデルは、[USTC](https://huggingface.co/ustc-community/models?search=hgnet)組織の下で確認できます。

> [!TIP]
> このモデルは [VladOS95-cyber](https://github.com/VladOS95-cyber) によって提供されました。HGNet V2 をさまざまなコンピュータビジョンタスクに適用する方法の例については、右サイドバーの HGNet V2 モデルをクリックしてください。

以下の例では、[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(
    task="image-classification",
    model="ustc-community/hgnet-v2",
    device=0
)
pipeline("http://images.cocodataset.org/val2017/000000039769.jpg")
```

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

from transformers import AutoImageProcessor, HGNetV2ForImageClassification

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

model = HGNetV2ForImageClassification.from_pretrained("ustc-community/hgnet-v2", device_map="auto")
processor = AutoImageProcessor.from_pretrained("ustc-community/hgnet-v2")

inputs = processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
    logits = model(**inputs).logits
predicted_class_id = logits.argmax(dim=-1).item()

class_labels = model.config.id2label
predicted_class_label = class_labels[predicted_class_id]
print(f"The predicted class label is: {predicted_class_label}")
```

## HGNetV2Config[[transformers.HGNetV2Config]]

#### transformers.HGNetV2Config[[transformers.HGNetV2Config]]

```python
transformers.HGNetV2Config(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, num_channels: int = 3, embedding_size: int = 64, depths: list[int] | tuple[int, ...] = (3, 4, 6, 3), hidden_sizes: list[int] | tuple[int, ...] = (256, 512, 1024, 2048), hidden_act: str = 'relu', _out_features: list[str] | None = None, _out_indices: list[int] | None = None, stem_channels: list[int] | tuple[int, ...] = (3, 32, 48), stem_strides: Sequence = (2, 1, 1, 2, 1), stage_in_channels: list[int] | tuple[int, ...] = (48, 128, 512, 1024), stage_mid_channels: list[int] | tuple[int, ...] = (48, 96, 192, 384), stage_out_channels: list[int] | tuple[int, ...] = (128, 512, 1024, 2048), stage_num_blocks: list[int] | tuple[int, ...] = (1, 1, 3, 1), stage_downsample: list[bool] | tuple[bool, ...] = (False, True, True, True), stage_downsample_strides: Sequence = (2, 2, 2, 2), stage_light_block: list[bool] | tuple[bool, ...] = (False, False, True, True), stage_kernel_size: list[int] | tuple[int, ...] = (3, 3, 5, 5), stage_numb_of_layers: list[int] | tuple[int, ...] = (6, 6, 6, 6), use_learnable_affine_block: bool = False, initializer_range: float = 0.02)
```

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

**パラメータ:**

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

embedding_size (`int`、*任意*、デフォルトは`64`) : 埋め込みおよび隠れ状態の次元数。

depths (`Union[list[int], tuple[int, ...]]`、*任意*、デフォルトは`(3, 4, 6, 3)`) : Transformer の各層の深さ。

hidden_sizes (`Union[list[int], tuple[int, ...]]`、*任意*、デフォルトは`(256, 512, 1024, 2048)`) : モデルの各ステージにおける次元数（隠れ層サイズ）。

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

stem_channels (`list[int]`、*optional*、デフォルトは`[3, 32, 48]`) : ステム層のチャネル次元です。 - 最初の数値 (3) は入力画像のチャネル数 - 2番目の数値 (32) は中間ステムのチャネル数 - 3番目の数値 (48) は出力ステムのチャネル数

stem_strides (`Sequence[int | list[int] | tuple[int, ...]]`、*任意*、デフォルトは`(2, 1, 1, 2, 1)`) : ステム層のストライドパターンです。

stage_in_channels (`list[int]`、*optional*、デフォルトは `[48, 128, 512, 1024]`) : バックボーンの各ステージにおける入力チャネルの次元です。各ステージへの入力が持つチャネル数を定義します。

stage_mid_channels (`list[int]`、*optional*、デフォルトは`[48, 96, 192, 384]`) : バックボーンの各ステージにおけるミッドチャネル次元です。これは、各ステージの中間層で使用するチャネル数を定義します。

stage_out_channels (`list[int]`、*optional*、デフォルトは `[128, 512, 1024, 2048]`) : バックボーンの各ステージの出力チャネル次元です。各ステージの出力が持つチャネル数を定義します。

stage_num_blocks (`list[int]`、*optional*、デフォルトは `[1, 1, 3, 1]`) : バックボーンの各ステージで使用するブロック数。畳み込みブロックを何段積み重ねるかによって、各ステージの深さを制御します。

stage_downsample (`list[bool]`、*optional*、デフォルトは`[False, True, True, True]`) : 各ステージで特徴マップをダウンサンプリングするかどうかを示します。`True`の場合、特徴マップの空間次元が縮小されます。

stage_downsample_strides (`Sequence[int | list[int] | tuple[int, ...]]`、*任意*、デフォルトは`(2, 2, 2, 2)`) : 各ステージの層におけるストライドパターン。

stage_light_block (`list[bool]`、*optional*、デフォルトは`[False, False, True, True]`) : 各ステージでライトブロックを使用するかどうかを示します。ライトブロックは、パラメータ数が少ない場合のある畳み込みブロックのバリアントです。

stage_kernel_size (`list[int]`、*optional*、デフォルトは`[3, 3, 5, 5]`) : 各ステージの畳み込み層のカーネルサイズです。

stage_numb_of_layers (`list[int]`、*optional*、デフォルトは`[6, 6, 6, 6]`) : ステージの各ブロックで使用するレイヤー数です。

use_learnable_affine_block (`bool`、*任意*、デフォルトは`False`) : ネットワーク内で Learnable Affine Blocks (LAB) を使用するかどうかを指定します。LAB は、特定の操作の後に学習可能なスケールとバイアスのパラメータを追加します。

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

これは HGNetV2Backbone の設定を保存するための設定クラスです。指定された引数に従って Hgnet V2 モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[ustc-community/dfine_x_coco](https://huggingface.co/ustc-community/dfine_x_coco) と同様の設定が得られます。

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

## HGNetV2Backbone[[transformers.HGNetV2Backbone]]

#### transformers.HGNetV2Backbone[[transformers.HGNetV2Backbone]]

```python
transformers.HGNetV2Backbone(config: HGNetV2Config)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L343)

#### forward[[transformers.HGNetV2Backbone.forward]]

```python
forward(pixel_values: Tensor, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

**パラメータ:**

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

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

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

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

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

[HGNetV2Backbone](/docs/transformers/main/ja/model_doc/hgnet_v2#transformers.HGNetV2Backbone)の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 HGNetV2Config, HGNetV2Backbone
>>> import torch

>>> config = HGNetV2Config()
>>> model = HGNetV2Backbone(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, 2048, 7, 7]
```

## HGNetV2ForImageClassification[[transformers.HGNetV2ForImageClassification]]

#### transformers.HGNetV2ForImageClassification[[transformers.HGNetV2ForImageClassification]]

```python
transformers.HGNetV2ForImageClassification(config: HGNetV2Config)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L420)

**パラメータ:**

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

HGNetV2 モデルの画像分類ヘッド付き（プーリングされた特徴量の上位に線形層を配置）、例えば ImageNet 向け。

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

```python
forward(pixel_values: typing.Optional[torch.FloatTensor] = None, labels: typing.Optional[torch.LongTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/hgnet_v2/modeling_hgnet_v2.py#L436)

**パラメータ:**

pixel_values (`torch.FloatTensor`、shape `(batch_size, num_channels, image_size, image_size)`、*optional*) : 入力画像に対応するテンソルです。ピクセル値は `image_processor_class` を使用して取得できます。詳細は `image_processor_class.__call__` を参照してください（`processor_class` は画像の処理に `image_processor_class` を使用します）。

labels (`torch.LongTensor`、shape `(batch_size,)`、*任意*) : 画像分類/回帰の損失を計算するためのラベル。インデックスは `[0, ..., config.num_labels - 1]` の範囲である必要があります。`config.num_labels == 1` の場合は回帰損失（Mean-Square loss）が計算され、`config.num_labels > 1` の場合は分類損失（Cross-Entropy）が計算されます。

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

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

**戻り値:** [ImageClassifierOutputWithNoAttention](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) または `tuple(torch.FloatTensor)`

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

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

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

- **loss** (`torch.FloatTensor`、shape `(1,)`、*optional*、`labels` が指定された場合に返されます) -- 分類（または config.num_labels==1 の場合は回帰）の損失。
- **logits** (`torch.FloatTensor`、shape `(batch_size, config.num_labels)`) -- SoftMax 適用前の分類（または config.num_labels==1 の場合は回帰）スコア。
- **hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合、または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（モデルに埋め込み層がある場合はその出力用 1 つ、各ステージの出力用 1 つずつ）で、形状は `(batch_size, num_channels, height, width)` です。各ステージの出力におけるモデルの隠れ状態（特徴マップとも呼ばれます）。

例:
```python
>>> import torch
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import HGNetV2ForImageClassification, AutoImageProcessor
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> model = HGNetV2ForImageClassification.from_pretrained("ustc-community/hgnet-v2")
>>> processor = AutoImageProcessor.from_pretrained("ustc-community/hgnet-v2")

>>> inputs = processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)
>>> outputs.logits.shape
torch.Size([1, 2])
```

