- 工場や街中カメラは低解像度が主流
- ViT は 14×14 パッチを前提に学習
- パッチを 8×8 など小さくすると小さな欠陥も見えやすい
パッチサイズとは?
- 画像を タイル状に切り分ける 1 片の大きさ(例: 14×14 px)
- パッチサイズ ↓ ⇒ パッチ枚数 ↑ ⇒ 細部まで観察できる
- バッチサイズ(GPU に投げる画像枚数)とは別パラメータ
- 例: 224×224 px 画像を 14 px で切ると 16×16=256 枚、8 px で切ると 28×28=784 枚
コード例(PyTorch)
from torchvision.models import vit_b_16
model = vit_b_16(patch_size=8) # デフォルト14→8
なぜ効く?
ジグソーパズルを細かく砕くほど欠けたピースは目立つ
自己注意が細かなパッチ間の差異を総当たりで比較し、微小な傷や汚れをハイライトしてくれます。
ワン・クラス異常検知の流れ
- 正常画像のみを使って ViT を事前学習し、特徴ベクトルを取得
- マハラノビス距離で外れ値を判定
- 多次元版の z スコア。平均との差だけでなく特徴間の相関も考慮
- 正常データを包む“楕円体”からの距離を測るイメージ
- たとえ話: 身長と体重の健康診断。150 cm 80 kg は異常、190 cm 80 kg は正常──2 変数の相関込みで離れ具合を評価
- 距離が 0 に近いほど平均的、大きいほど“珍しい”サンプル
- 距離が閾値を超えたサンプルを 異常 としてフラグ
音も扱うなら
torchaudio.transforms.MelSpectrogram
で音を画像化- 画像と同じ ViT に入力 → 視覚 + 聴覚を同時解析
実践 Tips
torch.cuda.amp
+torch.compile
でメモリ節約 & 高速化- パッチを小さくすると計算量↑。GPU メモリと相談しながらバッチサイズを調整