スウィン・トランスフォーマー | モダンなコンピュータビジョンタスク
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を紹介しました。これらのトランスフォーマーは、画像をパッチごとに処理する従来のトランスフォーマーとは異なり、非重複のシフトウィンドウに画像を分割することで、効率的で拡張性のある計算を可能にしています。
- 『強化学習における大規模な行動空間を処理する5つの方法』
- このNYUとGoogleの論文は、クロスモーダル表現におけるシーケンス長の不一致を克服するための共同音声テキストエンコーダの仕組みを説明しています
- 「機械に学習させ、そして彼らが私たちに再学習をさせる:AIの構築の再帰的性質」
シフトウィンドウの使用は、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
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
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 『Photoshopを越えて:Inst-Inpaintが拡散モデルでオブジェクト除去を揺るがす』
- 「トランスフォーマーの単純化:あなたが理解する言葉を使った最先端の自然言語処理(NLP)— パート1 — イントロ」
- テキストからビデオ生成 ステップバイステップガイド
- 「Transformerベースの拡散モデルによる画像生成の革新的なアーキテクチャイノベーションを実現するDiffusion Transformers(DiTs)」
- LangChain + Streamlit + Llama ローカルマシンに会話型AIをもたらす
- 「転移学習の非合理的な効果」
- 「教師付き機械学習と集合論を通じた現実世界の時系列異常検出」