先日、革新的な画像の異常検知(SAA)が出てきました。
何やら革命的な臭いがする...
— shinmura0 (@shinmura0) May 22, 2023
SAMを使った異常検知手法https://t.co/wmwFcbULdq
コードはこちらhttps://t.co/3npK3FhnEz pic.twitter.com/JDs30bEJyQ
本稿では、操作手順 & 触ってみた感想をご報告します。
特長
本題に入る前に、どこら辺が革新的なのかざっくり説明します。
※ SAAの詳細は論文をご参照ください。
- 学習データは不要
- 通常、学習(正常)データを数百枚用意しますが、この手法では正常データを必要としません。
- ドメイン知識を導入できる
- 予め、異常の傾向をプロンプトに入れることにより、異常の特徴をモデルに教えることができます。
二点目が特に大きく、今までの異常検知では、積極的に異常の傾向を取り込むことができませんでしたが、この手法では、この点を改良しています。
操作手順
使ってみる
まず、公式リポジトリに行って、Open in Colab
をクリックします。
ちなみに、プロンプトは
defects
でした。このプロンプトだけで、異常を検出できるのは凄い!
難しい画像に変える
これらのwood_demo.png
をcable_demo.png
に変えます。
チューニングする
ここからチューニングしていきます。まず、プロンプト
defects
をthe black hole on the cable
に変えます。
だいぶ改善しましたが、まだ過検知(False positive)があります。
続いて、bounding_boxの閾値box_threshold
でフィルターをかけます。
0.15
を0.28
に変えます。すると
ほぼ完璧なセグメンテーションができました。
使ってみた感想
- とりあえず重い
- 巨大モデル&大きい画素数を使っているので、推論に時間がかかる → 軽いモデル&画素数を下げれば改善するかも?
- それでも、推論時間がネックで、SAA単独では使えないかもしれない。 → PaDiMを一次フィルター、SAAを二次フィルターにすれば、精度&推論時間をカバーし合えるかも
- 巨大モデル&大きい画素数を使っているので、推論に時間がかかる → 軽いモデル&画素数を下げれば改善するかも?
- チューニングできる
- 異常の大きさやプロンプトを調整できるので、色々カスタムできそう。逆にいうと、チューニングが大変かも。ただ、異常の特徴を予め入力できるので、従来手法では検出できなかった異常を検出できる可能性がある
- SAAがゲームチェンジャーになるかも
- SPADEやGussian-AD(マハラノビスAD法)が、画像の異常検知界隈を一変させたように、SAAが一つの時代を作る可能性がある。つまり、SAAは今後のスタンダードになる可能性がある。
- まだまだ整備中(2023年5月24日現在)
- issueによると、本気のSAA+は実装していないらしいので、真の実力は出ていない模様
- SAA+は近日中に公開予定