當(dāng)您想進(jìn)行自動(dòng)缺陷檢測(cè),但數(shù)據(jù)集不平衡時(shí),Anomalib 是一個(gè)很好的工具。
在這個(gè)示例中,我們將介紹一個(gè)令人振奮的 Dobot 機(jī)器人工業(yè)用例,其中的機(jī)械臂用于教育、工業(yè)和智能用例中。如果您沒有可用的 Dobot 機(jī)器人,您可以簡(jiǎn)單地修改 notebook,避開、注釋或改變機(jī)器人代碼,使其為您所用。
讓我們開始吧
為了解 Anomalib 的工作原理,我們將看一個(gè)檢查彩色立方體的生產(chǎn)線。其中一些立方體會(huì)有洞或缺陷,需要從傳送帶上取下。由于這些缺陷在生產(chǎn)線上并不常見,我們將為我們的 AI 模型拍攝一些圖像。
安裝:
按照以下步驟使用源文件安裝 Anomalib:
1.使用 Python 3.8 版本創(chuàng)建運(yùn)行 Anomalib + Dobot DLL 的環(huán)境
對(duì)于 Windows,使用以下代碼:
python -m venv anomalib_env
anomalib_envScriptsactivate
對(duì)于 Ubuntu:
python3 -m venv anomalib_env
source anomalib_env/bin/activate
2.從 GitHub 存儲(chǔ)庫(kù)中安裝 Anomalib 及 OpenVINO 要求(在這篇博文中,我們將不使用 pip 安裝命令):
python –m pip install –upgrade pip wheel setuptools
cd anomalib
pip install -e . [openvino]
3.安裝 Jupyter Lab 或 Jupyter Notebook:
pip install notebook
pip install ipywidgets
4.然后連接您的 USB 攝像頭,使用簡(jiǎn)單的攝像頭應(yīng)用驗(yàn)證它在正常工作。然后,關(guān)閉該應(yīng)用。
可選:如果您可以訪問 Dobot,請(qǐng)實(shí)施以下步驟:
1.安裝 Dobot 要求。
2.檢查 Dobot 的所有連接狀態(tài),并使用 Dobot Studio 驗(yàn)證它在正常工作。
3.將通風(fēng)配件安裝在 Dobot 上,并使用 Dobot Studio 驗(yàn)證它在正常工作。
4.在 Dobot Studio(圖 2)中,點(diǎn)擊“Home”按鈕,找到:
校準(zhǔn)坐標(biāo):立方體陣列的左上角初始位置。
位置坐標(biāo):機(jī)械臂應(yīng)將立方體放在傳送帶上方的位置。
異常坐標(biāo):釋放異常立方體的位置。
然后在 notebook 中替換這些坐標(biāo)。
5.如需使用機(jī)器人運(yùn)行 notebook,從這里下載 Dobot API 和驅(qū)動(dòng)程序文件,并將它們添加到存儲(chǔ)庫(kù) Anomalib 文件夾的 notebooks/500_uses_cases/dobot 中。
|圖 2:Dobot Studio 界面。
注:如果沒有機(jī)器人,您可以轉(zhuǎn)到另一個(gè) notebook,如 501b notebook,通過這個(gè)鏈接下載數(shù)據(jù)集,并在那里嘗試訓(xùn)練和推理。
01
Notebook 的數(shù)據(jù)采集和推理
下面,我們需要使用正常的數(shù)據(jù)集創(chuàng)建文件夾。在這個(gè)示例中,我們創(chuàng)建了一個(gè)彩色立方體的數(shù)據(jù)集,并為異常情況添加一個(gè)黑色圓圈貼紙,以模擬盒子上的洞或缺陷(圖 3)。對(duì)于數(shù)據(jù)采集和推理,我們將使用 501a notebook。
|圖 3:用于第一輪訓(xùn)練的數(shù)據(jù)集。
在采集數(shù)據(jù)時(shí),請(qǐng)務(wù)必將 acquisition 變量設(shè)置 為 True 來運(yùn)行notebook,并為沒有異常的數(shù)據(jù)定義“正?!蔽募A,為異常圖像定義“異?!蔽募A。數(shù)據(jù)集將直接在 Anomalib 克隆的文件夾中創(chuàng)建,所以我們將看到 Anomalib/dataset/cubes 文件夾。
如果您沒有機(jī)器人,您可以修改代碼以保存圖像或使用下載的數(shù)據(jù)集進(jìn)行訓(xùn)練。
推理:
對(duì)于推理,acquisition 變量應(yīng)該是 False,我們不會(huì)保存任何圖像。我們將讀取采集到的視頻幀,使用 OpenVINO 運(yùn)行推理,并決定放置立方體的位置:對(duì)于正常立方體,放置在傳送帶上;對(duì)于異常立方體,放置在傳送帶外。
我們需要識(shí)別采集標(biāo)記 — 采集模式為 True,推理模式為 False。在采集模式下,要注意是創(chuàng)建正常還是異常文件夾。例如,在采集模式下,notebook 會(huì)將每張圖像保存在 anomalib/datasets/cubes/{FOLDER} 中,以便進(jìn)一步訓(xùn)練。在推理模式下,notebook 不會(huì)保存圖像;它將運(yùn)行推理并顯示結(jié)果。
訓(xùn)練:
對(duì)于訓(xùn)練,我們將使用 501b notebook。在這個(gè) notebook 中,我們將使用 PyTorch Lighting,并使用“Padim”模型進(jìn)行訓(xùn)練。這種模型有幾個(gè)優(yōu)點(diǎn):我們不需要 GPU,只用 CPU 就可以完成訓(xùn)練過程,而且訓(xùn)練速度也很快。
現(xiàn)在,讓我們深入了解一下訓(xùn)練 notebook!
02
導(dǎo)入
在這一部分,我們將解釋用于該示例的軟件包。我們還將從 Anomalib 庫(kù)中調(diào)用需要使用的軟件包。
配置:
有兩種方法來配置 Anomalib 模塊,一種是使用配置文件,另一種是使用 API。最簡(jiǎn)單的方法是通過 API 查看該庫(kù)的功能。如果您希望在您的生產(chǎn)系統(tǒng)中實(shí)施 Anomalib,請(qǐng)使用配置文件 YAML 文件,它是核心訓(xùn)練與測(cè)試進(jìn)程,包含數(shù)據(jù)集、模型、試驗(yàn)和回調(diào)管理(圖 4)。
在接下來的部分,我們將描述如何使用 API 配置您的訓(xùn)練。
|圖 4:訓(xùn)練和驗(yàn)證模塊。
數(shù)據(jù)集管理器:
通過 API,我們可以修改數(shù)據(jù)集模塊。我們將準(zhǔn)備數(shù)據(jù)集路徑、格式、圖像大小、批量大小和任務(wù)類型。然后,我們使用以下代碼將數(shù)據(jù)加載到管道中。
i, data = next(enumerate(datamodule.val_dataloader()))
模型管理器:
對(duì)于異常檢測(cè)模型,我們使用 Padim,您也可以使用其他 Anomalib 模型,如:CFlow、CS-Flow、DFKDE、DFM、DRAEM、FastFlow、Ganomaly Patchcore、Reverse Distillation 和 STFPM。此外,我們使用 API 設(shè)置了模型管理器;使用 anomalib.models 導(dǎo)入 Padim。
回調(diào)(Callbacks)管理器:
為了適當(dāng)?shù)赜?xùn)練模型,我們需要添加一些其他的“非基礎(chǔ)”邏輯,如保存權(quán)重、盡早終止、以異常分?jǐn)?shù)為基準(zhǔn)以及將輸入/輸出圖像可視化。為了實(shí)現(xiàn)這些,我們使用回調(diào)Callbacks。Anomalib 有自己的Callbacks,并支持 PyTorch Lightning 的本地callbacks。通過該代碼,我們將創(chuàng)建在訓(xùn)練期間執(zhí)行的回調(diào)列表。
訓(xùn)練:
在設(shè)置數(shù)據(jù)模塊、模型和callbacks之后,我們可以訓(xùn)練模型了。訓(xùn)練模型所需的最后一個(gè)組件是 pytorch_lightning Trainer 對(duì)象,它可處理訓(xùn)練、測(cè)試和預(yù)測(cè)管道。復(fù)制鏈接,查看 notebook 中的 Trainer 對(duì)象示例。
驗(yàn)證:
我們使用 OpenVINO 推理進(jìn)行驗(yàn)證。在之前的導(dǎo)入部分,我們導(dǎo)入了 anomalib.deploy 模塊中的 OpenVINOInferencer?,F(xiàn)在,我們將用它來運(yùn)行推理并檢查結(jié)果。首先,我們需要檢查 OpenVINO 模型是否在結(jié)果文件夾中。
預(yù)測(cè)結(jié)果:
為了實(shí)施推理,我們需要從 OpenVINOinference(我們可在其中設(shè)置 OpenVINO 模型及其元數(shù)據(jù))中調(diào)用 predict 方法,并確定需要使用的設(shè)備:
predictions = inferencer.predict(image=image)
預(yù)測(cè)包含與結(jié)果有關(guān)的各種信息:原始圖像、預(yù)測(cè)分?jǐn)?shù)、異常圖、熱圖圖像、預(yù)測(cè)掩碼和分割結(jié)果(圖 5)。根據(jù)您要選擇的任務(wù)類型,您可能需要更多信息。
|圖 5:預(yù)測(cè)結(jié)果
最后,我們采用 Dobot 機(jī)器人的缺陷檢測(cè)用例基本是這樣的。
03
使用您自己的數(shù)據(jù)集的技巧和建議
數(shù)據(jù)集轉(zhuǎn)換:
如果您想提高模型的準(zhǔn)確性,您可以在您的訓(xùn)練管道中應(yīng)用數(shù)據(jù)轉(zhuǎn)換。您應(yīng)該在 config.yaml 的 dataset.transform_config 部分提供增強(qiáng)配置文件的路徑。這意味著您需要有一個(gè)用于 Anomalib 設(shè)置的 config.yaml 文件,以及一個(gè)可供 Anomalib config yaml 文件使用的單獨(dú) albumentations_config.yaml 文件。
強(qiáng)大的模型:
異常檢測(cè)庫(kù)并非無所不能,在碰到麻煩的數(shù)據(jù)集時(shí)也可能會(huì)失效。好消息是:您可以嘗試 13 個(gè)不同的模型,并能對(duì)每個(gè)實(shí)驗(yàn)的結(jié)果進(jìn)行基準(zhǔn)測(cè)試。您可以將基準(zhǔn)測(cè)試入口點(diǎn)腳本用于其中,并將配置文件用于基準(zhǔn)測(cè)試目的。這將幫助您為實(shí)際用例選擇最佳模型。
審核編輯:劉清
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
28133瀏覽量
205927 -
dll
+關(guān)注
關(guān)注
0文章
115瀏覽量
45352 -
python
+關(guān)注
關(guān)注
55文章
4776瀏覽量
84390 -
Ubuntu系統(tǒng)
+關(guān)注
關(guān)注
0文章
85瀏覽量
3898
原文標(biāo)題:如何應(yīng)用Anomalib在數(shù)據(jù)集不平衡的情況下檢測(cè)缺陷?-- 下篇
文章出處:【微信號(hào):SDNLAB,微信公眾號(hào):SDNLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論