疑似欠陥を「正常のすぐ外側」に作る
工場の外観検査AIは、欠陥品の画像が集めにくいため、正常品だけで学習することが多い。そこで正常画像から「それらしい欠陥」を人工的に作り、正常と見分ける練習をさせる。ECCV 2024 の GLASS は、この疑似欠陥の作り方を工夫し、薄い・小さい欠陥の検出を改善したと報告している。
従来の疑似欠陥は「簡単すぎる問題」になりやすい
疑似欠陥の作り方は主に2通りある。画像に別の模様を貼る画像レベルの方法は、見た目は細かいが種類が偏る。特徴量(画像をネットワークで変換した数値の並び)にノイズを足す方法は速い。ただし向きを制御できず、正常と重なる点や遠すぎて練習にならない点が混ざる。
試験勉強で言えば、明らかな誤答ばかり解いても本番の紛らわしい問題は解けない。小さな傷や薄いしみは、特徴量の上では正常のすぐ近くにある。正常と異常を分ける境界を正常の近くまで寄せないと見逃される。

図1 3方式の疑似欠陥(灰: 画像レベル、ピンク: ガウスノイズ、青: GLASS)。左は革画像の例、中央は模式図。右は特徴量の2次元分布で、正常(緑)と実欠陥(赤)も描く。
出典: Qiyu Chen et al., "A Unified Anomaly Synthesis Strategy with Gradient Ascent for Industrial Anomaly Detection and Localization", ECCV 2024 — Fig. 1。https://arxiv.org/abs/2407.09359(arXiv non-exclusive license。引用として無改変で掲載)。図中の物体画像は MVTec AD 由来と推定。
論文によれば、図1右でGLASSの疑似欠陥(青)は境界付近に集まる。
GLASSが変えたこと:2系統の疑似欠陥
GLASS は2系統の疑似欠陥を同時に使う。GAS(特徴量レベル)は正常に近い弱い異常を、LAS(画像レベル)は正常から遠い強い局所異常を担う。判別器は特徴量の各点の異常度を0〜1で答える小さなネットワークで、正常は0、疑似欠陥は1と教わる。図2のように、2系統は別経路で判別器へ渡る。
flowchart TB
X["正常画像"] --> F["特徴抽出器<br/>+小さな適応層"]
F --> U["正常特徴"]
subgraph GAS["GAS:特徴量レベル"]
direction TB
G1["ノイズを足す"] --> G2["勾配上昇で動かす"] --> G3["切断投影"]
end
subgraph LAS["LAS:画像レベル"]
direction TB
L1["まだら形のマスクで<br/>模様を半透明に貼る"] --> L2["同じ特徴抽出器"]
end
U --> G1
X --> L1
U -->|"正常"| D["判別器<br/>点ごとの異常度"]
G3 -->|"異常"| D
L2 -->|"貼った所が異常"| D
classDef normal fill:#E8F5E9,stroke:#2E7D32,stroke-width:1px,color:#1B1B1B
classDef synth fill:#FFF3E0,stroke:#E65100,stroke-width:1px,color:#1B1B1B
classDef core fill:#FFCC80,stroke:#BF360C,stroke-width:3px,color:#1B1B1B
classDef judge fill:#E3F2FD,stroke:#1565C0,stroke-width:2px,color:#1B1B1B
classDef out fill:#EDE7F6,stroke:#4527A0,stroke-width:1px,color:#1B1B1B
classDef neutral fill:#F5F5F5,stroke:#757575,stroke-width:1px,color:#1B1B1B
class X,U normal
class F,L2 neutral
class G1,L1 synth
class G2,G3 core
class D judge
style GAS fill:#FFF8E1,stroke:#E65100,stroke-width:1px
style LAS fill:#FFFDE7,stroke:#F9A825,stroke-width:1px
図2 学習時の構成。
LASはまだら形のマスクで外部のテクスチャ画像を切り抜き、透明度を変えて重ねるので薄い欠陥も作れる。
なぜ効くか:勾配上昇と切断投影
GASはまず、ノイズを足した特徴を判別器が「異常」と言いにくくなる向きへ少しずつ動かす。判別器の誤差が増える向きへ入力側を動かすので「勾配上昇」と呼ぶ。動かすのは判別器の重みではなく、特徴そのものだ。こうして紛らわしい疑似欠陥ができる。
ただし動かしすぎると正常と重なり、遠すぎても練習にならない。そこで数ステップごとに元の正常特徴からの距離を測り、下限〜上限の範囲(帯)に収める。近すぎれば押し出し、遠すぎれば引き戻す(切断投影)。図3はこの繰り返しを示す。
flowchart TB
U["正常特徴"] --> N["ノイズを足した特徴"]
N --> A["勾配上昇で少し動かす<br/>判別器が異常と言いにくい向きへ"]
A -->|"数ステップごと"| C{"切断投影:元の正常特徴<br/>からの距離"}
C -->|"下限未満"| P1["下限まで押し出す"]
C -->|"上限超"| P2["上限まで引き戻す"]
C -->|"帯の中"| K["そのまま"]
P1 & P2 & K --> R{"規定の回数に<br/>達したか"}
A -->|"それ以外のステップ"| R
R -->|"まだ:繰り返す"| A
R -->|"達した"| B["帯の中の疑似欠陥<br/>異常として教える"]
classDef normal fill:#E8F5E9,stroke:#2E7D32,stroke-width:1px,color:#1B1B1B
classDef synth fill:#FFF3E0,stroke:#E65100,stroke-width:1px,color:#1B1B1B
classDef core fill:#FFCC80,stroke:#BF360C,stroke-width:3px,color:#1B1B1B
classDef judge fill:#E3F2FD,stroke:#1565C0,stroke-width:2px,color:#1B1B1B
classDef out fill:#EDE7F6,stroke:#4527A0,stroke-width:1px,color:#1B1B1B
classDef neutral fill:#F5F5F5,stroke:#757575,stroke-width:1px,color:#1B1B1B
class U normal
class N synth
class A,C,P1,P2 core
class K,R neutral
class B synth
図3 GASの流れ。動かす向きは保ち、長さだけを帯に収める。
推論時は図4のように、検査画像を特徴量にして判別器に通すだけで、画素ごとの異常マップと画像のスコアが出る。
flowchart LR
X["検査画像"] --> F["特徴抽出器<br/>+小さな適応層"] --> D["判別器"] --> Z["点ごとの異常度"]
Z --> M["拡大・平滑化<br/>画素の異常マップ"]
Z --> S["最大値<br/>画像の異常スコア"]
classDef normal fill:#E8F5E9,stroke:#2E7D32,stroke-width:1px,color:#1B1B1B
classDef synth fill:#FFF3E0,stroke:#E65100,stroke-width:1px,color:#1B1B1B
classDef core fill:#FFCC80,stroke:#BF360C,stroke-width:3px,color:#1B1B1B
classDef judge fill:#E3F2FD,stroke:#1565C0,stroke-width:2px,color:#1B1B1B
classDef out fill:#EDE7F6,stroke:#4527A0,stroke-width:1px,color:#1B1B1B
classDef neutral fill:#F5F5F5,stroke:#757575,stroke-width:1px,color:#1B1B1B
class X,F neutral
class D,Z judge
class M,S out
図4 推論時の流れ(疑似欠陥の合成なし)。
結果:標準データでは頭打ち、弱い欠陥で差が出る
指標のAUROCは、正常と異常を1枚ずつ選んだとき異常の方を高く採点する確率で、100%が完璧だ。表1は4評価セットの比較だ。GLASS-mと-hは距離の基準が違う変種で、-jはカテゴリごとにm・hの一方を選ぶ。
| 評価セット(平均) | 手法 | 画像AUROC (%) | 画素AUROC (%) | PRO (%) |
|---|---|---|---|---|
| MVTec AD(15カテゴリ) | GLASS-j | 99.9 | 99.3 | 96.8 |
| 同上 | GLASS-h | 99.8 | 99.0 | 95.9 |
| 同上 | SimpleNet | 99.5 | 98.1 | 90.0 |
| 同上 | BGAD | 97.9 | 98.2 | 96.3 |
| MPDD(6カテゴリ) | GLASS-j | 99.6 | 99.4 | 98.2 |
| 同上 | GLASS-h | 96.7 | 98.8 | 96.4 |
| 同上 | SimpleNet | 98.1 | 98.7 | 95.7 |
| MAD-man(人が選んだ実在の弱い欠陥) | GLASS-m | 99.6 | 99.3 | 97.5 |
| 同上 | SimpleNet | 99.3 | 98.6 | 94.8 |
| MAD-sys(合成した弱い欠陥。LASと同じ式で作成) | GLASS-m | 95.6 | 93.3 | 80.3 |
| 同上 | PatchCore | 92.4 | 92.6 | 63.9 |
| 同上 | SimpleNet | 84.6 | 85.0 | 57.3 |
表1 論文の Table 2・3 より(比較手法が再実験か引用かは不明)。PROは欠陥領域ごとの重なりで、小さい欠陥も同じ重みで数える。

図5 表1の画像AUROCから作図。橙がSimpleNet、青がGLASS(変種は各行に記載)。横軸は80%から。
SimpleNetは特徴量にガウスノイズを足す、直接の比較相手だ。図5は両者の画像AUROCの差を示す。標準のMVTec ADでは0.4ポイントと小さいが、薄い欠陥を合成したMAD-sysでは11.0ポイント開く。次点PatchCoreとは3.2ポイント差だ。要素を1つずつ足す実験では、勾配上昇と切断投影を加えるごとに画像AUROCが微増した。
限界と実務での読み方
- MAD-sysはLASと同じ式で作られており、GLASSに有利な可能性がある。実在の弱い欠陥(MAD-man)では、SimpleNetとの差は画像AUROCで0.3ポイントにとどまる。
- 全変種が勝つわけではなく、GLASS-hはMPDDの画像AUROCでSimpleNetを下回る。
- 対象は傷やしみなどの構造的な異常で、部品の欠落や配置違いは検討していない。外部のテクスチャ画像集にも依存する。
導入を検討するなら、自社で見逃している薄い欠陥を集め、既存手法と並べて比べるのが確実だろう。
出典
- Qiyu Chen, Huiyuan Luo, Chengkan Lv, Zhengtao Zhang. "A Unified Anomaly Synthesis Strategy with Gradient Ascent for Industrial Anomaly Detection and Localization." ECCV 2024. https://arxiv.org/abs/2407.09359 (arXiv non-exclusive license)
- 図1中の物体画像は MVTec AD(https://www.mvtec.com/company/research/datasets/mvtec-ad)由来と推定(CC BY-NC-SA 4.0、非商用)。論文に出典の記載なし
- 解説動画 https://youtu.be/ip_WIpqyxr0?si=37nS8xoQWvBiuFot

