0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0253(2025/10/08)ラベルなし画像から強い表現を学ぶ:自己教師あり学習

Posted at

ラベルなし画像から強い表現を学ぶ:DINOを軸に自己教師あり学習を実務目線で整理

DINOとは、同一画像の異なるビューを教師ネットワークと生徒ネットワークで整合させ、ラベルなしで汎用的な特徴表現を学習する手法である。

いま自己教師あり学習(SSL)が効く理由

  • 画像認識の多くの現場では、アノテーションのコストがモデル運用のボトルネックになりがち。
  • SSLはラベルを使わずに表現(embedding)を学ぶため、データを「集める→すぐ活かす」が可能。
  • DINO系はViT(Visual Transformer)と相性がよく、微調整せずともk-NNや線形分類で強いベースラインを出せる。
  • 異常検知でも、パッチ特徴の距離ベース手法と自然に接続でき、従来の手作り特徴より頑健になりやすい。

DINOのコアアイデア(ざっくり)

  • 自己蒸留(Self-Distillation): 同一画像から生成した複数ビュー(強・弱オーグメント、マルチクロップ)に対し、教師(teacher) の出力分布に 生徒(student) が一致するよう学習。教師は生徒の指数移動平均(EMA)で更新し、崩壊を抑制。
  • 出力空間: クラスタ原型(prototypes)に対する確率分布(ソフトマックス)。特徴を直接揃えるのではなく、分布として整合。
  • 安定化の工夫: センタリングとシャープニングで、表現の崩壊(全サンプルが同一点に潰れる)を回避。
  • バックボーン: ViTを用いることでグローバルな関係を捉えやすく、パッチレベルの表現も自然に得られる。
  • 学習後の使い方: 凍結したエンコーダから埋め込みを抽出し、k-NN、線形分類、クラスタリング、距離ベースの異常スコアなどに活用。

従来手法との違い(画像ベース)

同じ階層の比較は表でまとめます。

観点 エンコード/CNN(教師あり分類の中間層を流用) PaDiM PatchCore DINO(SSL)
主目的 クラス分類のための特徴 正常分布のモデリング メモリバンクの近傍探索 ラベルなしで汎用表現
監督信号 有り(ラベル必須) なし(正常のみ) なし(正常中心) なし(自己蒸留)
特徴の粒度 画像/チャネル中心 パッチごとのガウス分布 コアセット化したパッチ 画像・パッチ両方強い
データ要件 十分なラベル 正常画像多数 正常画像多数+メモリ制御 未ラベル多数(雑多でOK)
推論コスト 低〜中 中(分布参照) 中(近傍探索) 低〜中(埋め込み→軽量分類/距離)
異常検知 流用可だが目的外 強い(設定依存) 強い(実務実績多) 強い(特徴の一般性)
ドメイン移行 再学習必要 再学習必要 再学習必要 特徴流用が効きやすい
スケール/継続学習 ラベル準備が律速 データ拡張で対応 メモリ設計がボトルネック 追加未ラベルで継続学習しやすい

要点: DINOはラベル不要で強い表現を作り、従来の距離ベース異常検知(例: PatchCore)の下地としても使える。CNNの中間特徴流用よりも、ドメインが変わっても性能が落ちにくい傾向。

DINOと拡散モデルの違い

観点 DINO(SSL) 拡散モデル(DDPM/Scoreなど)
学習目標 ビュー一致(自己蒸留)で表現学習 ノイズ付与と復元でデータ分布を生成的に学習
主要アウトプット 汎用埋め込み・プロトタイプ分布 サンプル生成器(生成確率流)
適性タスク 事前特徴抽出、下流分類・検出、異常検知 生成、編集、インペインティング、合成データ
異常検知 埋め込み距離や密度推定が王道 生成困難性を用いるがコスト高・設計難
推論コスト 低(一回前向き) 高(多数ステップ)
微調整のしやすさ 軽量(線形層やk-NNでOK) 目的次第で重め(LoRA等活用)

要点: 拡散は「作る」能力が強み、DINOは「分かる」能力が強み。認識系・検査系での素早い高精度化ならDINOの方が扱いやすい場面が多い。

実務導入パターン(最短で強いベースライン)

  1. 特徴固定+k-NN/線形
  • 事前学習済みDINO-ViTを読み込み → 埋め込み抽出 → 学習データの特徴をインデックス化 → 推論時はk-NNや線形分類。
  • ラベル少数なら線形層のみ学習でOK。多数クラスでもデータ拡張で対応しやすい。
  1. Few-shot微調整
  • 小さなヘッドを付けて数エポック微調整。過学習しやすいので凍結層を多めに、早期停止推奨。
  1. 異常検知(距離ベース)
  • 正常データの埋め込みをメモリバンク化(必要ならコアセット縮約)。
  • 入力をパッチ分割→各パッチ埋め込み→最も近い正常パッチまでの距離でスコア化→ヒートマップ合成。
  • 推論を速くしたい場合は、特徴次元圧縮(PCA/ランダム射影)や近似最近傍(FAISS)を併用。

学習と推論のベストプラクティス

  • 入力解像度: ViTは解像度依存。検査系は細部が効くので、学習・推論で同等のスケール感を維持。

  • オーグメント: カラー抑えめ、幾何変換は強めが無難(過度な色変換は検査系で逆効果)。

  • 正規化: 埋め込みはL2正規化して距離・類似度を安定化。

  • バッチと温度: 温度(softmax温度)やプロトタイプ数は表現の粒度に効く。小規模データではプロトタイプ少なめから。

  • メモリ設計: 異常検知のメモリはクラスター代表だけ保持(コアセット)。速度と精度のトレードオフを明示的に管理。

  • 評価:

    • 分類: 線形プローブとk-NNの両方を確認。ドメインシフト時はk-NNが安定しがち。
    • 異常検知: 画像レベルAUROCとピクセルレベルAUPROを両方見る。スコア分布のキャリブレーションも忘れずに。

よくある落とし穴

  • 崩壊: 学習初期の不安定化で特徴が単一モードに潰れる。センタリング・温度・EMA率の見直しで回避。
  • 過強オーグメント: タスク本質を壊してしまい、下流性能が伸びない。ユースケースに合わせ調整。
  • メモリ過多: PatchCore系の最近傍探索がボトルネックに。コアセットや近似NN、解像度制御で現実解を。
  • 評価の取り違え: 検査系で分類精度だけ見て満足しがち。局所異常の再現性(AUPRO)を必ず見る。

どれを選ぶ?ユースケース指針

  • ラベルが乏しい分類・検査: DINO特徴+線形 or k-NNからスタート。
  • ピクセル単位の欠陥検出: DINO特徴+距離ベースのヒートマップ。既存PaDiM/PatchCoreを置換・強化しやすい。
  • 生成や編集が主題: 拡散モデル。認識はDINO特徴と併用すると良い。
  • 長期運用: 未ラベル追加で表現を更新しやすいDINO系が保守コスト低。

まとめ(実務Tipsの再掲)

  • ラベルなし大量データがあるなら、まずDINO埋め込みを作り、k-NNと線形の二刀流で指標(精度・AUROC・AUPRO)をチェック。
  • 検査・異常検知は、パッチ埋め込みの近傍距離とコアセットで速度と精度を両立。
  • 拡散は生成、DINOは表現。目的から逆算して組み合わせるのが吉。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?