作者:陳紀翰
異常檢測(Anomaly detection),通常被理解為『檢測異常狀況』,為傳統統計學中,所指的離群值檢測,被廣泛用於偵測資料發生離群狀況[1],於電腦視覺、資訊安全、醫學、法律、經濟學、統計學領域中皆有大量應用。Deep Learning 興起後,大量工業技術開始應用基於機器學習基礎的瑕疵檢測方法,其中主要分為以下三大類:
1.監督式瑕疵檢測:
標註大量瑕疵物,以物件檢測技術(object detection)為基礎,於工件上檢測是否存在瑕疵物,優點是容易應用與理解,缺點是瑕疵數量多半為少量樣本,致使可標註的樣本數量低,且新瑕疵出現時也會因爲被識別而造成漏檢。
2.半監督瑕疵檢測:
標註部分瑕疵物,利用自動標註(auto-labeling)標註其餘樣本,其原理與執行方式與監督式瑕疵檢測大致相同,僅省去大量資料標註時間。
3.非監督式瑕疵檢測:
即不使用標註瑕疵的方法進行瑕疵檢測,改為利用訓練神經網路只學習正樣本,依照輸入樣本與正樣本的差異來判斷是否存在瑕疵,優點是可利用大量正樣本進行訓練且不需人工標註,在應用領域上接受度高。
受惠於近幾年 Anomaly detection 快速發展,2019 年後幾個重要的技術里程碑在 CVPR 上陸續發表,目前在工業領域上稱呼瑕疵檢測幾乎就是指異常檢測,而 Intel OpenVINO toolkit 也在近期完成了 Anomalib 這個函式庫(網址:https://github.com/openvinotoolkit/anomalib),此函式庫收錄了多個非監督式瑕疵檢測模型,對於目前走在前端的工業與研究團隊可說是一大研究利器。
同時,開發團隊今年也在 CVPR 研討會議程中提供教學文章,可讓使用者進行快速訓練並轉為 IR 檔,部署 Intel 晶片上進行加速運算,大幅縮減工業瑕疵檢測開發週期,本文將依序介紹本函式庫架構,挑選數個知名異常檢測模型進行原理、特色說明,並逐步進行操作說明。
Anomalib的特色
Anomalib 是 OpenVINO 所提供的異常檢測函式庫。該函式庫著重於圖像的異常檢測,識別圖像中的異常區域。在基準資料集(benchmark)中實現最佳性能。此外,該函式庫還提供組件(config)來設計可針對特定需求的自定義算法。其他工具,包括實驗管理(Experiment Management)、可視化器(visualization)和超參數優化器(Hyperparameter Optimization, HPO),使設計或執行異常檢測模型變得更簡單。Anomalib函式庫還支持OpenVINO 模型優化與量化以進行即時部署。
總體而言,anomalib 是一個廣泛的函式庫,用於設計、實現和部署從數據到邊緣的無監督異常檢測模型,其特色如下:
- Anomalib為公開的大型深度學習異常檢測函式庫。
- 運用PyTorch Lightning的模型,減少模組程式上的編輯,將能在實際運用上有效地簡化使用功能。
- 所有模型都可以由OpenVINO導出 IR 檔案,以便在Intel硬體上加速推理,並可選擇部屬GPU或CPU上。
- 可快速且輕鬆地部署在標準模型上,或是自定義異常檢測模型。

Anomalib函式庫架構
目前Anomalib 提供以下異常檢測模型(持續更新與增加中):
- PaDim
- CFlow-AD
- DRAEM
- DFKDE
- DFM
- Fast-Flow
- GANomaly
- PatchCore
- Reverse Distillation
- STFPM
將Anomalib從Git專案下載後,在檔案anomalib/models 可見每一模型所包含的檔案,大致可分為主模型(model.py)、與主模型相關程式以及模型配置檔(config.yaml),而使用者可依據模型配置檔中,自定義在訓練時所使用的資料集、預訓練模型、標準化方法、視覺化設定以及導出OpenVINO IR 或 ONNX檔案等功能。以下介紹第1~3種模型論文摘錄。
1. PaDiM
》論文名稱:PaDiM: a Patch Distribution Modeling Framework for Anomaly Detection and Localization Thomas Defard, Aleksandr Setkov, Angelique Loesch, Romaric Audigier [3]
》發表時間:2020年11月
》論文摘錄:
在工業零組件檢測中,由於訓練數據的缺乏,在工廠實際檢測時,無法準確檢測出異常所在位置。本文基於補丁分布建模(Patch Distribution Modeling),將無異常圖片分為多個Patch的大小,提取embeddings中前三層的特徵,分析影像分布,作為檢測圖像的對比依據,計算圖像的Anomaly Score,根據embedding計算原圖可能存在異常的位置,輸出異常影像熱點圖。
2. CFlow-AD
》論文名稱:Real-Time Unsupervised Anomaly Detection with Localization via Conditional Normalizing Flows Denis Gudovskiy, Shun Ishizaka, Kazuki Kozuka [4]
》發表時間:2021年7月
》論文摘錄:
在實際場域中,對於工業零組件的檢測需要快速、準確地辨識異常位置。本文基於非監督式學習(Unsupervised Learning),提出一個即時檢測模型。將圖片代入卷積神經網路(Convolutional neural network, CNN),提取第一層與最後一層的感受野(receptive field),以獲得全域 / 局部語意資訊(global / local semantic information),透過位置編碼(positional encoder , PE)分析影像分布,得出異常後進行上採樣還原圖片大小以輸出異常熱點圖。
3. DRAEM
》論文名稱:DRAEM — A discriminatively trained reconstruction embedding for surface anomaly detection Vitjan Zavrtanik, Matej Kristan, Danijel Skočaj [5]
》發表時間:2021年8月
》論文摘錄:
提出Reconstructive / Discriminative sub-network,來取代傳統的Auto-Encoder架構,在訓練過程中使用虛擬異常生成(simulated anomaly generation) ,增加異常圖像,彌補異常工業零組件數據不足的問題,因訓練時同時加入異常與非異常圖像,加強學習影像分布的差異,收緊decision boundary,達成異常檢測。
Anomalib實作
1. 下載與安裝Anomalib
本教學虛擬環境使用Conda ENV,因此在執行以下指令時,請先安裝Anoconda。
第一步:建立與進入虛擬環境
建立名為「anomalib_env」虛擬環境,並指定Python版本為3.8。
$ conda activate anomalib_env
第二步:安裝Anomalib
安裝方法以下兩種:
(1) 利用Pypi 安裝
使用Pypi安裝需自行安裝其他相依套件,如OpenVINO、PyTorch等。
(2) 利用Git Clone 安裝
下載Anomalib Git專案,使用本地安裝,好處是會一併安裝依賴套件。詳細依賴套件可至 anomalib/requirements/。
$ cd anomalib
$ pip install -e .
2. 下載異常檢測資料集-MVTec AD
首先至MVTec AD下載資料集壓縮檔,並解壓縮至 anomalib/datasets/MVTecAD。
該資料集中的訓練集只包含正常樣本,而測試集中包含正常樣本與缺陷樣本,因此需要使用無監督方法學習正常樣本的特徵表示,並用其檢測缺陷樣本。若想使用自行準備的訓練資料,模型配置方法可參照:https://github.com/openvinotoolkit/anomalib#custom-dataset
3. 訓練模型
Anomalib使用預訓練模型(backbone)為PyTorch Image Models (timm) 的「FeatureExtractor」,預訓練模型、標準化方法等皆可從每一個模型的config.yaml中修改(建議初學者先使用預設參數)。
使用以下指令,使用預設參數訓練模型(預設MVTec為訓練資料集,PADIM為訓練模型,並輸出.pt模型權重檔):
若使用自定義模型配置檔(config.yaml),則使用以下指令:
# python tools/train.py --config <模型存放路徑/model/config.yaml>
Tips:
若在訓練時出現「ImportError」載入錯誤的訊息:
- 請至Anoconda 安裝路徑
..\anaconda3\envs\openvino\Lib\site-packages\openvino\inference_engine - 開啟 __init__.py
- 在程式碼內添加「import openvino.runtime」並儲存,如圖中綠框處
- 再重新執行python train.py 即可

4. 推論結果
Anomalib推論方法包含PyTorch Lightning、Gradio、OpenVINO,更多推論工具可參考:https://github.com/openvinotoolkit/anomalib/tree/main/tools/inference
以下推論範例使用PyTorch Lightning:
--config anomalib/models/padim/config.yaml \
--weights results/padim/mvtec/bottle/weights/model.ckpt \
--input datasets/MVTec/bottle/test/broken_large/000.png \
--output results/padim/mvtec/bottle/images
--config # 選擇模型配置檔
--weights # 選擇模型權重檔
--input # 指定輸入圖片
--output # 指定輸出路徑
以下為本文使用部分模型推論的結果:
結論
本文介紹OpenVINO Anomalib 概覽、環境建構與基礎操作,OpenVINO Anomalib 入門使用十分容易,讓初階入門者可以快速完成建立模型及部署的工作,然而,實務經驗上,瑕疵檢測客製化程度十分高,面對不同的瑕疵問題恐需要重新測試哪個模型較為適合,目前 Anomalib 中提供了 10 個常用模型,此 10 個模型各自有各自的特色,面對 MVTec 資料集中提供的 5 種紋路及 10 種樣本而言,各模型呈現的檢測特色,日後也將於系列文章中進行更近一步探討。
另外,本文主要以 6 個模型為例說明操作,此 6 個模型基本上屬於環境建構與執行時較不容易遇到問題的幾個模型(或是遇到問題頂多為版本相容性問題,較為容易解決)其餘模型在某些環境中,尚有遇到較為麻煩的問題,此部分亦將待後續文章繼續討論。
參考資料
[1] Hawkins, Douglas M. (1980). Identification of Outliers. Chapman and Hall London; New York.
[2] Chandola, V.; Banerjee, A.; Kumar, V. (2009). “Anomaly detection: A survey”. ACM Computing Surveys. 41 (3): 1–58. doi:10.1145/1541880.1541882. S2CID 207172599.
[3] Defard, T., Setkov, A., Loesch, A., & Audigier, R. (2021, January). Padim: a patch distribution modeling framework for anomaly detection and localization. In International Conference on Pattern Recognition (pp. 475-489). Springer, Cham.
[4] Gudovskiy, D., Ishizaka, S., & Kozuka, K. (2022). Cflow-ad: Real-time unsupervised anomaly detection with localization via conditional normalizing flows. In Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision (pp. 98-107).
[5] Zavrtanik, V., Kristan, M., & Skočaj, D. (2021). Draem-a discriminatively trained reconstruction embedding for surface anomaly detection. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 8330-8339).
- 【開箱評測】探索未來:結合迷你PC與生成式AI的個人多媒體助理 - 2024/09/24
- 以AI進行無人機巡檢河川地貌分析 - 2023/09/15
- 【OpenVINO瑕疵檢測功能】Anomalib 介紹與實作教學 - 2022/12/05
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!