Transformers documentation
バックボーン
バックボーン
オブジェクト検出や画像セグメンテーションなどの上位レベルのコンピュータビジョンタスクでは、予測を生成するために複数のモデルを連携して使用します。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と、モデル固有のバックボーンクラスです。
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,))モデルがバックボーンをサポートしていることがわかれば、バックボーンとネックをモデルの構成に直接読み込むことができます。構成をモデルに渡すことで、タスク用に初期化します。
以下の例では、MaskFormerのインスタンスセグメンテーションヘッドで使用するために、ResNetのバックボーンとネックを読み込みます。
configからの初期化では、ランダムな重み付きのモデルが作成されることに注意してください。事前学習済みモデルを読み込む場合は、from_pretrained APIを使用してください。
from transformers import AutoConfig, MaskFormerConfig, MaskFormerForInstanceSegmentation
backbone_config = AutoConfig.from_pretrained("microsoft/resnet-50")
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)別のオプションとして、バックボーンの構成を個別に読み込み、モデルの構成のbackbone_configに渡す方法があります。
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, ResNetConfig
# instantiate backbone configuration
backbone_config = ResNetConfig()
# load backbone in model
config = MaskFormerConfig(backbone_config=backbone_config)
# attach backbone to model head
model = MaskFormerForInstanceSegmentation(config)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]