# RADIO

[RADIO](https://huggingface.co/papers/2312.06709)（Reduce All Domains Into One）は、NVIDIA によるビジョン・ファウンデーションモデルのファミリーです。複数の教師モデル（CLIP、DINOv2、SAM など）からのマルチティーチャー蒸留によって、単一の ViT バックボーンに学習されます。画像レベルの`summary`埋め込みと、高密度な空間的`features`の両方を生成し、Cropped Position Embedding（CPE）パッチジェネレーターを通じて可変の入力解像度をサポートします。

以下の例では、[RadioModel](/docs/transformers/main/ja/model_doc/radio#transformers.RadioModel) クラスを使用して画像特徴を抽出する方法を示しています。

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

from transformers import CLIPImageProcessor, RadioModel

hf_repo = "nvidia/C-RADIOv4-H"

device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"

model = RadioModel.from_pretrained(hf_repo)
model.eval().to(device)

image_processor = CLIPImageProcessor(
    size={"height": 224, "width": 224}, do_resize=True, do_center_crop=False, do_normalize=False
)

url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
pixel_values = pixel_values.to(device)

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

summary = outputs.summary    # (1, 2560) image-level embedding
features = outputs.features   # (1, 196, 1280) dense spatial features
```

## RadioConfig[[transformers.RadioConfig]]

#### transformers.RadioConfig[[transformers.RadioConfig]]

```python
transformers.RadioConfig(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 = 1280, num_hidden_layers: int = 32, num_attention_heads: int = 16, mlp_ratio: float = 4.0, hidden_act: str = 'gelu', layer_norm_eps: float = 1e-06, attention_probs_dropout_prob: float = 0.0, hidden_dropout_prob: float = 0.0, drop_path_rate: float = 0.0, use_swiglu_ffn: bool = False, qkv_bias: bool = True, layerscale_value: float = 1.0, num_channels: int = 3, patch_size: int = 16, image_size: int = 224, max_img_size: int = 2048, num_cls_tokens: int = 3, num_registers: int = 7, video_temporal_patch_size: int | None = None, patch_dim: int | None = None, video_patch_dim: int | None = None, summary_idxs: list[int] | None = None, norm_mean: list[float] | tuple[float, float, float] = (0.48145466, 0.4578275, 0.40821073), norm_std: list[float] | tuple[float, float, float] = (0.26862954, 0.26130258, 0.27577711), initializer_range: float = 0.02)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/radio/configuration_radio.py#L28)

**パラメータ:**

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

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

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

mlp_ratio (`float`、*任意*、デフォルトは 4.0) : `hidden_size`に対する MLP の隠れ層サイズ（hidden size）の比率。

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

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

attention_probs_dropout_prob (`float`、*任意*、デフォルトは`0.0`) : 注意確率のドロップアウト率です。

hidden_dropout_prob (`float`、*任意*、デフォルトは `0.0`) : embeddings、encoder、pooler 内のすべての全結合層における dropout 確率。

drop_path_rate (`float`、*任意*、デフォルトは`0.0`) : パッチ融合のドロップパス率。

use_swiglu_ffn (`bool`, *任意*, デフォルトは `False`) : エンコーダー層で標準の MLP の代わりに SwiGLU フィードフォワードネットワークを使用するかどうか。

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

layerscale_value (`float`、*optional*、デフォルト値は 1.0) : LayerScale パラメータの初期値です。C-RADIO には LayerScale がありません。デフォルト値の `1.0` により、(継承された) LayerScale は恒等操作となります。

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

patch_size (`int`, *optional*, デフォルトは `16`) : 各パッチのサイズ（解像度）。

image_size (`int`, *任意*, デフォルトは `224`) : 各画像のサイズ（解像度）。

max_img_size (`int`、*optional*、デフォルトは 2048) : CPE パッチ生成器の位置埋め込みテーブルのサイズを決定するために使用される、サポートされる最大画像サイズ（ピクセル単位）。

num_cls_tokens (`int`, *optional*, デフォルトは 3) : パッチシーケンスの先頭に付加される、学習されたクラス（サマリー）トークンの数。

num_registers (`int`、*optional*、デフォルトは 7) : パッチシーケンスの先頭に付加される、学習されたレジスタトークンの数。

video_temporal_patch_size (`int`, *optional*) : パッチあたりの時間方向にスタックされたフレーム数。設定すると、パッチジェネレーターは時間方向にパッキングされた動画パッチ用の`video_patch_projection`も構築します。`None`に設定すると、動画パスが無効になります。

patch_dim (`int`, *optional*) : 1つの画像パッチのフラット化されたサイズ。`num_channels`と`patch_size`から導出されます。

video_patch_dim (`int`, *optional*) : 1つの時間方向にパッキングされた動画パッチのフラット化されたサイズ。`video_temporal_patch_size` と `patch_dim` から導出されます。画像専用のチェックポイントの場合は `None` になります。

summary_idxs (`list[int]`、*optional*、デフォルトは`[0, 1]`) : `summary`出力埋め込みに集約してフラット化するためのクラストークンのインデックス。

norm_mean (`tuple[float, float, float]`、*optional*、デフォルトは`OPENAI_CLIP_MEAN`) : 入力コンディショナーがピクセル値の正規化に使用する、チャネルごとの平均値です。

norm_std (`tuple[float, float, float]`、*optional*、デフォルトは`OPENAI_CLIP_STD`) : 入力コンディショナーがピクセル値の正規化に使用する、チャネルごとの標準偏差。

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

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

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

## RadioModel[[transformers.RadioModel]]

#### transformers.RadioModel[[transformers.RadioModel]]

```python
transformers.RadioModel(config: RadioConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/radio/modeling_radio.py#L434)

**パラメータ:**

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

特定のヘッドを付加せず、生のhidden-statesを出力する素のRadio Model。

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

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

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/radio/modeling_radio.py#L454)

**パラメータ:**

pixel_values (`torch.Tensor`、shape は `(batch_size, num_channels, height, width)` または `(total_patches, num_channels * patch_size**2)`) : 1 つのサイズの画像、または `image_grid_hw` を使用する場合、異なるサイズの画像のフラット化されたパッチが連結されたもの。各パッチはチャネル優先で配置されており、つまり `(num_channels, patch_size, patch_size)` となっています。

image_grid_hw (`torch.LongTensor`、形状 `(num_images, 2)`、*任意*) : パックされた `pixel_values` 内の各画像の Patch グリッド `(height, width)`。

**戻り値:** `RadioModelOutput` または `tuple(torch.Tensor)`

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

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

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

- **summary** (`torch.Tensor`、形状 `(batch_size, num_summary_idxs * hidden_size)`) -- `config.summary_idxs` によって選択された cls トークンから収集された、フラット化されたサマリー埋め込み。
- **features** (`torch.Tensor`、shape `(batch_size, num_patches, hidden_size)`) -- 高密度な空間パッチ特徴量です。パックされた入力(`image_grid_hw` が指定されている場合)では、すべての画像のパッチ特徴量が連結されたもので、shape は `(total_patches, hidden_size)` です。
- **last_hidden_state** (`torch.Tensor`、形状 `(batch_size, sequence_length, hidden_size)`) -- 最終エンコーダー層からの完全なトークンシーケンス（プレフィックストークン + パッチ）。パックされた入力の場合、すべての画像のシーケンスが連結されたもので、形状は `(total_sequence_length, hidden_size)` です。
- **hidden_states** (`tuple[torch.Tensor]`、*optional*、`output_hidden_states=True` が渡された場合、または `config.output_hidden_states=True` の場合に返されます) -- `torch.Tensor` のタプル（モデルに埋め込み層がある場合はその出力用 1 つ、各層の出力用 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

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

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

