検査の3つの世代
| 第1世代 · ルールベース | 第2世代 · 教師あり学習 | 第3世代 · 正常学習 | |
|---|---|---|---|
| 学習データ | なし(人がルールを設計) | 不良画像数千枚 + ラベル | 正常画像数十〜数百枚、ラベル不要 |
| 初見の不良 | ルールになければ見逃す | 学習時に見ていないタイプに弱い | 「正常と異なる」として検出 |
| セットアップ期間 | 数週間(専門家による調整) | 数週間〜数か月(不良の確保) | 数日 |
製造現場では、不良率は通常低い水準です。不良画像を数千枚集めるには長く待たなければならず、集めている間にも新しいタイプの不良が発生します。異常検知はこの問題を逆転させます。**正常を十分に見せ、正常から外れたものはすべて異常とみなします。**少ないものでは正常2〜30枚から始める few-shot 方式もあります。
共通の処理の流れ
fineAi AD Workbench の11のアルゴリズムは、すべて同じ枠組みに従っています。アルゴリズムごとに異なるのは③と④だけです。
PatchCore — 正常な断片の記憶
PatchCore は精度が高く、AD Workbench が標準として推奨しているアルゴリズムです。原理は意外にシンプルです。
学習 — 正常パッチを集める
- 大規模な画像で事前学習されたニューラルネットワーク(WideResNet50-2)に正常画像を入力し、中間層(layer2、layer3)の特徴マップを取り出します。特徴マップの1マスは、元画像の小さな断片(パッチ)ひとつを数値ベクトルとして要約したものです。
- すべての正常画像のすべてのパッチベクトルをメモリバンクに集めます。
- バンクが大きすぎると検索が遅くなるため、全体の分布を代表する一部だけを選びます(coreset サンプリング)。
ニューラルネットワークの重みを新たに学習することはありません。正常画像を一度走査して集めるだけなので、学習は数秒〜数分で終わります。
検査 — 最も近い正常との距離
- 新しい画像からも、同じ方法でパッチベクトルを抽出します。
- 各パッチについて、メモリバンクから**最も近い正常パッチk個(k=3)**を探し、距離を測ります。
- 正常に似たパッチは距離が小さく、キズのあるパッチは似た正常パッチがないため距離が大きくなります。この距離がその位置の異常度です。
- パッチごとの異常度を元のサイズに拡大して滑らかにするとヒートマップになり、ヒートマップの最大値(または上位数%の平均)を0〜1に正規化したものが画像スコアです。
閾値と Gray 区間
スコアが出たら、閾値と比較して判定します。閾値を下げると不良の見逃しは減りますが、正常を不良と判定する過検出が増え、上げるとその逆になります。このバランスについては、講義モデル評価と現場運用で扱います。
fineAi は二重閾値を採用しています。
- スコアが低い方の閾値より小さければ OK
- 高い方の閾値より大きければ NG
- その間は Gray — 人が確認します。
Gray の画像に人が下した判定は、再び学習データになります。運用するほど Gray が減っていく仕組みです。
異常検知が合いにくいケース
- 正常そのもののばらつきが大きい対象 — 形がまちまちな農産物のように「正常」の範囲が広いと、欠陥との区別が難しくなります。
- 欠陥の名前と位置が必要なとき — 異常検知は「どこがおかしいか」までは示しますが、「これはキズである」と分類まではしません。この場合は物体検出を併用します。
11のアルゴリズムのうちどれを選ぶかは、次の講義異常検知アルゴリズムの選び方で扱います。