Transformers documentation

バックボーン

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

バックボーン

オブジェクト検出や画像セグメンテーションなどの上位レベルのコンピュータビジョンタスクでは、予測を生成するために複数のモデルを連携して使用します。backbone、neck、headにはそれぞれ別のモデルが使用されます。backboneは入力画像から有用な特徴を抽出して特徴マップを生成し、neckは特徴マップを結合・処理し、headはそれらを用いて予測を行います。

from_pretrained() でバックボーンを読み込み、out_indices パラメータを指定して、インデックスで示されるどの層から特徴マップを抽出するかを決定します。

from transformers import AutoBackbone

model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))

このガイドでは、backboneクラス、timmライブラリからのbackbone、それらを用いた特徴量の抽出方法について説明します。

Backboneクラス

バックボーンクラスは2つあります。

  • ~transformers.utils.BackboneMixin は、バックボーンを読み込むことを可能にし、設定から特徴マップとインデックスを抽出する関数を含みます。
  • ~transformers.utils.BackboneConfigMixin は、バックボーン設定のフィーチャマップとインデックスを設定、整列、検証することを可能にします。

どのモデルがバックボーンをサポートしているかを確認するには、BackboneのAPIドキュメントを参照してください。

Transformersのバックボーンを読み込む方法には2つあります。AutoBackboneと、モデル固有のバックボーンクラスです。

AutoBackbone
モデル固有のバックボーン

AutoClass API は、サポートされている場合、事前学習済みビジョンモデルをバックボーンとして from_pretrained() で自動的に読み込みます。

out_indicesパラメータを、特徴マップを取得したいレイヤーに設定します。レイヤー名がわかっている場合は、out_featuresを使用することもできます。これらのパラメータは相互に置き換え可能ですが、両方を使用する場合は、同じレイヤーを指していることを確認してください。

out_indicesまたはout_featuresが使用されない場合、バックボーンは最終層の特徴マップを返します。以下の例では、out_indices=(1,)を使用して最初の層の特徴マップを取得しています。

from transformers import AutoImageProcessor, AutoBackbone

model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))

timm バックボーン

timmは、学習と推論のためのビジョンモデルのコレクションです。Transformersは、TimmBackboneクラスとTimmBackboneConfigクラスを通じて、timmモデルをバックボーンとしてサポートしています。backboneに必要となるバックボーンチェックポイントを指定することで、重みがランダムに初期化されたTimmバックボーンを持つモデルを作成できます。

from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, TimmBackboneConfig

backbone_config = TimmBackboneConfig(backbone="resnet50", out_indices=[-1])
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)

TimmBackboneConfig クラスを明示的に呼び出すことで、事前学習済みの timm バックボーンを読み込んで作成することもできます。

from transformers import TimmBackboneConfig

backbone_config = TimmBackboneConfig("resnet50")

バックボーンの構成をモデルの構成に渡し、バックボーンを用いてモデルヘッドのMaskFormerForInstanceSegmentationをインスタンス化します。

from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation

config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)

特徴量抽出

backboneは、画像特徴の抽出に使用されます。画像をbackboneに通すことで、特徴マップを取得できます。

画像を読み込み、前処理を行い、バックボーンに渡します。以下の例では、最初のレイヤーから特徴マップを抽出しています。

from transformers import AutoImageProcessor, AutoBackbone
import torch
from PIL import Image
import requests

model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))
processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

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

inputs = processor(image, return_tensors="pt")
outputs = model(**inputs)

特徴量は、出力のfeature_maps属性に保存され、そこからアクセスされます。

feature_maps = outputs.feature_maps
list(feature_maps[0].shape)
[1, 96, 56, 56]
Update on GitHub