重磅干貨,第一時間送達(dá) 混凝土建筑裂縫 表面裂縫檢測是監(jiān)測混凝土結(jié)構(gòu)健康的一項重要任務(wù)。如果裂紋發(fā)展并繼續(xù)擴(kuò)展,它們會減少有效承載表面積,并且隨著時間的推移會導(dǎo)致結(jié)構(gòu)失效。裂紋檢測的人工過程費時費力,且受檢驗人員主觀判斷的影響。在高層建筑和橋梁的情況下,手動檢查也可能難以執(zhí)行。在這篇文章中,我們使用深度學(xué)習(xí)來構(gòu)建一個簡單但非常準(zhǔn)確的裂縫檢測模型。此外,我們在現(xiàn)實世界的數(shù)據(jù)上測試了模型,發(fā)現(xiàn)該模型在檢測混凝土和非混凝土結(jié)構(gòu)示例道路中的表面裂縫方面是準(zhǔn)確的。該代碼在Github上的鏈接上開源。 在這篇文章中,我們使用了公開可用的混凝土裂縫圖像數(shù)據(jù)集,該數(shù)據(jù)集由 20,000 張有裂縫的混凝土結(jié)構(gòu)圖像和 20,000 張無裂縫的圖像組成。該數(shù)據(jù)集由 458 張高分辨率圖像(4032x3024 像素)生成。數(shù)據(jù)集中的每個圖像都是 227 x 227 像素的 RGB 圖像。部分有裂紋和無裂紋的示例圖如下所示: 帶有裂紋的示例圖像 可以看出,數(shù)據(jù)集有各種各樣的圖像——不同顏色、不同強(qiáng)度和形狀的裂縫。 對于這個問題,讓我們在 Pytorch 中構(gòu)建一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)。由于我們的圖像數(shù)量有限,因此我們將使用預(yù)訓(xùn)練的網(wǎng)絡(luò)作為起點,并使用圖像增強(qiáng)功能來進(jìn)一步提高準(zhǔn)確性。圖像增強(qiáng)使我們能夠進(jìn)行諸如垂直和水平翻轉(zhuǎn)、旋轉(zhuǎn)和亮度變化之類的轉(zhuǎn)換,從而顯著增加樣本并幫助模型泛化。 對于以下步驟,請參考我在 Github 上的代碼。 將輸入數(shù)據(jù)混洗并拆分為 Train 和 Val 下載的數(shù)據(jù)將有 2 個文件夾,一個用于正樣本文件夾,一個用于負(fù)樣本文件夾,我們需要將其拆分為 train 和 val。下面的代碼片段將為 train 和 val 創(chuàng)建新文件夾,并將 85% 的數(shù)據(jù)隨機(jī)混洗到 train 中,并將其余數(shù)據(jù)隨機(jī)放入 val 中。 拆分為 train 和 val 應(yīng)用轉(zhuǎn)換 Pytorch 可以輕松應(yīng)用數(shù)據(jù)轉(zhuǎn)換,這可以增強(qiáng)訓(xùn)練數(shù)據(jù)并幫助模型提高泛化性。我們選擇的轉(zhuǎn)換是隨機(jī)旋轉(zhuǎn)、隨機(jī)水平和垂直翻轉(zhuǎn)以及隨機(jī)顏色抖動。此外,每個通道除以 255,然后歸一化,這有助于神經(jīng)網(wǎng)絡(luò)訓(xùn)練。 轉(zhuǎn)變 預(yù)訓(xùn)練模型 我們使用在 ImageNet 上經(jīng)過預(yù)訓(xùn)練的 Resnet 50 模型來快速啟動模型。如下所示,ResNet50 模型由 5 個階段組成,每個階段都有一個卷積和 Identity 塊。每個卷積塊有 3 個卷積層,每個標(biāo)識塊也有 3 個卷積層。ResNet-50 有超過 2300 萬個可訓(xùn)練參數(shù)。我們將凍結(jié)所有這些權(quán)重和 2 個全連接的層——第一層在輸出中有 128 個神經(jīng)元,第二層在輸出中有 2 個神經(jīng)元,這是最終的預(yù)測。 ResNet 模型層 如模型摘要所示,該模型有 2300 萬個不可訓(xùn)練參數(shù)和 262K 個可訓(xùn)練參數(shù) 模型參數(shù) 我們使用 Adam 作為優(yōu)化程序并訓(xùn)練模型 6 個 epoch。 我們用遷移學(xué)習(xí)訓(xùn)練,然后在訓(xùn)練數(shù)據(jù)集模型,同時在驗證集上測量損失和準(zhǔn)確性。如下面的損失和準(zhǔn)確率數(shù)字所示,模型訓(xùn)練的非常快。在第 1 個 epoch 之后,訓(xùn)練準(zhǔn)確率為 87%,驗證準(zhǔn)確率為 97%!這就是遷移學(xué)習(xí)的力量,我們的最終模型的驗證準(zhǔn)確率為 98.4%。 模型訓(xùn)練統(tǒng)計 在真實圖像上測試模型 現(xiàn)在是最有趣的部分。是的,該模型適用于驗證數(shù)據(jù),但我們希望確保它也適用于互聯(lián)網(wǎng)上看不見的數(shù)據(jù)。為了測試這一點,我們隨機(jī)拍攝了混凝土開裂結(jié)構(gòu)和路面裂縫的圖像,這些圖像比我們的訓(xùn)練圖像大得多。請記住,該模型是在 227,227 像素的切片上訓(xùn)練的。我們現(xiàn)在將輸入圖像分成小塊并對其進(jìn)行預(yù)測。如果模型預(yù)測有裂紋,我們將補(bǔ)丁涂成紅色(有裂紋),否則將補(bǔ)丁涂成綠色。以下代碼片段將執(zhí)行此操作。 ![]() 該模型在從未見過的圖像上效果非常好。如下圖所示,該模型能夠通過處理圖像上的 100 多個補(bǔ)丁來檢測混凝土中很長的裂縫。 ![]() 此外,也在道路裂縫上測試了該模型。這個模型沒有在路面數(shù)據(jù)集上訓(xùn)練過,但在識別道路裂縫方面也做得很好!
在此項目的 github 鏈接上共享了更多現(xiàn)實世界圖像以及有關(guān)它們的模型預(yù)測。 這篇文章展示了使用深度學(xué)習(xí)和開源數(shù)據(jù)構(gòu)建現(xiàn)實世界的應(yīng)用程序變得多么容易。整個工作花了半天時間,輸出了一個實用的解決方案。我希望小伙伴們自己嘗試這個代碼,并在更多現(xiàn)實世界的圖像上進(jìn)行測試。
Github代碼連接:
|
|
來自: 小白學(xué)視覺 > 《待分類》