利用深度學習技術讓裂縫無所遁形

by omnixri

2020-11-16 04:08:32729 瀏覽次數


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


在上一篇「看電腦視覺如何助力智能裂縫偵測技術發展」[1]中已初步對「裂縫偵測」中常見的「裂縫型態」、「裂縫標註方式」、「裂縫偵測算法及模型」及「裂縫公開資料集」等方面作了初步介紹。本文將針對其中「裂縫偵測算法及模型」的「深度學習模型」類偵測方法再作進一步說明,而以傳統「影像處理算法」的裂縫偵測技術就請參考上一篇文章 [1]介紹,這裡就不再贅述。


以深度學習模型作為「裂縫偵測」大致上可以分成偵測有無裂縫的「影像分類(Image Classification)」,找出裂縫所在位置邊界框的「物件偵測(Object Detection)」 及精準標示出屬於裂縫位置像素的「語義分割(Semantic Segmentation)」。不同的算法所需算力、偵測能力、適合裂縫類型及輸出應用各有不同,沒有唯一解法,以下就舉幾個例子來說明不同概念下的作法及其優缺點。


【影像分類式裂縫偵測】


用深度學習來做「影像分類」是最為直覺的做法,直接辨識影像中是否有裂縫即可,但實務上若只對單張影像進行有無裂縫分類則似乎太過粗糙。近年來隨著數位攝影機的解析度越來越高,因此在裂縫檢測應用上可以滿足一口氣看到較大範圍又可看清楚較細及較淺的裂縫。不過一般深度學習的影像分類模型通常只支援中小尺寸的影像輸入,若將大尺寸(高解析度)影像調整到影像分類模型對應的中小尺寸影像時,則很多細部特徵就會消失不見,不利於辨識。於是直接將大尺寸影像分割成許多非重疊且符合影像分類模型的小尺寸影像再進行影像分類,就成了最簡單的做法。這樣的做法不僅解決了判定有無裂縫太過粗糙的問題,同時保有對較不明顯裂縫的偵測能力。


Priya Toronto在其部落格上有分享一篇關於混凝土表面裂縫檢測的文章[2],其主要作法就是將高解析度(4032 x 3024像素)的原始影像分拆成許多小尺寸(227 x 277像素)影像區塊再對其進行影像分類。辨識完成後再以綠色(無裂縫)及紅色(有裂縫)表示結果,如Fig. 1所示。為了增加分類能力,這裡藉助了一個混凝土裂縫公開資料集[3],其中有裂縫及無裂縫各有20,000張227 x 227像素影像。接著利用ResNet 50的影像分類模型加上ImageNet預訓練參數(權重)進行訓練,最後得到約97%的驗證精度。對於沒見過的實際場景,如一般水泥牆面、柏油路面裂縫偵測亦得到不錯的效果。此外作者有給出相關程式碼,可以參考[2]說明。


Fig. 1 影像分類型裂縫檢測。(a)為原始道路影像,藍色虛線為區塊分割線,(b)為影像分類結果,綠色為無裂縫區塊,紅色為有裂縫區塊。[2] (OmniXRI Nov. 2020整理製作)


以「影像分類」方式作為裂縫偵測的優點是計算速度快,但缺點是當裂縫位置處於二個影像區塊交界處,或只有很小部份在影像區塊中,則不易正確分類。另外圖面最右側及下方可能會因為無法整除遇到分割區塊尺寸不完整的問題,此時須要做適當處理(如補足、捨棄、移位取像等)使其達到相同尺寸,以免造成辨識錯誤率提高。若想提升辨識的細緻度,亦可選用輸入影像尺寸更小的模型來進行影像分類。


【物件偵測式裂縫偵測】


從上面的例子來看,檢測到的裂縫會受限於影像區塊分割的位置,使得裂縫偵測到的位置不一定能落在區塊的中央,於是便有人利用深度學習的「物件偵測」模型來偵測裂縫。眾所皆知「物件偵測」是深度學習領域中的研究熱點,提出的模型(算法)不勝枚舉,如R-CNN, Fast RCNN, Faster RCNN, SSD, YOLO, Mask RCNN等,這裡就不一一說明其模型結構。


一般物件通常是獨立存在,所以很容易標示出「邊界框(Bounding Box)」,但面對裂縫這種又長又彎的連續邊緣及像閃電形狀有嚴重交錯的內容,實在很難區分邊界框的位置及大小。標注時勉強還可將長裂縫分拆成很多略微重疊小區塊,但經過推論後,常會因不同模型原理造成結果邊界框嚴重重疊甚至大框包小框完全重疊的問題發生,有時還有幾乎和圖片大小相同的超大邊界框出現,這樣就失去精準檢測出裂縫所在位置的意義,如Fig. 2所示。因此有時推論後還需要額外再加上邊界框融合(去除)重疊算法來凸顯正確裂縫位置。


Fig. 2 物件偵測型裂縫偵測,(a)原始牆面裂縫影像,(b)邊界框標註方式,(c)可能推論結果。(OmniXR Nov. 2020整理製作)


以「物件偵測」方式作為裂縫偵測的優點是可較精確找到裂縫正確位置且較不受背景影像干擾,但缺點是不容易找到較小面積的裂縫,且邊界框常會有重疊部份產生需要額外融合工作,不過這項缺點會隨不同應用不一定要融合。另外若應用上不只進行裂縫偵測,而是同時需要偵測很多不同項目,則深度學習的「物件偵測」技術還是很有優勢的。以一般道路巡檢[4]來舉例,可能同時要偵測不同問題,如線性裂縫(縱向/橫向的輪痕或施工接合)、龜裂、人孔破損/凸起/高低差、車轍、路面凸起/凹陷/高低差、白線模糊/剝落、坑洞等,如Fig. 3所示,則此時搭配運算效能較好的Yolo V3/V4, SSD等模型,就能做到即時偵測的效果。


Fig. 3 道路巡檢系統範例。(a)(b)(c)鱷魚裂縫,(d) 縱向裂縫輪痕,(e) 縱向裂縫施工接合,(f) 橫向裂縫輪痕,(g)(h)人孔高差,(i)坑洞。[4] (OmniXRI Nov. 2020整理製作)


【語義分割式裂縫偵測】


以上兩種作法只能以較概略的找出裂縫位置,較不在意裂縫本身的粗細、長度、面積、紋路、形狀等問題,若要檢測結果精準到像素等級時,則無法滿足,需要使用到「語義分割」技術,常用的模型包含FCN, U-Net, SPP-Net, Seg-Net, DeconvNet, DeepLab V1/V2/V3, Mask RCNN等。更多關於深度學習語義分割模型介紹可參考[5]。


目前在表面瑕疵、裂縫檢測等領域經常會使用U-Net或其變形[6][7][8],如Fig. 4所示。其模型大致分左右半邊,因形狀類似英文大寫字母U因而得名。模型左半邊主要作卷積及最大池化(Maximum Pooling)(或稱下取樣(Down Sampling)),每次經2x2最大池化後將影像大小長寬各縮一半,同時將特徵圖(Feature Map)數量加倍,以取得不同尺度的特徵,如此反覆數次後再反向操作進行上取樣(Up Convolution)將特徵圖長寬放大兩倍,同時加入同一層左半邊特徵圖的剪截(Copy and Crop),再進行卷積,如此反覆數次得到相同層數,最後在最上層卷積後,使用n個(輸出類別,n通常為2)1x1卷積層得到最後像素級影像分割結果。這樣的作法整體來說相當於把重要特徵壓縮,並參考壓縮內容進行還原,以得到較精細的輸出結果,其細節表現相較全連結網路(Full Connected Network, FCN)來得好。

Fig. 4 語義分割型裂縫偵測,(a)標準U-Net[6],(b)變型U-Net[7],(c)CrackU-Net[8]。(OmniXRI Nov. 2020整理製作)


一般語義分割最麻煩的就是準備訓練用已標註資料集,此類標註多半為一張和原影像大小相同尺寸的黑白影像(裂縫為白點,其餘為黑點)或可稱為遮罩圖(Mask)。標註時可採用傳統影像處理方式提取較精細的遮罩圖再經由人工修整而得,若裂縫較細時可直接以不同尺寸筆刷描繪裂縫,若裂縫較粗時則可以用多個封閉多邊型方式來進行裂縫區域標註,得到一張略微粗糙的標註結果。通常透過筆刷或多邊形作法所需人工標註時間非常冗長,成本很高。另外實務上還常會遇到裂縫影像不易取得的問題,此時可透過一般資料擴增(Data Augmentation)(如影像平移、縮放、旋轉、亮對、對比等)來增加資料集,甚至利用生成對抗網路(Generative Adversarial Network, GAN)幫忙生成一些額外的資料才足以訓練模型。


Fig. 5 裂縫偵測結果比較,(a)原始地磚影像,(b)傳統影像處理結果圖,(d)U-Net推論結果覆疊圖。[6] (OmniXRI Nov. 2020整理製作)


以「語義分割」技術作為裂縫偵測的優點是可以精確得到像素級的裂縫資訊,可用於精準分析裂縫位置、粗細、長度、拓樸形狀,甚至經過累積統計還可分析出裂縫熱力圖(Heat Map)找出容易發生裂縫的位置,進而改善生產線製程。但缺點就是資料集標註成本(時間、複雜度、領域知識等)很高,模型訓練時間極長,推論計算量極大,因此是否需要這麼精確的檢測結果就得視需求而定。


小結


不管在電子、機械、建築等各個領域,「裂縫偵測」是確保生產品質及結構安全的重要分析手段,只需利用一般可見光影像進行視覺分析就能得到低成本、高效率的檢測設備。透過現有人工智慧深度學習的「影像分類」、「物件偵測」或「語義分割」等技術便可快速準確找出問題,相信未來隨著更多模型及優化技術的提升就能使得更高解析度、更大面積、更複雜背景中的裂縫更輕易地被偵測出來,如此便能得到更高品質的設備了。


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


參考文獻


[1] 許哲豪,"看電腦視覺如何助力智能裂縫偵測技術發展" https://aihub.org.tw/platform/specialist/article/bd2246b2-1a98-11eb-a648-0242ac120002


[2] Priya Toronto, “Detection of Surface Cracks in Concrete Structures using Deep Learning” https://deeplearninganalytics.org/detection-of-surface-cracks-in-concrete-structures-using-deep-learning/


[3] Concrete Crack Images for Classification Dataset https://data.mendeley.com/datasets/5y9wdsg2zt/2


[4] Tseng Tony, “道路巡檢系統 org road demo” https://youtu.be/zge_uMvWlJs


[5] Irem Ulku et al., "A Survey on Deep Learning-based Architectures for Semantic Segmentation on 2D images" https://arxiv.org/abs/1912.10230


[6] Arthur Flôr, "Surface Crack Detection" https://arthurflor23.medium.com/surface-crack-detection-92fb27bf0f18


[7] Stephen L. H. Lau et al., "Automated Pavement Crack Segmentation Using U-Net-based Convolutional Neural Network" https://arxiv.org/abs/2001.01912


[8] Ju Huyan et al., "CrackU-net: A novel deep convolutional neural network for pixelwise pavement crack detection" https://www.researchgate.net/publication/340013585


延伸閱讀


[A] 許哲豪,"導入AI表面瑕疵異常偵測提升智慧製造品質" https://aihub.org.tw/platform/specialist/article/efc53498-b6f3-11ea-97e2-0242ac120002


[B] 許哲豪,"如何建立精準標註的電腦視覺資料集" https://aihub.org.tw/platform/specialist/article/24ed20e0-0942-11eb-a48e-0242ac120002


[C] 許哲豪,”生成對抗網路不只能變臉也能成為異常偵測好幫手” https://aihub.org.tw/platform/specialist/article/d131b580-cd8a-11ea-b749-0242ac120002