使用深度學習檢測混凝土結(jié)構(gòu)中的表面裂縫
以下文章來源于小白學視覺 ,作者小白
混凝土建筑裂縫
介紹
表面裂縫檢測是監(jiān)測混凝土結(jié)構(gòu)健康的一項重要任務(wù)。如果裂紋發(fā)展并繼續(xù)擴展,它們會減少有效承載表面積,并且隨著時間的推移會導(dǎo)致結(jié)構(gòu)失效。裂紋檢測的人工過程費時費力,且受檢驗人員主觀判斷的影響。在高層建筑和橋梁的情況下,手動檢查也可能難以執(zhí)行。在這篇文章中,我們使用深度學習來構(gòu)建一個簡單但非常準確的裂縫檢測模型。此外,我們在現(xiàn)實世界的數(shù)據(jù)上測試了模型,發(fā)現(xiàn)該模型在檢測混凝土和非混凝土結(jié)構(gòu)示例道路中的表面裂縫方面是準確的。該代碼在Github上的鏈接上開源。
數(shù)據(jù)集
在這篇文章中,我們使用了公開可用的混凝土裂縫圖像數(shù)據(jù)集,該數(shù)據(jù)集由 20,000 張有裂縫的混凝土結(jié)構(gòu)圖像和 20,000 張無裂縫的圖像組成。該數(shù)據(jù)集由 458 張高分辨率圖像(4032x3024 像素)生成。數(shù)據(jù)集中的每個圖像都是 227 x 227 像素的 RGB 圖像。部分有裂紋和無裂紋的示例圖如下所示:
帶有裂紋的示例圖像
沒有裂紋的示例圖像
可以看出,數(shù)據(jù)集有各種各樣的圖像——不同顏色、不同強度和形狀的裂縫。
建立模型
對于這個問題,讓我們在 Pytorch 中構(gòu)建一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)。由于我們的圖像數(shù)量有限,因此我們將使用預(yù)訓練的網(wǎng)絡(luò)作為起點,并使用圖像增強功能來進一步提高準確性。圖像增強使我們能夠進行諸如垂直和水平翻轉(zhuǎn)、旋轉(zhuǎn)和亮度變化之類的轉(zhuǎn)換,從而顯著增加樣本并幫助模型泛化。
對于以下步驟,請參考我在 Github 上的代碼。
將輸入數(shù)據(jù)混洗并拆分為 Train 和 Val
下載的數(shù)據(jù)將有 2 個文件夾,一個用于正樣本文件夾,一個用于負樣本文件夾,我們需要將其拆分為 train 和 val。下面的代碼片段將為 train 和 val 創(chuàng)建新文件夾,并將 85% 的數(shù)據(jù)隨機混洗到 train 中,并將其余數(shù)據(jù)隨機放入 val 中。
拆分為 train 和 val
應(yīng)用轉(zhuǎn)換
Pytorch 可以輕松應(yīng)用數(shù)據(jù)轉(zhuǎn)換,這可以增強訓練數(shù)據(jù)并幫助模型提高泛化性。我們選擇的轉(zhuǎn)換是隨機旋轉(zhuǎn)、隨機水平和垂直翻轉(zhuǎn)以及隨機顏色抖動。此外,每個通道除以 255,然后歸一化,這有助于神經(jīng)網(wǎng)絡(luò)訓練。
轉(zhuǎn)變
預(yù)訓練模型
我們使用在 ImageNet 上經(jīng)過預(yù)訓練的 Resnet 50 模型來快速啟動模型。如下所示,ResNet50 模型由 5 個階段組成,每個階段都有一個卷積和 Identity 塊。每個卷積塊有 3 個卷積層,每個標識塊也有 3 個卷積層。ResNet-50 有超過 2300 萬個可訓練參數(shù)。我們將凍結(jié)所有這些權(quán)重和 2 個全連接的層——第一層在輸出中有 128 個神經(jīng)元,第二層在輸出中有 2 個神經(jīng)元,這是最終的預(yù)測。
ResNet50 模型
ResNet 模型層
如模型摘要所示,該模型有 2300 萬個不可訓練參數(shù)和 262K 個可訓練參數(shù)
模型參數(shù)
我們使用 Adam 作為優(yōu)化程序并訓練模型 6 個 epoch。
真實圖像上的模型訓練和預(yù)測
我們用遷移學習訓練,然后在訓練數(shù)據(jù)集模型,同時在驗證集上測量損失和準確性。如下面的損失和準確率數(shù)字所示,模型訓練的非???。在第 1 個 epoch 之后,訓練準確率為 87%,驗證準確率為 97%!這就是遷移學習的力量,我們的最終模型的驗證準確率為 98.4%。
模型訓練統(tǒng)計
在真實圖像上測試模型
現(xiàn)在是最有趣的部分。是的,該模型適用于驗證數(shù)據(jù),但我們希望確保它也適用于互聯(lián)網(wǎng)上看不見的數(shù)據(jù)。為了測試這一點,我們隨機拍攝了混凝土開裂結(jié)構(gòu)和路面裂縫的圖像,這些圖像比我們的訓練圖像大得多。請記住,該模型是在 227,227 像素的切片上訓練的。我們現(xiàn)在將輸入圖像分成小塊并對其進行預(yù)測。如果模型預(yù)測有裂紋,我們將補丁涂成紅色(有裂紋),否則將補丁涂成綠色。以下代碼片段將執(zhí)行此操作。
切片預(yù)測
該模型在從未見過的圖像上效果非常好。如下圖所示,該模型能夠通過處理圖像上的 100 多個補丁來檢測混凝土中很長的裂縫。
混凝土裂縫檢測。左原圖。右側(cè)紅色區(qū)域是有裂紋的預(yù)測,綠色區(qū)域是無裂紋的預(yù)測
此外,也在道路裂縫上測試了該模型。這個模型沒有在路面數(shù)據(jù)集上訓練過,但在識別道路裂縫方面也做得很好!
道路裂縫檢測。左原圖。右側(cè)紅色區(qū)域是有裂紋的預(yù)測,綠色區(qū)域是無裂紋的預(yù)測
在此項目的 github 鏈接上共享了更多現(xiàn)實世界圖像以及有關(guān)它們的模型預(yù)測。
結(jié)論
這篇文章展示了使用深度學習和開源數(shù)據(jù)構(gòu)建現(xiàn)實世界的應(yīng)用程序變得多么容易。整個工作花了半天時間,輸出了一個實用的解決方案。我希望小伙伴們自己嘗試這個代碼,并在更多現(xiàn)實世界的圖像上進行測試。
參考
2018 — ?zgenel, ?.F., G?nen? Sorgu?, A. “Performance Comparison of Pretrained Convolutional Neural Networks on Crack Detection in Buildings”, ISARC 2018, Berlin.
Good paper on importance of crack detection — https://www.hindawi.com/journals/ace/2018/3924120/
Good blog on Image Classification in Pytorch. Several of the code snippets used in the blog were from here.
Another good blog on Image Classification in Pytorch. Several of the code snippets used in the blog were from here.
Github代碼連接:
https://github.com/priya-dwivedi/Deep-Learning/tree/master/crack_detection
https://github.com/priya-dwivedi/Deep-Learning/blob/master/crack_detection/Crack%20Detection%20Model.ipynb
https://github.com/priya-dwivedi/Deep-Learning/tree/master/crack_detection/real_images
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。
風力發(fā)電機相關(guān)文章:風力發(fā)電機原理