圖/文 歐尼克斯實境互動工作室 許哲豪 2020/10/29
在先前文章「導入AI表面瑕疵異常偵測提升智慧製造品質」[1]中曾介紹表面瑕疵偵測的相關技術,其中包含點、線、面等類型瑕疵,這次就再把重點放到「線型瑕疵」中的「裂縫偵測(Crack Detection)」這個主題,繼續和大家做進一步分享。
在工業、機械、建築、電子領域中,當材料在加工或組裝過程受到不當外力(如夾持、撞擊、剪力、振動)時,狀況嚴重的可能會產生結構性損壞及外表破損問題,輕則外型仍保持良好,但表面已經產生肉眼可見的裂縫。如果是一般中、小型電子或機械零件產生裂縫尚可直接淘汰,但若是大型機械結構、建物、橋樑、牆壁、地面則需要進行適當補強,不然可能會造成人身安全疑慮。
常見裂縫偵測方式包括目視(或電腦視覺)、壓力或洩漏、紅外線熱感影像、超音波、渦電流、雷射掃描測距及其它各種非破壞性物理量測設備。本文將著重在一般可見光(彩色或灰階)影像裂縫分析方式,而其它物理量轉成的數位影像由於特性差異頗大,暫不列入討論範圍。
另外「刮痕」也是常見且類似較細的「裂縫」,而二者的差異在於前者通常為直線段、痕跡深度、顏色較淺,有時肉眼還需於特定角度反光下才能看到,這些多半是美觀問題,較無結構安全性問題。而真正的裂縫是指材料已遭到破壞,通常會在目視時產生明顯、顏色較深的內容,而其痕跡則較不規則,粗細也不一,經常會產生許多分叉。由於兩者偵測方式有滿大的差異,故本文僅討論「裂縫偵測」問題。
另外由於裂縫偵測常會伴隨不同材質產生不同的裂縫型態問題,加上不同的背景雜訊干擾,亦會影響相關算法及模型,故很難用一種算法或模型完全克服。為更清楚說明,以下分別就常見的「裂縫型態」、「裂縫標註方式」、「裂縫偵測算法及模型」及「裂縫公開資料集」等方面作進一步說明。
裂縫型態
由於材質特性(如混合物、硬度、延展性等)不同,因此產生裂縫的型態也會有所不同。如Fig. 1所示,分別為金屬鋼材、轉子(一種金屬氧化物粉末燒結材料,俗稱磁蕊,易碎)、磁磚表面、水泥牆面、混凝土地面、柏油路面等不同裂縫樣貌。從圖中可看出其裂縫有不同粗細、長短、深淺、分岐,而其背景有些很乾淨(素色、無雜紋),有些則有色彩、特殊紋理(圖案)、光照陰影、反光、顆粒碎片、髒污、雜物遮擋等因素干擾。這對於後續採用何種算法來精準偵測裂縫所在位置會有很大影響。
Fig. 1 各種裂縫型態,(a) 金屬鋼材,(b) 轉子表面 ,(c) 磁磚表面,(d)水泥牆面,(e)混凝土地面,(f) 柏油路面。(OmniXRI Oct. 2020整理繪製)(點擊圖放大)
裂縫標註方式
目前「裂縫偵測」大致分為使用「傳統影像處理算法」及應用人工智慧「深度學習之監督式學習模型」兩大類。前者不需建立資料集即可計算,而後者又可分成「影像分類」及「物件偵測」及「語義分割」等不同型式,因此需要建立不同型式標註資料才能進行後續訓練工作。
通常為了更清楚看到較細及不明顯的裂縫,在取像時會使用高解析度(800萬以上像素)相機進行拍攝,或者再搭配小距離移動取得多張影像進行拼貼,最後得到大面積高清晰的待檢測物件的影像。但不幸的是,過高的解析度會造成運算量暴增,特徵型態改變,反而不易偵測。所以通常會將原始影像進行重新裁切成多張中等尺寸影像,以符合對應模型所需輸入尺寸,方便進行分析。
一般單張影像若使用「影像分類」方式直接判斷是否為裂縫影像,略嫌太過粗糙,通常會把影像分成很多很小的區域再進行分類,最後再將被分為裂縫區域聚合在一起。而當採用「物件偵測」方式時,則會找出不同尺寸裂縫的邊界框。不過一般深度學習的物件偵測模型都會有輸入影像尺寸限制,若直接將高解析度影像直接縮小進行辨識時,則可能會忽略掉很多較不明顯和較小尺寸的裂縫,因此通常會將大尺寸影像先裁切成數塊到數十塊中尺寸影像後,再進行物件偵測工作。由於以上兩者都是由邊界框方式呈現結果,所以只能提取出裂縫概略位置,無法精確計算出裂縫粗細、長度、面積等參數。而採用像素級影像分類的「語義分割」方式,則偵測結果就能精確把裂縫所在位置、邊界清楚表示出來。有時裂縫多半屬於較細的線段,則標註時亦可採用多個折線段(Polylines)組合出來,代替複雜的影像分割方式。
為了達到上述不同目的,則需採用不同型式標註方式,如Fig. 2所示,有標籤式(Label)、物件邊界框式(Bounding Box)及像素級遮罩影像式(Mask Image)。從標註速度上來看,簡單的影像分類一秒也許可標註5~10張,而物件邊界框大約1~3秒可以標註一個,但遇到影像分割類標註時,則花費5~10分鐘甚至更長時間,來完整標註一張精細的遮罩影像也是很常見的。更多更完整的資料標註方式、相關格式及標註工具可參考先前文章「如何建立精準標註的電腦視覺資料集」[2]。
裂縫偵測算法及模型
【傳統影像處理算法】
利用電腦視覺方式進行「裂縫偵測」由來已久,早期多半採用傳統「影像處理」方式進行偵測,其主要手段包括:
*二值化(Binary):如門檻值或閾值(Threshold)分割、自適應二值化(Adaptive Threshold)、大津法(Otsu)等。
*影像強化(Enhance):如亮度/對比調整、伽瑪校正(Gamma Correction)、直方圖等化(Histogram Equlization)等。
*邊緣偵測(Edge Detction):如索貝爾(Sobel)、拉普拉斯法(Laplacian)、CANNY、雙邊濾波(Bilateral Filter)等。
*形態學(Morphology):如侵蝕(Erosion)、膨脹(Dilation)、斷開(Open)、閉合(Close)等。
*骨架提取(Skeleton Extraction):如細線化(Thinning)等。
*方向濾波(Direction Filter):如小波(Wavelet)、Gabor濾波、方向梯度直方圖(Histogram of Gradient, HoG)等。
*影像分割(Image Segmentation):如分水嶺(Watershed)、超像素(Superpixel)、K-Means, Mean Shift, Grabcut等。
這些傳統影像處理方式的優點是不需先行建模及訓練就能直接提取出像素級精度的裂縫所在位置,可精準計算裂縫粗細、長度、面積。但其缺點是需要大量先驗知識及嚐試各種不同排列組合及順序,且算法很容易受取像視野、傾角、光照、污染、遮蔽、雜訊、背景圖案等問題影響產生很多非裂縫區雜訊,少部份算法還需人員介入調整參數,因此僅適用背景較為單純的裂縫提取。
如Fig. 3所示,Arthur Flôr給出了一組影像處理流程[3]來增強裂縫部份(含磁磚拼貼接縫),包括直方圖等化、3*3高斯模糊、亮度及對比調整、影像反相、5*5侵蝕和膨脹,最後再用大津法(Otsu)進行二值化分割。從結果影像來看,若只是單純以門檻值進行二值化(Fig. 3b),則會受光影及油污(暗黃色區域)影響,且較細的裂縫都會消失不見。當經預處理程序後(Fig. 3c)則可清楚保留裂縫,且相關雜訊也減少許多。
更多以影像處理方式來提取裂縫的方法,可參考Arun Mohan等人的論文[4],其中包括有六大類型影像及60多種影像處理提取各種裂縫的方法。
【深度學習模型】
近年來隨著人工智慧深度學習技術的快速發展,許多以往不易克服的背景雜訊干擾問題,現在都可以透過各種模型及大量參數進行學習而得到改善。其優點是不需太多算法、流程排列組合及先驗知識,一組模型就能應付,但缺點就是需要大量高品質已標註資料集、大規模長時間的模型參數訓練及較高價格的推論設備和較低速度的推論。一般來說,若只需判定有無裂縫則使用「影像分類」技術即可。進一步想知道裂縫大致位置及尺寸(長、寬)時,則「物件偵測」技術就夠用了。當需要精確判定到裂縫粗細、長度、面積、拓撲等像素等級資訊,那就需要動用到「語義分割」技術。
上述三類方式皆屬於監督式學習領域範圍,所以需要標註大量資料集才能使模型訓練得到較好的結果,而標註方式如Fig. 2所示。但不幸的是,這類裂縫影像通常都很不容易取得,所以有時還得搭配資料擴增(Data Augmentation)或生成對抗網路(Generative Adversarial Network, GAN)幫忙生成一些額外的資料才足以訓練模型。
目前對於較乾淨背景的裂縫偵測,從相關論文數量上來看,似乎使用傳統影像處理方法居多,且效果較佳。而像水泥牆(柱)面、混凝土地板、柏油路面等很多砂石顆粒組成或者裂縫背景很混亂的情境,則深度學習模型更有優勢。所以究竟採用何種方式進行裂縫偵測,則需依辨識速度、精度及是否需精確判定裂縫資訊來決定。以下不針對各種常見深度學習模型進行說明,僅列出縮寫名稱供大家參考,若想更進一步了解,可以用”Crack Detection” “Deep Learning”或模型名稱一起搜尋。另外這裡還有幾篇論文[5][6][7]整理了一些相關技術,提供大家參考。
*影像分類(Image Classification):如VGG, Inception V3, ResNet, SqueezeNet等。
*物件偵測(Object Detection):如R-CNN, Fast RCNN, SSD, YOLO等。
*語義分割(Semantic Segmentation):如FCN, U-Net, SegNet, Deeplab, Mask RCNN等。
如Fig. 4所示,U-Net (Fig. 4a)為一種類似自動編碼器(Auto Encoder, AE)的技術,同時在還原(右側上採樣)時亦參考降維(左方下採樣)結果,使得模型在影像分割能力更加強健。所以從結果圖(Fig. 4d)中可看出,其效果優於一般影像處理組合(Fig. 4c),不僅雜訊較少,同時把非裂縫(磁磚拼貼接縫)也去除掉,接近人類認知的裂縫,而不是單純色彩上的強烈變化的邊緣。
Fig. 4傳統影像處理組合和深度學習U-Net裂縫偵測比較結果,(a)U-Net模型結構圖,(b)原始影像,(c)經影像預處理結果圖,(d)經U-Net推論後結果圖。(OmniXRI Oct. 2020整理繪製)(點擊圖放大)
裂縫偵測公開資料集
由於一般裂縫影像不易取得,為方便大家測試相關算法,可參考下列公開資料集,依「影像分類」、「物件偵測」及「語義分割」等不同偵測方式選擇適當資料集,或可自行重新標註相關資料集。
[A] Kaggle - Concrete surface sample images for Surface Crack Detection
混凝土表面裂縫資料集,由458張高解析度(4,032*3,024)影像分拆成227*227大小彩色影像,合計有裂縫和無裂縫各20,000張影像。標註採「影像分類」方式,只分成有裂縫及無裂縫影像。
https://www.kaggle.com/arunrk7/surface-crack-detection
[B] 斯洛維尼亞盧布爾雅那計算機與信息科學學院視覺辨識系統實驗室(VCSL) Kolektor Surface-Defect Dataset
轉子表面瑕疵(裂縫)資料集,共50個實體物件,每個物件取8張影像,合計399張影像,52張有瑕疵。標註採像素級「語義分割」方式,每張影像會搭配1張遮罩(Mask)圖,圖像尺寸和原影像相同,將有裂縫處標示成白色像素,其它為黑色像素。
https://www.vicos.si/Downloads/KolektorSDD
[C] Kaggle - Severstal: Steel Defect Detection
鋼板表面瑕疵資料集,四種瑕疵包含,訓練集共12,538張,測試集5,476張。標註採像素級「語義分割」方式,每張影像會搭配1張遮罩(Mask)圖,圖像尺寸和原影像相同,將有裂縫處標示成白色像素,其它為黑色像素。標註採像素級「語義分割」方式。
https://www.kaggle.com/c/severstal-steel-defect-detection
[D] Github - Pavement crack detection: dataset and model
道路裂縫資料集Crack500,其中有500張2,000*1,500像素灰階影像,每張分拆為16張不重疊區域,只保留裂縫有超過1,000像素的影像,最後得到1,896張測試影像,348張驗證影像及1,124 張影像。標註採像素級「語義分割」方式。而其它三種可自行參考下列連結。
https://github.com/fyangneil/pavement-crack-detection
[E] Github - Crack-Detection-and-Segmentation-Dataset-for-UAV-Inspection
道路、橋樑、牆面裂縫資料集,包含多種類型資料集,標註採像素級「語義分割」方式。https://github.com/KangchengLiu/Crack-Detection-and-Segmentation-Dataset-for-UAV-Inspection
[F] Surface Crack Detection
混凝土、磁磚裂縫及細胞膜資料集,測試+訓練三種資料集分別有30+30, 67+100, 30+30張影像,標註採像素級「語義分割」方式。
https://github.com/arthurflor23/surface-crack-detection
[G] Github更多裂縫資料集
https://github.com/topics/crack-detection
小結
不論是樑柱、地板、牆面、道路、金屬板材甚至是電子零件表面只要出現裂縫就表示結構上已出現嚴重瑕疵,需進一步找出問題源頭及進行汰換、補強工作,才能確保安全,因此透過自動化電腦視覺進行智能「裂縫偵測」是一項不可或缺的技術。因此依據不同材質選擇「傳統影像處理」或「深度學習算法」甚至是混合型算法來進行「裂縫偵測」,就能得到更精確的檢測結果,相信未來這項技術就能幫助人們省下更多時間來確保產品結構及生命安全。
*本文同步發行於歐尼克斯實境互動工作室部落格(https://omnixri.blogspot.com)及AI HUB(https://aihub.org.tw),歡迎連結至AI HUB網站【社群互動】下【AI技術交流區(https://platform.aihub.com.tw/specialist)】瀏覽更多精采文章*
參考文獻
[1] 許哲豪,"導入AI表面瑕疵異常偵測提升智慧製造品質"
https://omnixri.blogspot.com/2020/07/ai-hubai.html
[2] 許哲豪,"如何建立精準標註的電腦視覺資料集"
https://omnixri.blogspot.com/2020/10/ai-hub_16.html
[3] Arthur Flôr, "Surface Crack Detection"
https://arthurflor23.medium.com/surface-crack-detection-92fb27bf0f18
[4] Arun Mohan et al., "Crack detection using image processing: A critical review and analysis"
https://www.sciencedirect.com/science/article/pii/S1110016817300236
[5] Saranya vijayan et al., "A Survey on Crack Detection Using Image Processing Techniques and Deep Learning Algorithms"
https://acadpubl.eu/jsi/2018-118-7-9/articles/8/29.pdf
[6] Swapnil Patil et al., "Automatic Road Crack Detection Techniques: A Review"
https://www.researchgate.net/publication/329364639
[7] Wenming Cao et al., "Review of Pavement Defect Detection Methods"https://ieeexplore.ieee.org/abstract/document/8960347
延伸閱讀
許哲豪,”生成對抗網路不只能變臉也能成為異常偵測好幫手”
https://omnixri.blogspot.com/2020/08/ai-hub.html
沒有留言:
張貼留言