スウィン・トランスフォーマー | モダンなコンピュータビジョンタスク

Swin Transformer | Modern Computer Vision Tasks

イントロダクション

Swin Transformerは、ビジョントランスフォーマーの分野における重要なイノベーションです。トランスフォーマーは、様々なタスクで優れたパフォーマンスを発揮してきました。その中でも、Swin Transformerはコンピュータビジョンのバックボーンとして優れた柔軟性と拡張性を提供し、現代のディープラーニングモデルの要求に応える能力を持っています。このトランスフォーマーのフルポテンシャルを引き出し、その印象的な能力を目の当たりにしましょう。

学習目標

この記事では、強力な階層的なビジョントランスフォーマーであるSwin Transformerを紹介します。この記事を読み終えることで、以下のことが理解できるようになるでしょう:

  • Swin Transformerの主な特徴
  • コンピュータビジョンモデルのバックボーンとしての応用
  • 画像分類、物体検出、インスタンスセグメンテーションなどの様々なコンピュータビジョンタスクにおけるSwin Transformerの利点

この記事は、データサイエンスブログマラソンの一環として公開されました。

Swin Transformerの理解

2021年の論文「Swin Transformer: Hierarchical Vision Transformer using Shifted Windows」で、Ze Liu、Yutong Lin、Yue Cao、Han Hu、Yixuan WeiはSwin Transformerを紹介しました。これらのトランスフォーマーは、画像をパッチごとに処理する従来のトランスフォーマーとは異なり、非重複のシフトウィンドウに画像を分割することで、効率的で拡張性のある計算を可能にしています。

Source: Liu et al. (2021)

シフトウィンドウの使用は、Swin Transformerにとって重要です。階層的な設計により、高解像度の画像を処理する際にバニラトランスフォーマー(エンコーダーとデコーダー)に見られる二次の計算量の問題を効果的に解決します。この設計特性により、Swin Transformerは異なる画像サイズに簡単に適応できるため、小規模なデータセットから大規模なデータセットまで幅広い用途に適しています。

Swin TransformerとViTの違い

まず注意すべきは、Swin Transformerが画像をパッチごとに処理するアプローチであることです。さらに、Swin TransformerはオリジナルのVision Transformer(ViT)のバリエーションです。Swin Transformerは画像をパッチに階層的に分割し、ネットワークが深くなるにつれてそれらを結合します。これにより、ローカルとグローバルな特徴を効果的に捉えることができます。

プロセスの詳細な分解

  • パッチの生成: ViTとは異なり、Swin Transformerは初期のレイヤーではより小さなパッチから始まります(例えば、16×16ピクセルのパッチ)。
  • カラーチャンネル: 各パッチは画像の一部を表し、各パッチは独自の3つのチャンネル(赤、緑、青チャンネルとして一般的に表される)を持つカラー画像として扱われます。
  • パッチの特徴次元: 上記の例では、16×16の場合、単一のパッチは合計768の特徴次元(16x16x3 = 768)を持ちます。これらの次元は、3つのカラーチャンネルごとの16×16パッチのピクセル値に対応しています。
  • 線形変換: これらのパッチを形成した後、それらはより高次元の空間に線形変換されます。この変換により、ネットワークはパッチ内のピクセル値から意味のある表現を学習するのに役立ちます。
  • 階層的な分割: ネットワークが深くなるにつれて、これらの小さなパッチは大きなパッチに統合されます。この階層的な分割により、モデルはローカルの詳細(小さなパッチから)とグローバルなコンテキスト(統合されたパッチから)の両方を効果的に捉えることができます。

ネットワークの深さが増すにつれてパッチを段階的に統合するSwin Transformerのアプローチは、画像を効果的に理解するためにはローカルとグローバルな情報のバランスを保つのに役立ちます。Swin Transformerは、画像タスクのための計算量の削減に役立つウィンドウベースのセルフアテンションとウィンドウのシフトなど、複数の追加の概念と最適化も導入しており、そのすべてが改善されたパフォーマンスに寄与しています。

Swin Transformerの特徴

  • 入力パディング: Swin Transformerは、32で割り切れる任意の入力の高さと幅をサポートする利点があります。これにより、モデルは異なる次元の画像を処理し、前処理ステップ中により柔軟性を提供します。
  • 出力の隠れ状態: Swin Transformerは、`output_hidden_states`パラメータをTrueに設定してトレーニングまたは推論中に`hidden_states`および`reshaped_hidden_states`にアクセスすることができます。`hidden_states`の出力は、トランスフォーマーに典型的な形状(バッチサイズ、シーケンス長、チャンネル数)を持ちます。一方、`reshaped_hidden_states`の出力は、(バッチサイズ、チャンネル数、高さ、幅)の形状を持ち、これはダウンストリームのコンピュータビジョンタスクにより適しています。
  • AutoImageProcessor APIの使用: Swin Transformerモデルのために画像を準備するために、開発者や研究者はAutoImageProcessor APIを活用することができます。このAPIは、リサイズ、データ拡張、正規化などのタスクを処理することで、入力データをSwin Transformerモデルで消費できる状態にすることを簡素化します。
  • ビジョンバックボーン: Swin Transformerアーキテクチャは多目的であり、コンピュータビジョンの強力なバックボーンとして機能します。バックボーンとして、Swin Transformerは物体検出、インスタンスセグメンテーション、画像分類などのタスクで優れたパフォーマンスを発揮します。以下で詳しく見ていきましょう。この適応性により、最先端のビジョンモデルの設計において優れた選択肢となります。

Swin Transformersの応用

1. 画像分類のためのSwin

画像分類は、画像のクラスを識別することを目的としています。Swin Transformersは、画像分類のタスクで印象的なパフォーマンスを発揮しています。長距離依存関係を効果的にモデリングする能力を活用することで、画像内の複雑なパターンや空間的な関係をキャプチャすることができます。これは、画像分類ヘッドを持つSwinモデルトランスフォーマーと見なすことができます。

Swin分類デモ

Swinを使用した画像分類のユースケースを見てみましょう。まずはじめに、ライブラリをインストールし、画像を読み込みます。

!pip install transformers torch datasets

Github上でコード全体を見つけることができます。

画像の読み込み

# 必要なライブラリをインポートする
from transformers import AutoImageProcessor, SwinForImageClassification
import torch

# ウェブから画像を取得する
import urllib.parse as parse
import os
from PIL import Image
import requests

# URLの検証
def check_url(string):
    try:
        result = parse.urlparse(string)
        return all([result.scheme, result.netloc, result.path])
    except:
        return False

# 画像を読み込む
def load_image(image_path):
    if check_url(image_path):
        return Image.open(requests.get(image_path, stream=True).raw)
    elif os.path.exists(image_path):
        return Image.open(image_path)

# 画像の表示
url = "https://img.freepik.com/free-photo/male-female-lions-laying-sand-resting_181624-2237.jpg?w=740&t=st=1690535667~exp=1690536267~hmac=0f5fb82df83f987848335b8bc5c36a1ee534f40301d2b7c095a2e5a62ff153fd"
image = load_image(url)

image
Source: Freepik

AutoImageProcessorとSwinの読み込み

# 事前学習済みの画像プロセッサ(AutoImageProcessor)を読み込む
# "microsoft/swin-tiny-patch4-window7-224"は画像処理に使用されるモデルチェックポイントです
image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

# 画像分類のための事前学習済みSwin Transformerモデルを読み込む
model = SwinForImageClassification.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

# 画像プロセッサを使用してモデルの入力を準備する
# 画像は前処理され、PyTorchのテンソルに変換されます
inputs = image_processor(image, return_tensors="pt")

推論を実行し、ラベルを予測する

# Swin Transformerモデルを使用して推論を実行する
# ロジットは、softmaxを適用する前のモデルからの生の出力です
with torch.no_grad():
    logits = model(**inputs).logits

# 最も高いロジット値を持つクラスを選択して、画像のラベルを予測する
predicted_label = logits.argmax(-1).item()

# モデルのid2labelマッピングを使用して予測されたラベルを取得して表示する
print(model.config.id2label[predicted_label])

予測クラス

ライオン、王者、パンテラ・レオ

2. マスクされた画像モデリング(MIM)

このプロセスは、入力画像をランダムにマスクし、それをプレテキストタスクを通じて再構築することを含みます。これは、マスクされた画像モデリングのためのSwinモデルとその上にあるデコーダーのアプリケーションです。MIMは、事前学習済みの方法を用いた自己教師あり学習のための新興のビジョン手法であり、ビジョントランスフォーマ(ViTs)を用いた多くのダウンストリームのビジョンタスクで成功しています。

マスクされた画像モデリングデモ

上記のコードのインポートを再利用します。Github上でコード全体を見つけることができます。新しい画像を読み込みましょう。

# 指定されたURLから画像を読み込む
url = "https://img.freepik.com/free-photo/outdoor-shot-active-dark-skinned-man-running-morning-has-regular-trainings-dressed-tracksuit-comfortable-sneakers-concentrated-into-distance-sees-finish-far-away_273609-29401.jpg?w=740&t=st=1690539217~exp=1690539817~hmac=ec8516968123988e70613a3fe17bca8c558b0e588f89deebec0fc9df99120fd4"
image = Image.open(requests.get(url, stream=True).raw)
image
出典:Freepik

AutoImageProcessorとマスクされた画像モデルの読み込み

# 事前学習済みの画像プロセッサ(AutoImageProcessor)を読み込む
# 画像処理に使用するモデルチェックポイントは "microsoft/swin-base-simmim-window6-192" です
image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-base-simmim-window6-192")

# マスクされた画像モデリングのための事前学習済みのSwin Transformerモデルを読み込む
model = SwinForMaskedImageModeling.from_pretrained("microsoft/swin-base-simmim-window6-192")

# 画像とパッチサイズに基づいてパッチの数を計算する
num_patches = (model.config.image_size // model.config.patch_size) ** 2

# 画像をピクセル値に変換し、モデルへの入力を準備する
pixel_values = image_processor(images=image, return_tensors="pt").pixel_values

# 形状(バッチサイズ、パッチの数)のランダムなブールマスクを作成する
bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

# Swin Transformerモデルでマスクされた画像モデリングを実行する
outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)

# 損失と再構成されたピクセル値をモデルの出力から取得する
loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction

# 再構成されたピクセル値の形状を表示する
print(list(reconstructed_pixel_values.shape))

上記は再構成されたピクセル値です。最後に、他のいくつかの応用について紹介しましょう。

他の応用例としては、物体検出とインスタンスセグメンテーションがあります。物体検出の応用では、画像の特定の部分を識別するのに役立ちます。一方、インスタンスセグメンテーションでは、Swin Transformerは画像内の個々のオブジェクトを検出してセグメント化します。

結論

Swin Transformersは、コンピュータビジョンの分野で画期的な進歩として登場し、さまざまな視覚認識タスクに対する柔軟でスケーラブルかつ効率的な解決策を提供しています。階層的な設計とさまざまなサイズの画像の処理に対応する能力により、Swin Transformersは深層学習とコンピュータビジョンの応用分野で新たな突破口を開拓し続けています。ビジョントランスフォーマーの分野が進展するにつれて、Swin Transformersが先駆的な研究と実用的な実装の最前線に留まることが予想されます。本記事がこの概念を紹介するのに役立ったことを願っています。

キーポイント

  • Swin Transformersは、コンピュータビジョンタスクのための階層的なビジョントランスフォーマーであり、高解像度の画像の処理においてスケーラビリティと効率性を提供します。
  • Swin Transformersは、画像分類、物体検出、インスタンスセグメンテーションなどのタスクにおいて、さまざまなコンピュータビジョンアーキテクチャのバックボーンとして機能することができます。
  • AutoImageProcessor APIは、Swin Transformersのための画像の準備を簡素化し、リサイズ、オーギュメンテーション、正規化を処理します。
  • Swin Transformersは長距離依存関係を捉える能力があり、複雑な視覚パターンのモデリングに有望な選択肢です。

よくある質問

  • Liu, Z., Lin, Y., Cao, Y., Hu, H., Wei, Y., Zhang, Z., Lin, S., & Guo, B. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ArXiv. /abs/2103.14030
  • Xie, Z., Zhang, Z., Cao, Y., Lin, Y., Bao, J., Yao, Z., Dai, Q., & Hu, H. (2021). SimMIM: A Simple Framework for Masked Image Modeling. ArXiv. /abs/2111.09886

この記事で使用されているメディアはAnalytics Vidhyaの所有ではありません。著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

Mozilla Common Voiceでの音声言語認識-第II部:モデル

これはMozilla Common Voiceデータセットに基づく音声認識に関する2番目の記事です最初の部分ではデータの選択と最適な埋め込...

データサイエンス

デコード Transformersを平易な英語で説明します

コード、数学、またはキー、クエリ、値の言及なし

人工知能

「Lab Sessions 実験的なAIの新しいコラボレーションのシリーズ」

Lab Sessionsは、アーティストから学者、科学者から学生まで、さまざまな人々との実験的なAIコラボレーションのシリーズです

AIニュース

元アップル社員が生成型AIをデスクトップにもたらす方法

常に進化するテックのランドスケープの中で、元Appleの従業員であるコンラッド・クレイマー、キム・ベベレット、アリ・ウェイ...

データサイエンス

機械学習を直感的に理解する

確かに、ChatGPTのようなモデルの実際の理論は認めるには非常に難しいですが、機械学習(ML)の根底にある直感は、まあ、直感...