Transformers documentation
ConvNeXt V2
このモデルは2023年1月2日にHF papersで公開され、2023年3月14日にHugging Face Transformersに貢献されました。
ConvNeXt V2
概要
ConvNeXt V2 モデルは、Sanghyun Woo、Shoubhik Debnath、Ronghang Hu、Xinlei Chen、Zhuang Liu、In So Kweon、Saining Xie によって提案された ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders に記載されています。 ConvNeXt V2 は、Vision Transformers の設計に着想を得た純粋な畳み込みモデル(ConvNet)であり、ConvNeXT の後継モデルです。
論文の抄録は以下の通りです。
より優れたアーキテクチャと、より良い表現学習フレームワークの登場により、視覚認識分野は2020年代の初頭に急速な近代化と性能向上を遂げました。例えば、ConvNeXtに代表される最新のConvNetは、さまざまなシナリオで高い性能を示しています。これらのモデルはもともとImageNetラベルを用いた教師あり学習のために設計されましたが、マスク付きオートエンコーダ(MAE)のような自己教師あり学習手法からも恩恵を受ける可能性があります。しかし、これらの2つのアプローチを単純に組み合わせるだけでは、性能が十分に高まらないことがわかりました。本論文では、完全に畳み込み型のマスク付きオートエンコーダフレームワークと、ConvNeXtアーキテクチャに追加してチャネル間の特徴量間の競争を強化できる新しいGlobal Response Normalization(GRN)層を提案します。この自己教師あり学習手法とアーキテクチャ改善の共同設計により、ConvNeXt V2という新しいモデルファミリーが生まれました。ConvNeXt V2は、ImageNet分類、COCO検出、ADE20Kセグメンテーションを含むさまざまな認識ベンチマークにおいて、純粋なConvNetの性能を大幅に向上させます。また、ImageNetでtop-1精度76.7%を達成する効率的な3.7MパラメータのAttoモデルから、公開トレーニングデータのみを使用して最先端の88.9%の精度を達成する650MのHugeモデルまで、さまざまなサイズの事前学習済みConvNeXt V2モデルも提供しています。
ConvNeXt V2 architecture. Taken from the original paper. このモデルはadirikによって提供されました。元のコードはこちらで確認できます。
リソース
ConvNeXt V2 の入門を支援するための、Hugging Face 公式およびコミュニティ(🌎 で示す)のリソース一覧です。
- ConvNextV2ForImageClassification は、この ノートブック でサポートされています。
ここにリソースを掲載していただくことを希望される場合は、Pull Request を開いてください。レビューいたします。リソースは、既存のリソースと重複するのではなく、新しいものを示すことが望ましいです。
ConvNextV2Config
クラス transformers.ConvNextV2Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonenum_channels: int = 3patch_size: int | list[int] | tuple[int, int] = 4num_stages: int = 4hidden_sizes: list[int] | tuple[int, ...] | None = (96, 192, 384, 768)depths: list[int] | tuple[int, ...] | None = (3, 3, 9, 3)hidden_act: str = 'gelu'initializer_range: float = 0.02layer_norm_eps: float = 1e-12drop_path_rate: float | int = 0.0image_size: int | list[int] | tuple[int, int] = 224_out_features: list[str] | None = None_out_indices: list[int] | None = None )
パラメータ
- num_channels (
int、任意、デフォルトは3) — 入力チャネル数。 - patch_size (
Union[int, list[int], tuple[int, int]]、省略可、デフォルトは4) — 各パッチのサイズ(解像度)です。 - num_stages (
int、任意、デフォルト値は 4)— モデルのステージ数です。 - hidden_sizes (
Union[list[int], tuple[int, ...]]、任意、デフォルトは(96, 192, 384, 768)) — モデルの各ステージにおける次元数(hidden size)。 - depths (
Union[list[int], tuple[int, ...]]、任意、デフォルトは(3, 3, 9, 3)) — Transformer の各層の深さ。 - hidden_act (
str、任意、デフォルトはgelu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - initializer_range (
float、任意、デフォルトは0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - layer_norm_eps (
float、任意、デフォルトは1e-12) — レイヤーノーマル層で使用する epsilon です。 - drop_path_rate (
Union[float, int]、任意、デフォルトは0.0) — パッチ融合におけるドロップパスの率。 - image_size (
Union[int, list[int], tuple[int, int]]、任意、デフォルトは224) — 各画像のサイズ(解像度)。
これは ConvNextV2Model の設定を保存するための設定クラスです。指定された引数に基づいて Convnextv2 モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、facebook/convnextv2-tiny-1k-224 と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> from transformers import ConvNeXTV2Config, ConvNextV2Model
>>> # Initializing a ConvNeXTV2 convnextv2-tiny-1k-224 style configuration
>>> configuration = ConvNeXTV2Config()
>>> # Initializing a model (with random weights) from the convnextv2-tiny-1k-224 style configuration
>>> model = ConvNextV2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configConvNextV2Model
クラス transformers.ConvNextV2Model
< source >( config: ConvNextV2Config )
パラメータ
- config (ConvNextV2Config) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
特定のヘッドを付加せず、生のhidden-statesを出力する素のConvnextv2モデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPoolingAndNoAttention or tuple(torch.Tensor)
パラメータ
- pixel_values (
torch.Tensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値は ConvNextImageProcessor を使用して取得できます。詳細については ConvNextImageProcessor.call() を参照してください(processor_classは画像の処理に ConvNextImageProcessor を使用します)。
戻り値
BaseModelOutputWithPoolingAndNoAttention または tuple(torch.Tensor)
BaseModelOutputWithPoolingAndNoAttention、またはtorch.Tensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(ConvNextV2Config)と入力に応じて、さまざまな要素で構成されます。
ConvNextV2Modelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.Tensor、形状(batch_size, num_channels, height, width)) — モデルの最終層の出力における隠れ状態のシーケンス。pooler_output (
torch.Tensor、形状(batch_size, hidden_size)) — 空間次元に対するプーリング操作を行った後の最終層の隠れ状態です。hidden_states (
tuple(torch.Tensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます) —torch.Tensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, num_channels, height, width)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
ConvNextV2ForImageClassification
class transformers.ConvNextV2ForImageClassification
< source >( config: ConvNextV2Config )
パラメータ
- config (ConvNextV2Config) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
ConvNextV2 モデルは、プーリングされた特徴量の上位に線形層を備えた画像分類ヘッドを備えています。例えば、ImageNet での使用に適しています。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = None**kwargs ) → ImageClassifierOutputWithNoAttention or tuple(torch.Tensor)
パラメータ
- pixel_values (
torch.Tensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値は ConvNextImageProcessor を使用して取得できます。詳細については ConvNextImageProcessor.call() を参照してください(processor_classは画像の処理に ConvNextImageProcessor を使用します)。 - labels (
torch.LongTensor、shape(batch_size,)、任意) — 画像分類/回帰の損失を計算するためのラベル。インデックスは[0, ..., config.num_labels - 1]の範囲である必要があります。config.num_labels == 1の場合は回帰損失(平均二乗誤差)が計算され、config.num_labels > 1の場合は分類損失(クロスエントロピー)が計算されます。
戻り値
ImageClassifierOutputWithNoAttention または tuple(torch.Tensor)
torch.Tensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)または ImageClassifierOutputWithNoAttention。設定(ConvNextV2Config)と入力に応じて、さまざまな要素で構成されます。
ConvNextV2ForImageClassificationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- loss (
torch.Tensor、shape(1,)、optional、labelsが指定された場合に返されます) — 分類損失(config.num_labels==1 の場合は回帰損失)。 - logits (
torch.Tensor、形状(batch_size, config.num_labels)) — SoftMax 適用前の分類(または config.num_labels==1 の場合は回帰)スコア。 - hidden_states (
tuple(torch.Tensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます) —torch.Tensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各ステージの出力がそれぞれ 1 つずつ)で、形状は(batch_size, num_channels, height, width)です。各ステージの出力におけるモデルの隠れ状態(特徴マップとも呼ばれます)。
例:
>>> from transformers import AutoImageProcessor, ConvNextV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> model = ConvNextV2ForImageClassification.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...