導(dǎo)讀
創(chuàng)建異常檢測模型,實(shí)現(xiàn)生產(chǎn)線上異常檢測過程的自動(dòng)化。在選擇數(shù)據(jù)集來訓(xùn)練和測試模型之后,我們能夠成功地檢測出86%到90%的異常。
介紹
異常是指偏離預(yù)期的事件或項(xiàng)目。與標(biāo)準(zhǔn)事件的頻率相比,異常事件的頻率較低。產(chǎn)品中可能出現(xiàn)的異常通常是隨機(jī)的,例如顏色或紋理的變化、劃痕、錯(cuò)位、缺件或比例錯(cuò)誤。
異常檢測使我們能夠從生產(chǎn)流程中修復(fù)或消除那些處于不良狀態(tài)的部件。因此,由于避免生產(chǎn)和銷售有缺陷的產(chǎn)品,制造成本降低了。在工廠中,異常檢測由于其特點(diǎn)而成為質(zhì)量控制系統(tǒng)的一個(gè)有用工具,對機(jī)器學(xué)習(xí)工程師來說是一個(gè)巨大的挑戰(zhàn)。
不推薦使用監(jiān)督學(xué)習(xí),因?yàn)椋涸诋惓z測中需要內(nèi)在特征,并且需要在完整數(shù)據(jù)集(訓(xùn)練/驗(yàn)證)中使用少量的異常。
另一方面,圖像比較可能是一個(gè)可行的解決方案,但標(biāo)準(zhǔn)圖像處理多個(gè)變量,如光線、物體位置、到物體的距離等,它不允許與標(biāo)準(zhǔn)圖像進(jìn)行像素對像素的比較。在異常檢測中,像素到像素的比較是不可或缺的。
除了最后的條件外,我們的建議包括使用合成數(shù)據(jù)作為增加訓(xùn)練數(shù)據(jù)集的方法,我們選擇了兩種不同的合成數(shù)據(jù),隨機(jī)合成數(shù)據(jù)和相似異常合成數(shù)據(jù)。(詳見數(shù)據(jù)部分)
這個(gè)項(xiàng)目的目標(biāo)是使用無監(jiān)督學(xué)習(xí)和合成數(shù)據(jù)作為數(shù)據(jù)增強(qiáng)方法來分類異常 — 非異常。
背景研究
異常檢測與金融和檢測“銀行欺詐、醫(yī)療問題、結(jié)構(gòu)缺陷、設(shè)備故障”有關(guān)(Flovik等,2018年)。該項(xiàng)目的重點(diǎn)是利用圖像數(shù)據(jù)集進(jìn)行異常檢測。它的應(yīng)用是在生產(chǎn)線上。在項(xiàng)目開始時(shí),我們熟悉了自動(dòng)編碼器在異常檢測中的功能和架構(gòu)。作為數(shù)據(jù)計(jì)劃的一部分,我們研究了包括合成噪聲圖像和真實(shí)噪聲圖像的重要性(Dwibedi et al, 2017)。
數(shù)據(jù)計(jì)劃是這個(gè)項(xiàng)目的重要組成部分。選擇一個(gè)數(shù)據(jù)集,有足夠的原始圖像和足夠的真實(shí)噪聲的圖像。同時(shí)使用合成圖像和真實(shí)圖像。在處理真實(shí)圖像時(shí),這些數(shù)據(jù)需要對目標(biāo)有全覆蓋,但是在尺度和視角方面無法完全獲得。“……要區(qū)分這些實(shí)例需要數(shù)據(jù)集對對象的視角和尺度有很好的覆蓋”(Dwibedi et al, 2017)。
合成數(shù)據(jù)的使用允許“實(shí)例和視角的良好覆蓋”(Dwibedi et al, 2017)。合成圖像數(shù)據(jù)集的創(chuàng)建,包括合成渲染的場景和對象,是通過使用Flip Library完成的,這是一個(gè)由LinkedAI創(chuàng)建的開源python庫。“剪切,粘貼和學(xué)習(xí):非常簡單的合成實(shí)例檢測”,通過這些數(shù)據(jù)的訓(xùn)練和評估表明,使用合成數(shù)據(jù)集的訓(xùn)練在結(jié)果上與在真實(shí)圖像數(shù)據(jù)集上的訓(xùn)練具有可比性。
自動(dòng)編碼器體系結(jié)構(gòu)“通常”學(xué)習(xí)數(shù)據(jù)集的表示,以便對原始數(shù)據(jù)進(jìn)行維數(shù)縮減(編碼),從而產(chǎn)生bottleneck。從原始的簡化編碼,產(chǎn)生一個(gè)表示。生成的表示(重構(gòu))盡可能接近原始。
自動(dòng)編碼器的輸入層和輸出層節(jié)點(diǎn)數(shù)相同。“bottleneck值是通過從隨機(jī)正態(tài)分布中挑選出來的”(Patuzzo, 2020)。在重構(gòu)后的輸出圖像中存在一些重構(gòu)損失(Flovik, 2018),可以通過分布來定義原始圖像輸入的閾值。閾值是可以確定異常的值。
去噪自動(dòng)編碼器允許隱藏層學(xué)習(xí)“更魯棒的濾波器”并減少過擬合。一個(gè)自動(dòng)編碼器被“從它的一個(gè)損壞版本”來訓(xùn)練來重建輸入(去噪自動(dòng)編碼器(dA))。訓(xùn)練包括原始圖像以及噪聲或“損壞的圖像”。隨著隨機(jī)破壞過程的引入,去噪自編碼器被期望對輸入進(jìn)行編碼,然后通過去除圖像中的噪聲(破壞)來重建原始輸入。
用去噪自編碼器提取和組合魯棒特征,去噪自編碼器應(yīng)該能夠找到結(jié)構(gòu)和規(guī)律作為輸入的特征。關(guān)于圖像,結(jié)構(gòu)和規(guī)律必須是“從多個(gè)輸入維度的組合”捕獲。Vincent等(2020)的假設(shè)引用“對輸入的部分破壞的魯棒性”應(yīng)該是“良好的中間表示”的標(biāo)準(zhǔn)。
在這種情況下,重點(diǎn)將放在獲取和創(chuàng)建大量原始和有噪聲圖像的能力上。我們使用真實(shí)數(shù)據(jù)和合成數(shù)據(jù)創(chuàng)建了大量的圖像來訓(xùn)練我們的模型。
根據(jù)Huszar(2016)的說法,擴(kuò)張卷積自動(dòng)編碼器“支持感受野的指數(shù)擴(kuò)展,而不丟失分辨率或覆蓋范圍。“保持圖像的分辨率和覆蓋范圍,對于通過擴(kuò)大卷積自動(dòng)編碼器重建圖像和使用圖像進(jìn)行異常檢測是不可或缺的。這使得自動(dòng)編碼器在解碼器階段,從創(chuàng)建原始圖像的重建到更接近“典型”自動(dòng)編碼器結(jié)構(gòu)可能產(chǎn)生的結(jié)果。
Dilated Convolutional Autoencoders Yu et al.(2017),“Network Intrusion Detection through Stacking Dilated Convolutional Autoencoders”,該模型的目標(biāo)是將無監(jiān)督學(xué)習(xí)特征和CNN結(jié)合起來,從大量未標(biāo)記的原始流量數(shù)據(jù)中學(xué)習(xí)特征。他們的興趣在于識(shí)別和檢測復(fù)雜的攻擊。通過允許“非常大的感受野,而只以對數(shù)的方式增加參數(shù)的數(shù)量”,Huszar (2016),結(jié)合無監(jiān)督CNN的特征學(xué)習(xí),將這些層堆疊起來(Yu et al., 2017),能夠從他們的模型中獲得“卓越的性能”。
技術(shù)
Flip Library (LinkedAI):https://github.com/LinkedAi/flip
Flip是一個(gè)python庫,允許你從由背景和對象組成的一小組圖像(可能位于背景中的圖像)中在幾步之內(nèi)生成合成圖像。它還允許你將結(jié)果保存為jpg、json、csv和pascal voc文件。
Python Libraries
在這個(gè)項(xiàng)目中有幾個(gè)Python庫被用于不同的目的:
可視化(圖像、指標(biāo)):
OpenCV
Seaborn
Matplotlib
處理數(shù)組:
Numpy
模型:
Keras
Random
圖像相似度比較:
Imagehash
PIL
Seaborn (Histogram)
Weights and Biases
Weights and bias是一個(gè)開發(fā)者工具,它可以跟蹤機(jī)器學(xué)習(xí)模型,并創(chuàng)建模型和訓(xùn)練的可視化。它是一個(gè)Python庫,可以作為import wandb導(dǎo)入。
它工作在Tensorflow, Keras, Pytorch, Scikit,Hugging Face,和XGBoost上。使用wandb.config配置輸入和超參數(shù),跟蹤指標(biāo)并為輸入、超參數(shù)、模型和訓(xùn)練創(chuàng)建可視化,使它更容易看到可以和需要更改的地方來改進(jìn)模型。
模型&結(jié)構(gòu)
我們基于當(dāng)前的自動(dòng)編碼器架構(gòu)開始了我們的項(xiàng)目,該架構(gòu)專注于使用帶有卷積網(wǎng)絡(luò)的圖像(見下圖)。經(jīng)過一些初步的測試,基于研究(參見參考資料)和導(dǎo)師的建議,我們更改為最終的架構(gòu)。
自編碼器的典型結(jié)構(gòu)
使用擴(kuò)張?zhí)卣?/strong>
擴(kuò)張?zhí)卣魇且环N特殊的卷積網(wǎng)絡(luò),在傳統(tǒng)的卷積核中插入孔洞。在我們的項(xiàng)目中,我們特別的對通道維度應(yīng)用了膨,不影響圖像分辨率。
最終的結(jié)構(gòu)
圖像相似度
這個(gè)項(xiàng)目的關(guān)鍵點(diǎn)之一是找到一個(gè)圖像比較的指標(biāo)。利用圖像比較度量對模型進(jìn)行訓(xùn)練,建立直方圖,并計(jì)算閾值,根據(jù)該閾值對圖像進(jìn)行異常和非異常的分類。
我們從逐個(gè)像素的L2歐氏距離開始。結(jié)果并不能確定其中的一些差異。我們使用了帶有不同散列值(感知、平均和差異)的Python Imagehash庫,對于相似的圖像,我們得到了不同的結(jié)果。
我們發(fā)現(xiàn)SSIM(結(jié)構(gòu)相似度指數(shù)度量)度量為我們提供了一對圖像之間相似度的度量,此外,它是Keras庫的一個(gè)內(nèi)置損失。
直方圖
在對模型進(jìn)行訓(xùn)練和評估后,利用其各自的數(shù)據(jù)集,對重建后的圖像和原始圖像之間的相似度進(jìn)行識(shí)別。當(dāng)然,由于原始圖像的多樣性(如,大小,位置,顏色,亮度和其他變量),這種相似性有一個(gè)范圍。
我們使用直方圖作為圖的表示,以可視化這個(gè)范圍,并觀察在哪個(gè)點(diǎn)會(huì)有不同的圖像。
直方圖的例子
數(shù)據(jù)
使用的數(shù)據(jù)從Kaggle下載:表面裂紋檢測數(shù)據(jù)集:https://www.kaggle.com/arunrk7/surface-crack-detection和鑄造產(chǎn)品質(zhì)量檢查圖像數(shù)據(jù):https://www.kaggle.com/ravirajsinh45/real-life-industrial-dataset-of-casting-product?select=casting_data。
第一個(gè)是裂縫數(shù)據(jù)集,包含20,000張負(fù)樣本墻圖像(無裂縫)和20,000張正樣本墻圖像(有裂縫)。在這種情況下,裂縫被認(rèn)為是異常的。所有數(shù)據(jù)都是227x227像素的RGB通道。下面顯示了每個(gè)組的示例。
![](Anomaly Detection with Computer Vision.assets/0_wkppduibzb5UMKe4.png)
我們從沒有異常的組中選取了10,000張圖像來生成不同的合成數(shù)據(jù)集。然后合成的數(shù)據(jù)集被分為兩種類型:一種是帶有類似異常的噪聲(51張圖像是用Photoshop創(chuàng)建的),另一種是使用水果、植物和動(dòng)物等隨機(jī)物體。所有用作噪聲的圖像都是png格式的,背景是透明的。下面是用于模型訓(xùn)練的兩種類型的數(shù)據(jù)集的一些例子。
![](Anomaly Detection with Computer Vision.assets/0_QOK2rwxMoVZiFd5Q.png)
第二個(gè)數(shù)據(jù)集,cast數(shù)據(jù)集分為兩組,一組為512x512像素的圖像(有異常的781張,無異常的519張),另一組為300x300像素的圖像(有異常的3137張,有異常的4211張)。
所有圖像都有RGB通道。使用的是300 x 300像素的圖像。后者,來自Kaggle,91.65%的數(shù)據(jù)被分為訓(xùn)練,其余的測試。對于該數(shù)據(jù)集,異常包括:邊緣碎片、劃痕、表面翹曲和孔洞。下面是一些有和沒有異常的圖像示例。
我們使用1,000張屬于訓(xùn)練組的無缺陷圖像來生成合成數(shù)據(jù)數(shù)據(jù)集。
在前面的例子中,我們創(chuàng)建了兩種類型的數(shù)據(jù)集:一種帶有類似于異常的噪聲(51張圖像是用Photoshop創(chuàng)建的),另一種帶有隨機(jī)對象的噪聲,如動(dòng)物、花朵和植物(裂縫數(shù)據(jù)集中使用的相同的80張圖像)。
下面是一些在模型訓(xùn)練中使用的圖像示例。
所有合成數(shù)據(jù)都是使用Flip庫創(chuàng)建的。在每個(gè)生成的圖像中,選擇兩個(gè)對象并隨機(jī)放置。
對象應(yīng)用了三種類型的轉(zhuǎn)換:翻轉(zhuǎn)、旋轉(zhuǎn)和調(diào)整大小。生成的圖像保存為jpg格式。項(xiàng)目使用的數(shù)據(jù)集如下表所示:
實(shí)驗(yàn)
根據(jù)上述表格說明,我們的主要目的是研究數(shù)據(jù)集的哪些變化可能呈現(xiàn)最好的結(jié)果,我們用這些數(shù)據(jù)和獲得的結(jié)果訓(xùn)練了模型(見下面的圖表)。
對于每個(gè)數(shù)據(jù)集,我們評估了幾個(gè)指標(biāo),如(SSIM)損失、召回、精度、F1和精度。在每一次實(shí)驗(yàn)中,我們將評估代表這組噪聲圖像和重建圖像之間圖像相似性的直方圖。
為了跟蹤和比較我們的結(jié)果,我們使用了library Weight & bias,它允許一種簡單的方式來存儲(chǔ)和比較每個(gè)實(shí)驗(yàn)的結(jié)果。
訓(xùn)練
為了在我們的環(huán)境中保持少量的變量,我們決定總是使用一個(gè)有1000個(gè)樣本的數(shù)據(jù)集,而不管真實(shí)數(shù)據(jù)和合成數(shù)據(jù)之間的關(guān)系。
在算法中,我們將各自的數(shù)據(jù)集分割為95%進(jìn)行訓(xùn)練,5%進(jìn)行測試結(jié)果。除此之外,我們的評估只使用了真實(shí)的數(shù)據(jù)。
評估和結(jié)果
下面是一些實(shí)驗(yàn)的主要結(jié)果。你可在以下連結(jié)找到所有的結(jié)果:
裂縫數(shù)據(jù)集:https://wandb.ai/heimer-rojas/anomaly-detector-cracks?workspace=user-
裂縫直方圖
裂縫數(shù)據(jù)集的異常檢測
對于裂紋數(shù)據(jù)集,實(shí)驗(yàn)結(jié)果也很好(91% ~ 98%),實(shí)驗(yàn)之間沒有顯著差異。與無異常的圖像相比,其行為主要取決于裂紋大小和顏色等變量。
鑄造工件數(shù)據(jù)集:https://wandb.ai/heimer-rojas/anomaly-detector-cast?workspace=user-heimer-rojas
鑄造工件數(shù)據(jù)集的準(zhǔn)確率和召回率
鑄造件E1&E3
鑄造件數(shù)據(jù)集的異常檢測
挑戰(zhàn)
訓(xùn)練時(shí)間長,在谷歌Colab和專業(yè)版中使用GPU訓(xùn)練。
通過上傳壓縮后的zip格式的數(shù)據(jù)來解決長時(shí)間的數(shù)據(jù)加載問題,這樣每個(gè)數(shù)據(jù)集上傳一個(gè)文件,大大減少了時(shí)間。
最初的提議是使用哥倫比亞汽車生產(chǎn)線的數(shù)據(jù)集,不幸的是,正樣本和負(fù)樣本圖像的質(zhì)量和數(shù)量都不足以創(chuàng)建一個(gè)合適的機(jī)器學(xué)習(xí)模型。這種情況促使我們決定使用Kaggle的數(shù)據(jù)集,與生產(chǎn)線生產(chǎn)的條件類似。
每個(gè)數(shù)據(jù)集在異常情況下的可視化差異是不同的,需要考慮正常的圖像結(jié)構(gòu),如圖像的顏色、亮度等內(nèi)在特征
需要人類的專業(yè)知識(shí)來根據(jù)真實(shí)數(shù)據(jù)或合成數(shù)據(jù)的閾值選擇適當(dāng)?shù)拈撝怠_@可能要視情況而定。
討論
實(shí)現(xiàn)一個(gè)真正的機(jī)器學(xué)習(xí)項(xiàng)目需要幾個(gè)步驟,從想法到模型的實(shí)現(xiàn)。這包括數(shù)據(jù)集的選擇、收集和處理。
在使用圖像的項(xiàng)目中有“調(diào)試腳本”是很重要的。在我們的例子中,我們使用了一個(gè)允許我們可視化的腳本:原始數(shù)據(jù)集、新的合成圖像和自編碼器去噪之后的圖像,使我們能夠評估模型的性能。
審核編輯:劉清
-
編碼器
+關(guān)注
關(guān)注
45文章
3638瀏覽量
134426 -
OpenCV
+關(guān)注
關(guān)注
31文章
634瀏覽量
41337 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627
原文標(biāo)題:詳解如何用深度學(xué)習(xí)實(shí)現(xiàn)異常檢測/缺陷檢測
文章出處:【微信號(hào):機(jī)器視覺沙龍,微信公眾號(hào):機(jī)器視覺沙龍】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論