如何客製化企業 RAG 知識庫?— 從資料庫到知識整合的實戰技術
|

【OpenVINO瑕疵檢測功能】Anomalib 介紹與實作教學

   

作者:陳紀翰

異常檢測(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 提供以下異常檢測模型(持續更新與增加中):

  1. PaDim
  2. CFlow-AD
  3. DRAEM
  4. DFKDE
  5. DFM
  6. Fast-Flow
  7. GANomaly
  8. PatchCore
  9. Reverse Distillation
  10. 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。

$ yes | conda create -n anomalib_env python=3.8
$ conda activate anomalib_env

第二步:安裝Anomalib

安裝方法以下兩種:

(1) 利用Pypi 安裝

使用Pypi安裝需自行安裝其他相依套件,如OpenVINO、PyTorch等。

$ pip install anomalib

(2) 利用Git Clone 安裝

下載Anomalib Git專案,使用本地安裝,好處是會一併安裝依賴套件。詳細依賴套件可至 anomalib/requirements/

$ git clone https://github.com/openvinotoolkit/anomalib.git
$ 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模型權重檔):

$ python tools/train.py # Train PADIM on MVTec AD leather

若使用自定義模型配置檔(config.yaml),則使用以下指令:

$ python tools/train.py --config anomalib/models/padim/config.yaml
# python tools/train.py --config <模型存放路徑/model/config.yaml>

Tips:

若在訓練時出現「ImportError」載入錯誤的訊息:

  1. 請至Anoconda 安裝路徑
    ..\anaconda3\envs\openvino\Lib\site-packages\openvino\inference_engine
  2. 開啟 __init__.py
  3. 在程式碼內添加「import openvino.runtime」並儲存,如圖中綠框處
  4. 再重新執行python train.py 即可


4. 推論結果

Anomalib推論方法包含PyTorch Lightning、Gradio、OpenVINO,更多推論工具可參考:https://github.com/openvinotoolkit/anomalib/tree/main/tools/inference

以下推論範例使用PyTorch Lightning:

$ python tools/inference/lightning_inference.py \
--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
--h # 輸出指令配置
--config # 選擇模型配置檔
--weights # 選擇模型權重檔
--input # 指定輸入圖片
--output # 指定輸出路徑

以下為本文使用部分模型推論的結果:

PADIM

CFlow

DRAEM

Patchcore

DFKDE

DFM

結論

本文介紹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).

Ludwig Chen

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: Ludwig Chen

畢業於國立陽明交通大學資訊工程研究所,目前於僑光科技大學資訊科技系擔任助理教授,研究專長包括類神經網路、嵌入式系統、FPGA 及 AI 導入企業解方,執行專案經驗包含工研院、中科院、數發部、經濟部以及台中市環保局,曾獲112年度 AI 應用鬥智賽金獎(Prophet AI)、111 年度 AIGO 特優獎(8926 AIoT)及 109年度 AIGO 優等獎,目前擔任多所中小企業及新創企業執行顧問,專注於企業數位轉型與智慧轉型之導入議題。 本身是個熱愛藝術的資訊工程研究員,熱衷於探索在『研究、應用與啟發教學』之間平衡而產生的美感。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *