在影像上使用非監督異常偵測找出異常的位置 — 各類方法介紹

張家銘
9 min readDec 27, 2022
在一群馬中有一個明顯是異類的白馬(主角光環?)

異常偵測 (Anomaly Detection) 是什麼呢?簡單來說,就是讓模型能夠準確區分正常樣本和異常樣本。例如:在醫療領域中,異常偵測可以用來找出有氣胸症狀的患者,或者在製造業中找出有表面缺陷的物件,也就是說我們大可訓練一個分類模型來幫我們做這件事情,但是異常樣本往往很難收集,因此近年來都是由非監督式學習的方法來著手處理這類問題,在 圖一 中可以看到監督式和非監督式的比較。

圖一,監督式學習和非監督式學習的比較

根據 [1] A Survey on Unsupervised Visual Industrial
Anomaly Detection Algorithms 這篇研究整理,大致上可以將方法分為四個類別,分別是 Reconstruction-based (基於重構), Normalizing Flow (NF)-based (基於 NF), Representation-based (基於表徵), Data augmentation-based (基於資料擴增)。

在下面的篇幅中,我們將為每個類別介紹一種方法,讓大家更容易理解這些方法是基於什麼原理區分正常樣本和異常樣本的。

1. Reconstruction-based Methods (基於重構的方法)

基於重構的方法其核心思想就是建構一個 Encoder-Decoder 網路結構的模型,以重構正常樣本為目標訓練神經網路,讓模型能夠重構正常樣本。在測試時,模型對於正常樣本仍能夠正常重構,但對於異常樣本,由於分佈的差異,導致重構效果較差。因此我們可以透過誤差得到異常得分,並進而判斷一個樣本是否為異常,Reconstruction-based Methods 的基本流程圖如 圖二 所示。

圖二,Reconstruction-based Methods 的簡單流程

[1] STFPM 方法由預訓練的教師網路與結構相同的學生網路所組成,並使用多尺度的特徵金字塔來接收多層次的知識混合,以增加模型的強健性。在訓練過程中,使用正常樣本來學習學生網路在教師網路的特徵分佈。在測試時,由於異常樣本在教師網路跟學生網路的特徵匹配沒有在訓練過程中學習過,因此特徵向量間的差異會比較大,也就是說差異越大異常發生的機率越高。STFPM 方法的架構圖如 圖三 所示。

圖三,SFTPM 方法架構圖

2. Normalizing Flow (NF)-based Methods (基於 NF 的方法)

Normalizing Flow (NF) 是一種能夠學習如何將資料分佈轉換成明確定義分佈的神經網路。在訓練過程中,先使用特徵萃取器提取影像特徵,再使用 NF Module 將正常樣本的特徵轉換成標準常態分佈。在測試時,異常樣本的特徵將會轉換到非常態分佈上,因此可以找出異常的位置,NF-based Methods 的基本流程圖如 圖四 所示。

圖四,Normalizing Flow (NF)-based Methods 的簡單流程

若想知道 Normalizing Flow 原理的讀者可以參考李宏毅老師在 youtube 介紹的 Flow-based Generative Model

[2] FastFlow 方法使用 2D Flow 的做法來估計特徵向量的分佈,這解決了空間位置關係的問題 (原本的 NF-based 做法都需要將特徵扁平化到一維向量才能估計分佈)。在訓練過程中,使用正常樣本來訓練模型,將原始特徵分佈以二維方式轉化為標準常態分佈。在測試時,模型會計算二維特徵上每個位置的機率值作為異常分數。FastFlow 方法的架構圖如 圖五 所示。

圖五,FastFlow 方法架構圖

3. Representation-based Methods (基於表徵的方法)

基於表徵的方法使用特徵萃取器 (預訓練模型) 提取影像的特徵向量,並在高維特徵空間中建立分界面或評分規則,以使正常特徵向量的分佈盡可能緊湊。在測試時,如果測試樣本在高維特徵空間中與正常樣本有明顯的距離,則可以可以將其判斷為異常樣本。Representation-based Methods 的基本流程圖如 圖六 所示。

圖六,Representation-based Methods 的簡單流程

[3] PatchCore 方法使用 stage 2, stage 3 的特徵圖來進行特徵萃取,因為 stage 1 的資訊還不足以表達影像局部性特徵。在訓練時,先用預訓練模型萃取正常樣本的特徵,然後透過 KNN Greedy CoreSet 採樣選擇最具代表性的特徵點(選擇與其他特徵點最遠的點以實現盡可能平衡的採樣),保留了 1%~10% 的特徵,進而實現高效率的特徵篩選,最後將特徵存入 Memory Bank 中保存。在測試時,如果至少有一個 patch 是異常的(離正常特徵很遠),則影像被歸類為異常,若想進一步得到 Anomaly Map,則需通過每個 Patch 的預測來產生像素級的結果。PatchCore 方法的架構圖如 圖七 所示。

圖七,PatchCore 方法架構圖

4. Augmentation-based Methods (基於資料擴增的方法)

基於資料擴增的方法為了克服異常樣本不足的限制,使用創建異常的做法來增加異常資料,就可以使用一般的監督式學習去訓練模型。Augmentation-based Methods 的基本流程圖如 圖八 所示。

圖八,Augmentation-based Methods 的簡單流程

[4] CutPaste 方法透過裁剪正常影像的隨機區域並將其疊加在正常影像上來創建異常影像,再訓練正常與異常分類模型,如 圖九(a) 所示。在推理階段採用 Gaussian density estimator (GDE) 來計算異常分數,若想得到較細部的分析需要從多個局部的影像來計算分數,進而得到 Anomaly Map,如 圖九(b) 所示。

圖九, CutPaste 方法架構圖

總結

經由上面的方法介紹,相信大家已經有初步的認識,在 表一 中比較了監督式方法與非監督式方法的優缺點,可以更進一步的吸收上面的知識,監督式方法需要人工標記並且通常有較高的準確率,而非監督式則不需要人工標記。

表一,監督式方法與非監督式方法的比較

在基於重構的方法和基於 NF 的方法中,通常需要昂貴的訓練成本,若生成模型不夠強健可能導致異常偵測的性能不穩定,但模型具有較好的泛化能力,同時支援未定義缺陷偵測。在基於表徵的方法中,由於不需要額外訓練特徵提取器的部分,因此訓練時間較短,但由於 backbone 通常偏向 ImageNet,因此它對某些影像(例如醫學影像)沒有很好的泛化性。最後是基於資料擴增的方法,它在所有方面的表現都是較差的,侷限性相當高。

在實作方面,openvino 有開源一個很好用的工具:anomalib,這個工具可以讓我們很簡單上手非監督異常偵測,當前可用模型包含:

粗體的是上述有介紹到的方法,而這個工具該如何使用,我們將在下篇文章進行介紹。

Reference

[1] A Survey on Unsupervised Visual Industrial Anomaly Detection Algorithms (Yajie et al., 2022) [Paper]
[2] STFPM: Student-Teacher Feature Pyramid Matching for Anomaly Detection (Guodong et al., 2021) [Paper]
[3] FastFlow: Unsupervised Anomaly Detection and Localization via 2D Normalizing Flows (Jiawei et al., 2021) [Paper]
[4] PatchCore: Towards Total Recall in Industrial Anomaly Detection (Karsten et al., 2021) [Paper]
[5] CutPaste: Self-Supervised Learning for Anomaly Detection and Localization (Chun-Liang et al., 2021) [Paper]

--

--