# [Anomalib](https://github.com/openvinotoolkit/anomalib) 評測文 <img src= https://i.imgur.com/TyREAwv.png) width="350" height="100" align="middle" /> ## AI與瑕疵檢測結合可應用之場域 工業場域中,對於不同大小、不同形狀及不同材質的工業部件需要進行瑕疵檢測(AD)。傳統工業中,透過大量人力進行檢驗,此方法容易消耗大量人力與時間,且受檢驗人員經驗影響,檢測結果會下降。因此許多工廠導入了AI檢測模型,透過電腦視覺(CV)來協助人員進行檢測,主要透過攝像頭拍攝部件外觀,後由人員進行檢測,確認部件是否含有瑕疵,並將以此為資料集,訓練AI檢測模型。然而此方法在實際場域中受到資料量的限制,無法精準的對影像進行分析。為了提高AD模型應用在實際場域中的泛用性,許多研究開始提出不同的演算法來對瑕疵進行分析。而 openvino 彙整了一個深度學習資料庫 - [Anomalib],包含了目前檢測精準度較高的AD模型。 ## 多框架開發 Anomalib 可使用 「Pytorch」、「Openvino」進行模型訓練與異常檢測,本文將以PaDiM模型為例,介紹如何使用Openvino框架進行異常檢測模型訓練的過程。 ## 異常檢測模型實作 本文使用的硬體設備有兩種,分別為 個人筆電 Windows10,處理器為 i7-8750H 及 工業電腦 (待補規格) ### 環境建置 本文所使用的開發工具為 [Anaconda](https://www.anaconda.com/products/distribution) 建立虛擬環境後,即可進行模型的下載,步驟如下: - 下載並安裝 Anomalib 專案與套件 ``` git clone https://github.com/openvinotoolkit/anomalib.git # download Anomalib Github cd anomalib pip install -e . # download package ``` ### 安裝 [Openvino](https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html) > 若執行系統為 Windows 時,當Openvino有指定版本時,如:```pip install openvino-dev==2022.3.0```,執行推論前需執行 ```setupvars.bat```。 > ```setupvars.bat``` 預設路徑:C:\Program Files (x86)\Intel\openvino_2022\。 ``` pip install openvino-dev # download package for for developing applications ``` ### 下載 [MVTec](https://www.mydrive.ch/shares/38536/3830184030e49fe74747669442f0f282/download/420938113-1629952094) 本文將使用 MVTec AD 資料集進行工業部件瑕疵檢測 ``` anomalib └─datasets └─MVTec ``` ### 模型訓練 自訂 config.yaml 檔內容 ``` anomalib └─anomalib └─models └─padim ``` > 根據檢測的模型,不同模型參數位置會有所差異,更換模型時需要特別注意。 > 5L ``` category: bottle ```,修改檢測類別,詳細類別如下: > > category list : bottle, cable, capsule, carpet, grid, > hazelnut, leather, metal_nut, pill, screw, > tile, toothbrush, transistor, wood, zipper > > 7L ```train_batch_size: 32``` > 8L ```eval_batch_size: 32``` > 以上兩種參數需根據 GPU 性能進行調整,以 RTX 2060 為例,將參數值設為 2 > 66L ```export_mode: "openvino"```,修改模型輸出格式 > 77L ```check_val_every_n_epoch: 1```,設定訓練幾次後,儲存權重檔(.ckpt)。 > 94L ```max_epoch: 1```,設定訓練次數為 n+1 設定完成後,即可開始進行訓練 ``` python tools/train.py --config anomalib/models/{model_name}/config.yaml ``` 以模型 "PaDiM" 為例 ``` python tools/train.py --config anomalib/models/padim/config.yaml ``` 完成訓練後,模型將會自動輸出各類別結果影像與權重 需確認輸出的檔案是否含有IR檔,以進行推論 (inference) ![](https://i.imgur.com/cN1AqZe.png) ``` anomalib └─results └─padim └─mvtec └─bottle └─run └─openvino └─meta_data.json model.bin model.mapping model.onnx model.xml ``` ### 進行推論 (Openvino) ``` python tools/inference/openvino_inference.py --config anomalib/models/{model_name}/config.yaml --weights results/{model_name}/mvtec/{category_name}/run/openvino/model.bin --meta_data results/{model_name}/mvtec/{category_name}/run/openvino/meta_data.json --input datasets/MVTec/{category_name}/test/{image_path} --output {output_path} ``` 以類別 "bottle" 中的 "broken_large" 影像為例 ``` python tools/inference/openvino_inference.py --config anomalib/models/padim/config.yaml --weights results/padim/mvtec/bottle/run/openvino/model.bin --meta_data results/padim/mvtec/bottle/run/openvino/meta_data.json --input datasets/MVTec/bottle/test/broken_large --output results/padim/openvino ``` > --input 可使用單張影像或資料夾 > --output 輸出類別 "bottle",關於 "broken_large" 問題的測試結果 ``` anomalib └─results └─padim └─openvino └─broken_large ``` ### 使用不同框架進行模型推論比較 <img src= https://i.imgur.com/ngf3BiZ.png) width="470" height="300" align="middle" /> </p> <img src= https://i.imgur.com/MOoBy7v.png) width="470" height="300" align="middle" /> </p> 結論:在先前的教學文中,和各位簡單介紹了如何使用 anomalib 中的模型進行訓練與推論,本文以此為基礎,介紹 PaDiM 等6種模型如何利用 openvino 來進行推論,在簡單操作的同時亦能提昇推論的效率。藉由以上圖表可知,在不同硬體設備下,使用openvino框架進行推論時,可有效提升大多數模型的推論速度。