2020年12月9日 星期三

【AI HUB專欄】介於有和沒有之間的深度度量學習應用於異常偵測

圖/文 歐尼克斯實境互動工作室 許哲豪 2020/11/26

先前已介紹過多種異常偵測、模型可視化及裂縫檢測技術(參考文末延伸閱讀[A]~[H]),這一次改從另一種角度來介紹異常偵測,「深度度量學習(Deep Metric Learning)」。

在傳統「機器學習(Machine Learning)」領域多半是先透過領域專家以人工方式定義指定數量的特徵,再進行有監督分類或無監督聚類來達成影像辨識或特定目標提取,而最主要區隔資料的依據就是多維資料間的「距離」。雖然此類技術具有較高的可解釋性,但卻難以適用特徵數量較多、資料分佈過於分散或巨大數量的資料集。

近年來流行的「深度學習(Deep Learning)」則採用巨量資料驅動方式,建立出具有高度非線性的分類模型,透過深層的神經網路及巨量的權重值(參數)達成極佳分類效果。但此類作法通常難以理解究竟是用了何種特徵進行分類,僅能藉由可視化工具來幫忙確認主要反應區域。相對於傳統機器學習,在缺乏大量異常樣本的情況下,常難以訓練出穩定可用的模型及參數。

基於上述問題,於是就有結合兩種特性的「深度度量學習(Deep Metric Learning)」誕生了。一般深度學習分類模型,每當新增一類別時,通常需要重新訓練模型產生新的權重(參數),這樣非常耗時且不方便,於是有人就提出直接以模型最後幾層產生的權重值代替傳統手工提取特徵值的作法,計算所有資料分類的距離,如此便能得知新的分類和其它分類的距離關係,進而達分類的目的。為更清楚說明,以下就從「資料距離量測」、「深度度量學習原理」及「異常偵測應用方式」來進一步說明。



資料距離量測


一筆資料可以是一個數值(一個維度),亦可以有多組數值(多個維度)。比方說在二維空間中的一點,座標為(x,y),便可以稱其為一筆具有兩個維度的資料。若要描述一個人,則可將身高、體重、手長、腳長、腰圍等各項參數組成一筆n維的資料。若想知道兩筆資料間的距離,則有很多計算方式,常見的有下列幾種,如Fig. 1所示。

*歐幾里德距離(Euclidean Distance):簡稱歐氏距離,很直覺的直線距離計算方式,亦可擴展到多維(n維)資料空間,但缺點是各維度資料內容可能分佈不均或無直接關連性(如身高和體重),有時距離的大小和資料相似度完全沒有關連,會造成後續難以分類。


*馬哈拉諾比斯距離(Mahalanobis Distance):簡稱馬氏距離,會先求得資料各維度的平均值μ及共變異數(協方差)矩陣,相當於找到資料集的中心及分佈樣態。則單點距離就是對資料集中心的距離,而兩點間距離即為對同一中心的向量差。這樣的作法就能改善歐氏距離各維度數據分佈不均和無法相關連問題。


*餘弦距離(Cosine Distance):餘弦距離亦可稱為相似度,單位為角度。這是利用兩組多維資料產生的向量夾角來求取資料的相似度,當夾角為零度表示完全相似。

Fig. 1 常見資料距離量測公式。(a)歐氏距離,(b)馬氏距離,(c)餘弦距離。(OmniXRI Nov. 2020整理製作) (點擊圖放大)


深度度量學習原理


度量學習(Metric Learning)已發展多年,近年來受深度學習影響開始有許多學者將其整合在一起使用,發展出「深度度量學習(Deep Metric Learning)」,其主要工作大致如Fig. 2所示。首先收集一堆多維度資料集,接著可直接從深度學習卷積神經網路(Convolutional Neural Network, CNN)最後的全連結層(Full Connected Layer)中提取所需較少數量的特徵出來。然後利用上一節介紹的「資料距離量測」工具計算資料間距離的差異,並調整、學習參數,令同類資料的距離儘可能小,異類資料的距離儘可能大,主要就是將待分類資料送進孿生網路(Siamese Network,亦稱雙胞胎網路)進行學習,這是一種兩邊一模一樣的結構及共享權重的網路。最後再將資料的表示空間進切變換,使其更容易分割開,如此後續若有新的類別產生時也不需重新訓練模型,直接度量資料距離即可進行分類。
 

Fig. 2 深度度量學習基本工作。[1](點擊圖放大)

孿生網路(Siamese Network)部份,可採用雙胞胎或三胞胎(Triplet Network)方式計算資料距離,如Fig. 3所示。在雙胞胎式時,令同類得到最小的距離而不同類得到最大的距離。而三胞胎方式的網路結構還是一模一樣而權重也是共用,但輸入內容則採用一組同類,一組異類方式進行學習,最後使D1值越小、D2值越大,α為差異性間隔距離,最後以D1-D2+α為度量距離結果來調整網路參數。


Fig. 3 孿生網路工作方式,左:雙胞胎方式,右:三胞胎方式。[1](點擊圖放大)

度量資料距離的損失函數,除了剛才介紹的雙胞胎(Fig. 4a)及三胞胎(Fig. 4b)外,另外還有許多不同形式,適用不同資料集形態。更多深度度量學習內容可參考[1],這裡收錄整理了100多篇相關的論文。


Fig. 4 深度度量學習損失函數種類,(a)Contrastive Loss, (b)Triplet Loss, (c)Quadruple Loss, (d)Structed Loss, (e)N-Pair Loss, (f)Magnet Loss, (g)Clustering Loss, (h)Mixed Loss。[1](點擊圖放大)

異常偵測應用方式


為了方便驗證異常偵測(Anomaly Detection),德國MVTec公司開源了一套異常偵測的資料集MVTec AD[2],並提供相關論文[3],建立相關測試基準線,方便其它算法進行比較。這套資料集共包含15種材料(工業物件或材料表面),共5,354張影像,訓練集3,639張,測試集1,725張,其中包含476張正常影像及1,258張異常影像,共有73種異常分類,1,888個異常,影像尺寸從700x700~1024x1024,為高清晰之影像,並提供異常的標註檔(黑白二值化遮罩影像)。資料集樣本如Fig. 5所示。

Fig. 5 MVTec AD異常偵測資料集樣本,由左到右,第一行綠色框為正常影像,第二、四行為異常內容,第三、五行為異常放大影像,其中紅線曲線為標註遮罩影像所定義的封閉區域輪廓線。[3](點擊圖放大)

daisukelab利用此一資料集[2]及多種人臉辨識度量距離的算法作了一些實驗[4],其中包括了L2-constrained Softmax Loss, ArcFace, CosFace, SphereFace, CenterLoss 及傳統CNN。這裡為什麼度量距離的方式很多都和人臉辨識有關呢?是因為早期人臉辨識多半會把人臉從整張影像的數萬到數十萬維資料收歛到只剩數十維重要關鍵點(如眼角、嘴角、鼻子、臉形輪廓等),再通過度量距量來辨識是否為同一人的臉,所以剛好符合這篇文章所需的距離量測方法。

文章中分別做了幾個實驗,若以一般影像分類訓練好卷積神經網路(CNN)最後一層全連結層的參數,做為特徵值來度量不同類別影像的距離,由於本身差距就很小,勉強可分類內容差異較大的類別,但面對內容差異較小的影像幾乎沒有辨識能力,更不要說對微小異常辨識能力。接著使用同一類別影像的正常和異常影進行二分類訓練,結果因異常樣本太少且和正常樣本數量比例懸殊,因此亦未能正確區分。接著將所有正常樣本全部複製一份,再將複製的樣本隨機加上一小條線作為有缺陷的異常樣本,然後再重新學習並度量距離,此次明顯可以偵測出異常,若再透過grad-CAM可視化工具則更容易看出異常的反應熱區。不過文末也有提出一些失敗的案例並點出並非所有類型的影像都適用這種方式。想深入了解的人,作者亦有也出程式碼[5],供大家測試。

為了改善這個問題,日本shinmura0 [6]提出了加入截切一小塊正常影像原地旋轉一個小角度來產生異常影像,加上原先的隨機線異常影像,配合AdaCos(一種改良餘弦夾角的算法)距離量測方法。結果得到不錯的異常偵測能力,在grad-CAMeo可視化工具下更能明顯看出成效。如Fig. 6所示。不過這樣補強仍無法滿足所有的需求,仍有待加強。更多實驗結果可參考作者給出的程式碼[7]。

Fig. 6 深度度量學習之異常偵測結果,上列為原始影像,下列為經Grad-CAM可視化異常熱區結果。[6](點擊圖放大)

小結


此次介紹的「深度度量學習(Deep Metric Learning)」和先前介紹的監督式學習的語義分割U-Net異常偵測能力比較,雖然精確性及適用性略差一些,但整體計算效能、不用重新訓練模型及僅需小樣本數量訓練方面則勝過許多。對於不同的資料集形態目前沒有一定的資料距離量測方式,亦沒有完全適用的損失函數。雖然建置初期仍需部份人力介入選擇量測方式及損失函數,但訓練完成後不需因新的異常產生就要重新訓練原先的模型,這算是較有利基的一部份。至於究竟要採用何種方式進行異常偵測,就留待各位自由發揮了。

*本文同步發行於歐尼克斯實境互動工作室部落格(https://omnixri.blogspot.com)及AI HUB(https://aihub.org.tw),歡迎連結至AI HUB網站【社群互動】下【AI技術交流區(https://platform.aihub.com.tw/specialist)】瀏覽更多精采文章*

參考文獻


[1] Mahmut KAYA et al., "Deep Metric Learning: A Survey"
https://www.mdpi.com/2073-8994/11/9/1066

[2] MVTec Anomaly Detection Dataset (MVTec AD)
https://www.mvtec.com/company/research/datasets/mvtec-ad/

[3] Paul Bergmann et al., "MVTec AD — A Comprehensive Real-World Dataset for Unsupervised Anomaly Detection"
https://www.mvtec.com/fileadmin/Redaktion/mvtec.com/company/research/mvtec_ad.pdf

[4] daisukelab, "Spotting Defects! — Deep Metric Learning Solution For MVTec Anomaly Detection Dataset"
https://medium.com/analytics-vidhya/spotting-defects-deep-metric-learning-solution-for-mvtec-anomaly-detection-dataset-c77691beb1eb

[5] daisukelab/metric_learning (Github)
https://github.com/daisukelab/metric_learning/tree/master/MVTecAD

[6] shinmura0, "【異常検知】深層距離学習で画像の歪みを検出する"
https://qiita.com/shinmura0/items/54585fccbb20cb2879fd

[7] shinmura0/AutoEncoder_vs_MetricLearning (Github)
https://github.com/shinmura0/AutoEncoder_vs_MetricLearning/blob/master/AnomalyDetection_self_supervised.ipynb

延伸閱讀


[A] 許哲豪,"利用深度學習技術讓裂縫無所遁形"
http://omnixri.blogspot.com/2020/11/ai-hub_23.html

[B] 許哲豪,"看電腦視覺如何助力智能裂縫偵測技術發展"
http://omnixri.blogspot.com/2020/11/ai-hub.html

[C] 許哲豪,"導入AI異常偵測技術讓傳產也能邁向智慧製造"
http://omnixri.blogspot.com/2020/06/ai-hubai.html

[D] 許哲豪,"導入AI表面瑕疵異常偵測提升智慧製造品質"
http://omnixri.blogspot.com/2020/07/ai-hubai.html

[E] 許哲豪,"如何建立精準標註的電腦視覺資料集"
http://omnixri.blogspot.com/2020/10/ai-hub_16.html

[F] 許哲豪,"生成對抗網路不只能變臉也能成為異常偵測好幫手"
http://omnixri.blogspot.com/2020/08/ai-hub.html

[G] 許哲豪,"如何利用可視化工具揭開神經網路背後的祕密(上) "
http://omnixri.blogspot.com/2020/09/ai-hub.html

[H] 許哲豪,"如何利用可視化工具揭開神經網路背後的祕密(下) "
http://omnixri.blogspot.com/2020/09/ai-hub_20.html





沒有留言:

張貼留言

【頂置】簡報、源碼、系列文快速連結區

常有人反應用手機瀏覽本部落格時常要捲很多頁才能找到系列發文、開源專案、課程及活動簡報,為了方便大家快速查詢,特整理連結如下,敬請參考! Edge AI Taiwan 邊緣智能交流區 全像顯示與互動交流區 台科大(NTUST) 人工智慧與邊緣運算實務 開南大學...