基于跨区块恶劣条件的岩石薄片分析,加速地质工程一体化推进
基于跨區塊惡劣條件的巖石薄片分析,加速地質工程一體化推進
我是菜雞之3區SCI文學嘗試
開發者:馬赫 郵箱:mahepetroleum@163.com 通訊地址:北京市昌平區府學路18號中國石油大學(北京)
[1] He Ma, et al., 2022. Rock thin sections identification under harsh conditions across regions based on online transfer method[J] Computational Geosciences.
1. 概述
1.1 行業背景與痛點
2021年中國石油對外依存度達72%,作為戰略物資油氣資源的開發需要得到充分地保障。然而,近年來油氣開發的復雜程度日益加大,構建高效的工程實踐之路不可或缺?;诙鄬W科、多工程融合的地質工程一體化技術應運而生,在提高單井產能為核心的目標上,整體性地帶動全過程優化。作為地質工程一體化的基礎,地質分析是技術攻堅的排頭兵、項目推進的先行者,更是全鏈條的奠基石。我們需要研究這些石頭,其中目標區塊常常由于時間、技術和資金的制約難以獲得足夠的資料,因此對于大量的研究工作都造成不利條件。我們希望能通過其他地區的資料幫助目標區塊完成知識積累,這就意味著跨區塊的巖石薄片分析成了必須克服的障礙。
1.2 項目價值
我們提出了一種基于MaSE-ResNeXt的改進方法,利用神經網絡特征圖進行巖石特征分析的遷移學習。通過提出繼承性和實時在線遷移學習的解決方案,解決了新區域惡劣條件下的巖石薄片自動識別的問題,充分利用了多個區塊的地質數據。通過該研究彌補了以往地區在跨區域巖石薄片識別中無法有效繼承的空白,為新區塊的開發提供了動力。具體表現為:在大規模巖石薄片數據集上設計了針對性的紋理提取器,超過了過往研究的5%性能提升,驗證了模型的可靠性。進一步針對易混淆的巖石薄片進行靈敏度分析,討論了鮞粒結構特征圖的靈敏度問題,f1分數達到0.95,證明了跨區域轉移的預測穩定性。基于這些技術支撐,利用稀缺的地質數據對冷啟動問題進行實時在線遷移學習,訓練速度提高15倍,準確率提高了20%。
此外,我們還提出了新的巖石薄片紋理可視化方法,通過將不同卷積塊的特征圖進行可視化,給巖石的邊緣與區域注意力提供了新的視角。
2.實驗過程
2.1 數據準備與分析
由于不同地區的巖石孔隙結構與礦物成分受到地質因素而產生區域性的分布差異,為了避免單一數據集的偶然性導致研究結果出現偏差,以及更好的反映真實情況中面臨遷移任務和超小樣本問題的適應性,我們采用三套各具特色并且不同地區的數據集。
第一套數據集采用 (Lai et al., 2020) 的大規模巖石薄片數據集,該數據集具有層次性強和類型覆蓋率高的特點,覆蓋了105種,占常見巖石類型90%以上,因此可以充分的作為地質領域遷移學習的基礎模型。進而使得以此為基礎進行小樣本的在線遷移學習,更具有針對性的解決油田面臨的挑戰。數據集以兩級分類為主體結構。第一級分為沉積巖、火成巖、變質巖。第二級將其各自細分,共105種。該數據集具有規模大、類別均衡的特點,共2634張圖片,沉積巖包含28個類別699張薄片樣本,火成巖有39個類別963張,變質巖有38個類別972張。除了很少幾個類別外,每個類別都由3個巖石樣本組成,其中每個巖石樣本都包含1張單偏光照片和7張正交偏光照片。表1展示了3個輝綠巖樣本的單偏光照片和正交偏光照片。表2給出輝綠巖部分薄片鑒定信息。
研究發現,上揚子西北緣的地層記錄到晚二疊生物大滅絕,已發現多個大型氣田,對于油氣勘探開發具有重要意義。因此,為了增強對該地區的研究,第二套數據集 (Chai et al., 2020) 在該地區選取了4條剖面,從中選取了兩種灰巖和兩種白云巖作為相似類別的識別驗證。共152張巖石薄片作為遷移學習的數據集,分別為亮晶內碎屑灰巖、微晶白云巖、泥晶灰巖、鮞粒白云巖。該數據集從巖石類型、性質、晶粒等方面給出了詳細的信息。以泥晶灰巖樣本1號的薄片為例,匯總了該樣本的部分信息。
為了解決實際勘探開發時面臨樣本稀缺的問題,第三套數據集采用具有超小規模數據集,每個類別有4張圖像,給神經網絡的訓練帶來極大的挑戰,與現實情況一致。針對拉薩地區的5套白堊紀碎屑巖地層進行研究。對于該地區的兩類灰巖和兩類砂巖進行識別對比。晶屑凝灰巖、石英巖屑雜砂巖、英安質凝灰巖、鈣質粉砂巖,進行以大規模巖石薄片為基礎,針對小樣本的在線學習研究。
2.2 網絡模塊設計
利用特征圖權重增強特征之間的通道連接,SENet在學術和工業實踐中都取得了很好的效果(Hu et al., 2018),允許模型提取相關特征,抑制與任務無關的特征。此外,還加強了特征通道之間的學習,以獲得更具方向性的特征信息。特征通道的自適應標定主要通過壓縮、激勵和重標定三個操作來完成,從而大大提高了模型的識別率。在復雜網絡條件下,壓縮和激勵對降低模型的復雜性具有重要的價值,可以增強多通道之間的特征融合效果。但由于巖石薄片識別背景復雜,工程問題全局相似性強,存在一定的局限性。為克服上述問題的影響,以大規模多尺度巖石薄片識別模型MaSE-ResNeXt為靈感,構建了處理油田生產過程中小規模數據集復雜傳輸任務和在線學習任務的神經網絡。構建擴展遷移層(帶遷移的全連接層),有效地將以往資料中提取的巖石薄片特征作為經驗推廣到新油田,以供經驗傳遞之用。改進的帶Transfer的MaSE-ResNeXt網絡結構如圖1所示。其中,橙色塊是對整個流程中各個重要部分的詳細說明。橙色塊之外的另一部分是整個過程。
Fig. 1 The network structure of modified MaSE-ResNeXt with Transfer
2.3 巖石薄片在線遷移方法
不同區塊的巖石薄片在特征、樣本數、巖石類型等方面存在差異。因此,在離線訓練階段,首先使用大規模的巖石薄片數據集(第一個數據集)作為源域數據。采用數據增強策略后,將預處理后的原始數據輸入神經網絡獲取輸出值。當模型收斂后,可以得到預訓練好的大尺度巖石薄片源域識別模型。將已開發油田(稱為源域)的經驗轉移到新油田(稱為目標域),并在此基礎上再次加強,對油田的開發具有重要意義。一種更簡單的方法有望幫助油田實現其目標。因此,我們提供了一種遷移學習的方法,用大量已開發油田的數據訓練CNN網絡,并利用少量新油田的數據,根據以往的經驗進一步使模型適應新油田。一個已開發的油田就像一個老師,為模型提供了用于新油田的先驗知識。建立完整的網絡模型,然后截取卷積層作為特征提取器。凍結這些參數,以防止在傳輸過程中訓練全連接層時梯度過大,對卷積層的參數產生不利影響。在使用遷移學習數據集(第二個數據集)更新全連接層的參數后,執行幾個階段的訓練。當模型收斂后,可得到適用于轉移數據集的巖石薄片識別模型。
在線遷移學習數據集(第三個數據集)采用了類似的設計概念,只強調了與少量可用訓練數據相關的問題。該系統基于大規模巖石薄片識別模型,以新油田的巖石薄片進行迭代輸入。該方法利用原有的特征提取器參數對新樣本進行識別,得到新樣本后再對模型全連接層參數進行更新。通過這種方式,可以滾動地提高識別的針對性。在線遷移學習過程如圖2所示。
Fig. 2 The flow chart of MaSE-ResNeXt with online transfer for rock thin sections identification
2.4 實驗流程設計
為了從基礎性、普適性、困難性三個角度分析模型對于本研究的實際問題的解決能力與效果評價,我們首先進行超參數的計算,并從三個維度進行實驗設計。實驗1采用大規模的巖石薄片數據集作為研究基礎,通過對比過往研究的效果,檢驗本研究基礎的可靠性,獲得大規模的巖石識別方法與源領域預訓練模型。實驗2對于更換研究區域后數據集變化這一問題進行遷移學習的仿真研究,分析算法與優化器配置的敏感性,研究特征提取器的可視化分析,獲得適用不同地區的遷移方法與模型。實驗3采用超小規模數據集模擬在惡劣情況條件下,勘探資料稀缺地區遷移問題的可靠性,探討遷移優勢與誤差分析,并對比其他研究分析差異性。
Fig. 3 Three datasets and corresponding experimental processes
# 定義訓練過程 iters_list=[] train_acc_list=[] train_loss_list=[] val_acc_list=[] triplet_loss_list=[] val_acc=0 iters = 0def train_pm(model, optimizer):# 開啟GPU訓練use_gpu = Truepaddle.set_device('gpu') if use_gpu else paddle.set_device('cpu')epoch_num = 140global iters_listglobal train_acc_listglobal train_loss_listglobal val_acc_listglobal triplet_loss_listglobal val_accglobal itersfor epoch in range(epoch_num):for batch_id, data in enumerate(triloss_loader()):model.train()x_data, y_data = data#print(x_data.shape,y_data.shape,y_data)img = paddle.to_tensor(x_data)label = paddle.to_tensor(y_data) #[32, 1]#print(img,label)# 運行模型前向計算,得到預測值feature2048,logits = model(img) #[32, 751]#triplet_loss=Trihard_loss(feature2048,label,num_identities=16,num_instances=4)#################triplet_loss=batch_hard_triplet_loss(feature2048, label, 0.8,64)###################loss = F.softmax_with_cross_entropy(logits, label)#print(loss.shape)avg_loss = paddle.mean(loss)loss_all=avg_loss+triplet_loss#print('avg_loss: ',avg_loss,'avg_triplet_loss: ',avg_triplet_loss)acc = paddle.metric.accuracy(logits, label)avg_acc=paddle.mean(acc)if batch_id % 10 == 0:print("epoch: {}, batch_id: {}, 《classifyloss is: {}》, 《Triple_loss is:{}》, 《classify_acc is: {}》".format(epoch, batch_id, avg_loss.numpy(),triplet_loss.numpy(),avg_acc.numpy()))#print('P:',positive_loss,'N:',negtive_loss)log_writer.add_scalar(tag = 'train_acc', step = iters, value = avg_acc.numpy())log_writer.add_scalar(tag = 'train_loss', step = iters, value = avg_loss.numpy())log_writer.add_scalar(tag = 'triloss', step = iters, value = triplet_loss.numpy())log_writer.add_histogram(tag='logits',values=logits.numpy(),step=iters,buckets=5)log_writer.add_histogram(tag='feature2048',values=feature2048.numpy(),step=iters,buckets=30)iters += 10iters_list.append([iters])train_acc_list.append(avg_acc.numpy())train_loss_list.append(avg_loss.numpy())triplet_loss_list.append(triplet_loss.numpy())val_acc_list.append([val_acc])# 反向傳播,更新權重,清除梯度loss_all.backward()#print('avg_loss.grad: ',avg_loss.grad,'triplet_loss.grad: ',triplet_loss.grad,'feature2048.grad: ',feature2048.grad,'loss_all.grad: ',loss_all.grad,'logits.grad: ',logits.grad)optimizer.step()optimizer.clear_grad()model.eval()accuracies = []losses = []for batch_id, data in enumerate(val_loader()):x_data, y_data = dataimg = paddle.to_tensor(x_data)label = paddle.to_tensor(y_data)# 運行模型前向計算,得到預測值feature2048,logits = model(img)#print(logits)#print('logits : ',logits.shape)# 計算sigmoid后的預測概率,進行loss計算pred = F.softmax(logits)loss = F.softmax_with_cross_entropy(logits, label)acc = paddle.metric.accuracy(pred, label)#print('pred = {},loss = {},acc = {}'.format(pred.shape,loss.shape,acc.shape))accuracies.append(acc.numpy())losses.append(np.mean(loss.numpy()))#accuracies=np.array(accuracies)val_acc=np.mean(accuracies)lossess=np.mean(np.array(losses).reshape([-1,1]))#print('accuracies = {},losses = {}'.format(accuracies.shape,losses.shape))print("$$-val>>>>>> 《loss is: {}》, 《acc is: {}》".format(lossess,val_acc)) paddle.save(model.state_dict(), 'palm.pdparams')paddle.save(optimizer.state_dict(), 'palm.pdopt')3 結果與討論
3.1 源域模型識別實驗
105個分類的大尺度巖石薄片的迭代記錄如圖4所示。灰色曲線表示損失值隨著網絡訓練時數的增加而不斷減小。雖然損失值波動,但整體上不斷克服局部最優的陷阱,從而進一步降低了損失。藍色曲線代表每個時代的準確性,總體上呈現出上升的趨勢。模型在早期的精度受到大量隨機狀態權重的影響,使得性能提升緩慢,而在中期提升速度顯著增加。在后期,由于精度較高,解空間中出現局部最優解的概率較大。模型的精度提高速度變慢,接近收斂。黃色曲線代表每個epoch中每個批次的準確率,它的波動比藍色曲線所代表的每個epoch的準確率更嚴重。經過源域訓練后,測試集的準確率達到81%。
Fig. 4 Accuracy and loss curve of 105 categories for large-scale rock thin sections identification
3.2 目標領域遷移實驗
采用第二套數據集,將兩種灰巖和兩種白云巖作為相似類別進行目標領域的遷移實驗。模型識別對比采用SENet和改進后的MaSE-ResNeXt進行訓練。圖8顯示二者經過130輪的訓練后收斂。雖然二者在訓練階段收斂速度相近,但通過測試集的檢驗后發現,SENet的測試集準確率為72%,MaSE-ResNeXt取得94%,準確率提升了22%,如圖5。模型的優越性得到驗證。模型效果提升的原因在于多通道間的信息雖然在原有模型中得到了有效的利用。改進后的模型更考慮到了巖石薄片的全局相似性問題,圖像在樣本上呈現出整體的一致性。因此改進后的網絡結構更適宜解決巖石薄片的問題。
Fig. 5 The comparison of the two model identification in the target domain
在確定了相關參數設置后,先凍結特征提取器訓練全連接層進行5輪的遷移,再進行90輪完全的訓練過程。經過95輪的迭代得到圖9所示的模型收斂曲線,測試集準確率達到94.4%。通過圖6的混淆矩陣可以看出,共有兩個樣本識別錯誤,將亮晶內碎屑灰巖誤判為泥晶灰巖,以及將泥晶灰巖誤判為微晶白云巖。
Fig. 6 Confusion matrix of the transfer learning in the target dataset
表8詳細的說明了各個類別的分類指標,其中采用類別加權的評價指標來衡量由于各個類別間樣本數量差異導致的類別不均衡問題,加權后的F1-score可達到0.95,證明了模型的高效性。
盡管上述實驗存在兩個樣本的判斷錯誤,但對于微晶白云巖和鮞粒白云巖來說,則全部預測正確。這一現象可以充分說明白云巖的特征對于神經網絡具有顯著性的特征值。因此,對于對各個類別進行卷積層的特征提取,可以發現不同樣本輸入后有各自的分布特征。其中,第一行與第二行是識別錯誤的樣本,第三、四行是在測試集中隨意選取的樣本。
Fig. 7 Neural network feature map
通過分析圖7的特征圖可以明顯看出,鮞粒白云巖在不同層上的特征都具有顯著的鮞粒結構,因此對于模型的辨識度高。相反,微晶白云巖與亮晶內碎屑灰巖的特征圖表現出強烈的相似性的問題,粒度分布平坦,這就造成網絡進行前向傳播的過程中容易受到特征分布相似的原因造成的真實類別概率值不突出,進而造成誤判。這些相似性對于具有豐富經驗的專家而言可以通過尋找圖像的某個局部特征進行分辨,而對于神經網絡而言以樣本分布相似程度為依據導致了模型陷入錯誤分類的方向。因此,在實際工作中可以采用在線學習策略來增強模型對于容易犯錯類別的模型表達能力。
3.3 在線遷移實驗
基于第三套數據集的兩類灰巖和兩類砂巖來針對性的解決勘探前期工作中數據稀缺這一工程問題。本實驗的每個類別各4張樣本,采用基于大規模巖石薄片分類的在線遷移訓練和直接訓練的訓練過程如圖8。
Fig. 8 Convergence comparison of the training methods for small-scale datasets
灰色的曲線代表直接訓練的過程,經過近500次的迭代模型收斂,這個過程屬于標準的數據集訓練模式,測試集準確率60%。藍色曲線表示5輪遷移過程,網絡加載了已經在大規模巖石薄片的卷積特征,僅需修改一下分類器的權重,即可作為訓練基礎,再經過了25輪的訓練就完成了所有的訓練任務。通過曲線可以看出,如果直接訓練,由于卷積層的特征提取器缺乏大量樣本的喂入,對于網絡參數最優解的搜索慢,因此需要消耗大量資源用以迭代,因此模型的收斂效果差。與此相反,我們基于以有的大規模預訓練模型作為網絡參數,讓模型具有更好的遷移初始值,進而實現最快速度完成收斂,宏觀上可以看出效率提升1500%,并且測試準確率80%,也得到了進一步的提升。這一結果可以在新地區缺乏巖石資料的區域,以最快的速度和高精度來幫助地質專家完成對該地區的資源評定工作。
Fig. 9 Error analysis of small-scale samples
測試集上唯一的預測錯誤是發生在將一張石英巖屑雜砂巖誤判為英安質凝灰巖。兩個類別都從兩個巖石樣本中采樣獲得的,并且都進行了單偏光(-)和正交偏光(+)采樣。圖13可以明顯發現右面的兩個圖像,雖然來自于不同的巖石,但具有相似的斑紋構造。而左面的兩個巖石樣本,其嵌入的塊狀晶體以及整體的紋理分布差異顯著,對于小規模數據集而言,難以讓模型在訓練的過程得到有效的表征。因此,隨著研究區域在后續的勘探開發過程中對該地區研究的進一步深入,該類巖石樣本獲得增加,在線學習將持續性的提升模型的預測效果,滿足實際生產開發過程中的要求與挑戰。
(Lima et al., 2020) 對于公共領域的數據集作為遷移學習的源領域模型,采用ResNet的方法,雖然在一套數據集中取得了很好的效果,但也發現當更換數據集后效果顯著下降。準確率降低到44%,相比于本研究存在36%的不穩定性。我們采用的基于大規模巖石薄片數據集作為源領域模型,從卷積層的參數表征上就取得了一定的優勢。這種方法可滿足少量數據集完成網絡權重的微調任務。與此同時,采用更加適應具有全局相似度高的改進算法,獲得針對性的性能提升。因此,在第二套和第三套數據集中均取得了穩定且高效的預測效果,進一步的驗證了系統的優勢。
4. 總結
為解決巖石薄片識別中跨區域轉移的問題,本文對MaSE-ResNeXt網絡在模型針對性和轉移學習方面進行了改進。設計了一個有針對性的網絡結構,以建立預訓練的地質模型與大規模巖石薄片數據集。為了獲得穩定高效的性能,對不同區域的巖石薄片進行了在線遷移學習。該模型可為模型表達能力有限、樣本數量有限等苛刻條件下的巖石薄片識別轉移學習提供一種實用的解決方案。
(1)基于SE結構構建改進的MaSE-ResNeXt網絡,設計培訓和轉移流程。基于大規模巖石樣本,建立了高性能的地質特征提取器,105類測試集的提取精度達到81%。
(2)在遷移學習數據集中,比較不同模型和優化器的預測精度,選擇最優參數設置。在實際測試中,f1的加權得分為0.95。
(3)通過建立各類褶積層的特征通道圖,發現其上的鮞狀結構具有較強的區分特征,在區分微晶白云巖和晶晶內碎屑灰巖時存在特征圖平面化的問題。
(4)在小規模數據集實驗中,基于在線遷移學習方法的模型優于傳統模型和使用其他數據集的遷移學習模型。與之前的研究相比,該測試集的收斂速度提高了15倍,準確率提高了20%。
Code Availability
Repository: https://github.com/mmmahhhhe/MaSeResNeXt
References
此文章為搬運
原項目鏈接
總結
以上是生活随笔為你收集整理的基于跨区块恶劣条件的岩石薄片分析,加速地质工程一体化推进的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 端口映射实现手机做服务器
- 下一篇: LVGL---使用物理按键代替触摸(gr