各位同學,前面詳細講解了深度神經網路在地震去噪方向的精彩應用。實際上,神經網路除了在去噪領域效果明顯外,在地震的斷層識別上也逐步開始大顯身手了。
這次我們研究神經網路在斷層識別的應用,主要是參考了Augusto Cunha的論文《Seismic fault detection in real data using transfer learning from a convolutional neural network pre-trained with synthetic seismic data》。發表在了行業知名期刊《COMPUTERS & GEOSCIENCES》。
這位作者使用轉移學習技術來開發現有的分類器,並將其應用到其他地震資料中。論文的基本模型是一個卷積神經網路(CNN)訓練和調整的合成地震資料。作者完整的講解了斷層識別的流程,並與其它方法進行了對比。不管是定性還是定量的結果都比較好。
我根據作者分享的程式進行了簡化和改造,接來下給大家結合程式來講解一下地震斷層識別的全過程。
一、斷層資料準備我們準備了兩類資料。一是記錄地震剖面的CSV資料。二是記錄斷層位置的ascii資料。
那怎樣載入斷層並顯示出來的呢?這段程式碼顯示了整個載入過程。lines_pair_points這句透過巧妙的運算計算出了x,y座標對。draw.line這句根據不同的座標畫出了斷層線。
畫出的斷層圖效果是這樣的。
二、模型訓練1.訓練資料準備
訓練模型的第一步是準備好訓練集和訓練標籤。這裡的訓練集就是地震剖面的小塊。訓練標籤就是0或1的二值資料,即標識了對應的地震是斷層(為1)或非斷層(為0)。
程式是這樣寫的。這裡首先透過迴圈語句,根據斷層位置將整個剖面區分為patches_fault即斷層資料和patches_non_faul即非斷層資料。
然後生成了訓練集X即整個剖面,Y即標識對應的地層是斷層1還是非斷層0。
2.模型訓練
這裡的模型訓練方法和前面課程講過的模型訓練類似。有幾點要特別注意。主要包括最後的啟用函式用softmax,loss函式用binary_crossentropy。這樣設計的原因是學習的特徵0/1值比較簡單,所以用邏輯函式來學習就可以了。
三、斷層預測完成了模型學習後,就可以用最佳化的模型來進行地層剖面的斷層預測。
1.定性預測
最直觀的預測就是標識出斷層的位置。這裡的程式載入了訓練好的模型結構和權重引數,使用不同的模型進行斷層預測。
預測完之後的結果是這樣的,就是標識出不同的地震小塊是否為斷層。
最後載入預測的結果的程式是這樣的。透過迴圈語句將各小塊對應的斷層標識讀取出來,形成了mask二維矩陣,在地層剖面對應位置標識了斷層。
預測的結果就是這樣的。細的線是人工標識的正確斷層,紅色的線條是模型預測的斷層,感覺正確率不是太高呢。
2.定量預測
定量預測方法,是將模型預測結果與人工標識的結果相對比,計算準確率。
作者寫了一個metrics函式,將網路預測的結果與人工識別的結果相對比。計算出了準確率Accuracy,靈敏性Sensitivity,特異性Specificity,F1 Score,AUC等指標。
看看VGG的預測準確率,看起來未達到90%,看來效果不算太好。