マスク付きオートエンコーダー(MAE)が自己教師なし学習にどのような革新をもたらすかを探ります。MAEによる再構成が、Ultralytics 性能と効率をどのように向上させるかについて学びましょう。
マスク付きオートエンコーダー(MAE)は、 コンピュータビジョンという広範な分野における 自己教師付き学習に対する、非常に効率的でスケーラブルなアプローチである。 MAEは、 大規模なラベル付きデータセットを必要とせずに、パラメータ数の多いニューラルネットワークを学習させる手法として提案されたもので、 入力画像のランダムな大部分を意図的に隠蔽し、欠落したピクセルを再構築するようにモデルを学習させることで機能する。 隠された視覚情報を正確に予測することで、ネットワークは形状、テクスチャ、空間的関係に関する深い 意味論的理解を本質的に学習する。
この手法は、テキストベースのシステムにおけるマスク付き言語モデリングの成功に大きく着想を得ていますが、 画像データの高次元性に合わせて適応されています。このアーキテクチャは、広く普及している トランスフォーマー・フレームワークを採用し、非対称な エンコーダー・デコーダー構造を活用しています。
MAEの最大の革新点は、その処理効率にあります。学習中、入力画像は パッチのグリッドに分割されます。 これらのパッチの大部分(多くの場合75%に達する)は、ランダムにマスクされ、破棄されます。 エンコーダー(通常は Vision Transformer(ViT))は、 可視でマスクされていないパッチのみを処理します。エンコーダーはマスクされた部分を完全にスキップするため、必要な 演算リソースとメモリが大幅に削減され、トレーニングプロセスが著しく高速化されます。
エンコーダーが可視パッチの潜在表現を生成した後、軽量なデコーダーが処理を引き継ぎます。 デコーダーは、エンコードされた可視パッチと「マスクトークン」(欠落データのプレースホルダー)を受け取り、 元の画像を再構築しようと試みます。デコーダーはこの事前学習フェーズでのみ使用されるため、 非常に小型に抑えることができ、計算負荷をさらに低減できます。 前学習が完了すると、デコーダーは破棄され、 高性能なエンコーダーが後続のアプリケーション用に保持されます。
MAEを十分に理解するためには、それらが従来の、あるいはより広範な ディープラーニングの概念とどのように異なるかを把握しておくと役立ちます:
MAEは視覚データの極めて堅牢な表現を学習するため、複雑で 実世界向けのAIシステムを構築する上で理想的な出発点となります。
MAEアプローチを用いてバックボーンモデルの事前学習が完了したら、次のステップとして、画像分類や 画像セグメンテーションといった特定のタスク向けに、モデルの微調整とデプロイを行います。 最新のクラウドエコシステムにより、 この移行はシームレスに行えます。例えば、チームは Ultralytics 、タスク固有のデータセットへのアノテーションを容易に行い、 クラウドでのトレーニングを調整し、その結果として得られた本番環境対応モデルをエッジデバイスやサーバーにデプロイできます。これにより、 機械学習運用(MLOps)に通常伴う定型的なインフラ作業の多くが 不要になります。
完全なMAEを学習させるには完全なトランスフォーマーアーキテクチャが必要ですが、パッチマスキングという中核となる概念は、 PyTorch tensor を使って簡単に可視化できます。この シンプルなスニペットは、入力tensorから可視パッチをランダムに選択する方法を示しています。
import torch
def create_random_mask(batch_size, num_patches, mask_ratio=0.75):
"""Generates a random mask to simulate MAE patch dropping."""
# Calculate how many patches to keep visible
num_keep = int(num_patches * (1 - mask_ratio))
# Generate random noise to determine patch shuffling
noise = torch.rand(batch_size, num_patches)
# Sort noise to get random indices
ids_shuffle = torch.argsort(noise, dim=1)
# Select the indices of the patches that remain visible
ids_keep = ids_shuffle[:, :num_keep]
return ids_keep
# Simulate a batch of 4 images, each divided into 196 patches
visible_patches = create_random_mask(batch_size=4, num_patches=196)
print(f"Visible patch indices shape: {visible_patches.shape}")
アーキテクチャを一から構築することなく、強力で事前学習済みの視覚機能をワークフローに組み込みたいと考えている開発者にとって、 Ultralytics 参照することは、 最先端のビジョンモデルを独自の課題に応用するための 優れた出発点となります。さらに、次のような主要なフレームワーク TensorFlow も、最先端の 機械学習研究をスケーラブルな本番 環境に実装するための堅牢なエコシステムを提供しています。