段友祥 李 鈺 孫歧峰 徐冬勝
(中國石油大學(華東) 計算機與通信工程學院 山東 青島 266580)
現在有桿抽油機采油設備仍在原油開采中占據主導地位,但是由于其結構特點及工作環(huán)境的特殊性,故障發(fā)生率高,所以能夠及時準確地把握抽油機的工作狀態(tài)、進行故障分析和處理非常重要。目前示功圖是分析和判斷油井抽油機工況的主要手段,但在實際生產中,對示功圖的識別和分類還主要是依靠人工進行,識別效率低,特別是受經驗知識的影響較大,導致有時存在很大的識別誤差,無法滿足油田實際生產,特別是自動化生產的需要。多年以來,人們一直研究和嘗試利用先進的計算機技術來解決這個問題,比如把專家系統(tǒng)、機器學習等人工智能方法引入進來[1-6],取得一些成果,也得到了一定的應用實踐,但還不能很好地滿足實際要求。深度學習是機器學習的一個新的領域,在計算機視覺、語音識別等方面有著非常成功的應用,也為圖片分類等問題的解決提供了新的思路。
示功圖是由載荷隨位移的變化關系曲線所構成的封閉曲線圖。在有桿抽油機工作過程中,可以利用獲得的示功圖定性地分析抽油機工作狀況,及時調整工作參數,發(fā)現和排除故障。對示功圖的分析可以看作是一種圖片分類,因此,研究卷積神經網絡CNN(Convolutional Neural Networks)在示功圖自動識別和分類方面的應用在技術上可行且有很大實際應用價值。
如圖1所示,抽油機工作正常時,示功圖可以近似看為一個平行四邊形,如圖1(a)。井下供液不足時,即抽油泵未能被液體填滿,示功圖會出現如圖1(b)情況。當井下液體中富含氣體時,氣體會在抽油桿上行過程中從液體中析出,示功圖會出現如圖1(c)的情況。抽油機的抽油桿斷脫時,會使抽油機負載基本無法增加,出現如圖1(d)的棒狀示功圖。
圖1 示功圖示例
卷積神經網絡(CNN)從1984年第一個神經感知機(Neocognitron)實現到現在已經有了三十多年的發(fā)展歷史。其間,網絡模型不斷地更新和加深,變得更加復雜,應用范圍越來越廣,應用效果也越來越好。用于圖像識別的CNN網絡由四種基本元素構成,分別是卷積層、池化層、全連接層與激活函數。其中池化層一般跟隨著卷積層,全連接層位于網絡的最后,用于輸出最終的特征向量,神經元是否被激活用于傳遞信息由激活函數決定。其一般結構如圖2所示[7]。
圖2 CNN網絡原理圖
Cx是卷積層,其主要功能是提取輸入圖像的特征,卷積的核心思想是局部感受野和權值共享卷積過程。Sx卷積層提取特征之后將生成的特征圖傳遞給下一層。是池化層,其主要作用是壓縮特征圖大小并消除圖像空間轉換的影響。卷積神經網絡的最后一層一般為全連接層,其作用是將前面卷積層和池化層提取的輸入圖像的特征圖轉為特征向量輸出。卷積層和全連接層常用的激活函數fx有雙曲正切函數和Sigmoid函數兩種,兩種常用激活函數均為飽和非線性函數。
CNN有很多模型,其中Alexnet就是經典的CNN模型。Alexnet模型是Krizhevsky A等[8]在2012年提出的,后經改進于2014年提出了Alexnet Version2(簡稱Alexnet2)模型[9]。目前Alexnet2模型在實際中應用較多。
Alexnet2網絡模型如圖3所示。其中Name為層名,Size為卷積核大小或池大小,Stride表示步長,Output為層輸出特征圖個數,class表示圖片類型總數。模型包括八個帶權層,前五層為卷積層,后三層為起全連接層作用的卷積層,模型使用的激活函數為ReLU函數。模型接受的輸入圖片大小為224×224,模型最終輸出為class維的列向量。
圖3 Alexnet2體系結構示意圖
模型前五層中,第一、二、五層卷積層后跟隨了池化層(池化規(guī)則為最大池);第三層和第四層只有卷積層,沒有池化層。后三層的卷積層起到的是將特征圖由二維圖片變?yōu)橐痪S列向量的作用,其中為了防止過擬合現象,第六層和第七層均有一個Dropout層。第六層和第七層卷積層的激活函數仍為ReLU函數,但第八層較為特殊,沒有激活函數。
Alexnet2模型保留了原Alexnet模型的Dropout層和ReLU激活函數,Dropout層能夠有效降低過擬合現象[10];ReLU函數是非飽和非線性函數,相較于傳統(tǒng)的雙曲正切函數和Sigmoid函數等飽和非線性函數而言,ReLU函數能夠加速模型收斂,減少網絡訓練時間。Alexnet2模型在原Alexnet模型全連接層的位置使用卷積層替代,相比于全連接層卷積層參數較少,有利于減少模型收斂時間;去除了LRN層,使得模型更易并行化。
但Alexnet2模型比較龐大,訓練時間和實際運行時間都比較長,不適合實際的示功圖自動分類的應用要求。
針對Alexnet2模型的不足之處,在深入分析和研究CNN和Alexnet模型的基礎上,根據示功圖自動分類應用的特點和要求,提出了一種改進的簡化Alexnet模型(以下簡稱MiniAlexnet)。該模型刪除了原模型中的兩個卷積層和一個全連接層,減少了模型參數,加速了模型收斂速度。MiniAlexnet模型與原模型有相同的輸入輸出形式。模型結構如圖4所示。
圖4 MiniAlexnet模型結構
與Alexnet2經典模型相比,MiniAlexnet模型刪除了原模型的第三、四、五層卷積層,并用一個卷積核大小為6×6,步長為6,采用不保持特征圖大小策略(以下簡稱VALID策略)的卷積層conv3代替,卷積層conv3后跟一個池大小為2×2,步長為2的最大池pool3。這時模型輸出特征圖大小為1×1。MiniAlexnet模型的第四層Fc4為卷積核大小為1×1的卷積層;隨后第五層Fc5為僅使用大小為1×1卷積核的卷積層(無激活函數),輸出特征圖個數為classnum。最后將網絡的輸出進行序列化操作,將輸出變?yōu)閏lassnum維的列向量。同時為了降低過擬合現象,在MiniAlexnet模型第三層和第四層均添加了Dropout層,降低了神經元復雜的互適應關系[10]。
MiniAlexnet模型參數數量為46 000個左右,與Alexnet經典模型的6 000萬個參數相比,參數數量大大減少,加速了網絡收斂速度,效率得到大大提升。
結合示功圖自動分類的實際應用,用MiniAlexnet模型、Alexnet2模型和Overfeat模型分別進行了示功圖分類實驗,對實驗結果進行了分析和對比。
本文使用的數據集來自國內某油田,共有746張油井抽油機示功圖。首先通過人工分類將這746張油井抽油機示功圖分為了“工作正?!?、“充不滿”、“氣體影響”、“抽油桿斷脫”四類并將其按文件夾單獨存放,各類別具體對應關系見表1。
表1 油井示功圖分類情況表
然后通過程序腳本將每張油井抽油機示功圖圖片組合成“圖片路徑+標簽”的形式(例Data/1/image001.png+1),存入文本文件中供模型讀取。在存入文本文件的過程中,隨機抽取占總量25%的數據作為模型的測試集,剩余75%作為模型的訓練集。最終生成的訓練集包括560張油井抽油機示功圖,測試集包括186張油井抽油機示功圖。
為了進行實驗和分析,基于NVIDIA K400 GPU硬件環(huán)境,使用TensorFlow作為開發(fā)平臺,分別搭建了MiniAlexnet模型、Alexnet2模型和Overfeat模型。各模型的搭建方式基本相同,在此簡要介紹搭建MiniAlexnet模型的過程。
TensorFlow提供了高度集成的模型搭建方法,只需要將每層的必要參數傳遞進去就可以。根據MiniAlexnet模型結構(見圖5),第一層為卷積層加池化層,卷積核大小為11×11,步長為4,采用VALID策略,輸出64個特征圖,激活函數為ReLU函數(后續(xù)卷積層除第五層外激活函數皆為ReLU函數),池化層規(guī)則為最大池,池大小為3×3,步長為2(模型后續(xù)池化層均使用相同配置);第二層為卷積層加池化層,卷積核大小為5×5,步長為1,采用SAME策略,輸出192個特征圖;第三層為卷積層加池化層加Dropout層,卷積核大小為6×6,步長為1,采用SAME策略,輸出256個特征圖;第四層為卷積層加Dropout層,卷積核大小為1×1,步長為1,輸出4 096個特征圖;第五層為特殊卷積層,卷積核大小為1×1,步長為1,沒有激活函數。
模型輸出通過Softmax方法進行分類,訓練時使用交叉熵函數作為模型輸出損失的計算函數,優(yōu)化方法為Adam優(yōu)化器。具體搭建代碼略。
5.3.1 MiniAlexnet模型
實驗共訓練模型5 000次,模型于300次左右收斂,收斂時用時為1 min 40 s,測試集準確率為98.39%。MiniAlexnet模型準確率實驗結果圖見圖5(a) ,此處僅使用了模型訓練前530步的數據進行繪圖,后續(xù)所有實驗結果圖所用數據均只截取到模型收斂后300步左右,且橫坐標表示訓練步數,縱坐標表示識別準確率或輸出損失。MiniAlexnet模型輸出與期望之間的損失見圖5(b),模型收斂時訓練集損失為0.011 75,測試集損失為0.182 5。
(a) MiniAlexnet模型實驗準確率
(b) MiniAlexnet模型實驗損失 圖5 MiniAlexnet實驗結果
5.3.2 Alexnet模型
實驗共訓練模型30 000次,模型于200次左右收斂,模型收斂時訓練用時為2 min 26 s,此時模型在訓練集上的識別準確率達到了100%,在測試集上的識別準確率達到了95.65%,見圖6(a)。模型輸出與目標期望之間的損失見圖6(b),模型收斂時訓練集損失為0.000 08,測試集損失為0.133 1。
(a) Alexnet2模型實驗準確率
(b) Alexnet2模型實驗損失 圖6 Alexnet2實驗結果
5.3.3 Overfeat模型
實驗共訓練模型10 000次,模型于200次左右收斂,收斂后模型在測試集上的分類準確率為93.55%,耗時5 min 42 s,模型分類準確率結果見圖7(a)。Overfeat模型輸出與期望之間的損失見圖7(b),模型收斂時,模型在訓練集的損失為0.024 89,在測試集上的損失為0.251 9。
(a) Overfeat模型實驗準確率
(b) Overfeat模型實驗損失 圖7 Overfeat實驗結果
5.3.4 實驗分析與結論
1) 實驗結果對比分析 三個模型實驗的結果對比見表2,其中包括了收斂步數、收斂時間、測試集準確率、訓練集損失、測試集損失等五個重要的實驗參數數據。表中數據取自模型收斂時刻的數據。
表2 模型實驗結果對比
MiniAlexnet模型與Alexnet2模型相比,收斂步數有所增加,但收斂時間大大縮減,同時準確率也提升了2.74%。MiniAlexnet模型輸出損失要高于Alexnet2模型,這是由Softmax分類方法帶入的合理損失,對分類準確率影響較小,后續(xù)的訓練中,MiniAlexnet模型損失會繼續(xù)降低。MiniAlexnet模型與Overfeat模型相比,收斂時間大大縮減,準確率提高了4.84%,同時MiniAlexnet模型損失也低于Overfeat模型。
2) 模型泛化能力分析 示功圖異常樣本數據集獲取較難,為平衡各類功圖數量,導致實驗用數據集規(guī)模較小,但實驗用數據集保證了每類異常示功圖個體之間有較大差異,這讓模型能更加容易地獲得學習目標的真實特征,所以數據集規(guī)模并未對模型泛化能力產生過大影響。同時模型本身也保留了兩個Dropout層,防止出現過擬合現象而造成模型泛化能力下降。綜上所述,訓練后的模型具有較強的泛化能力。
3) 實驗結論 從以上分析可以看出, MiniAlexnet收斂時間較短,收斂后在測試集上的分類準確率最高,訓練后模型也有較強的泛化能力,能夠很好地滿足實際應用要求。
本文在研究常用CNN模型的基礎上,提出了一種適用于油井示功圖自動分類的改進的簡化Alexnet網絡模型——MiniAlexnet模型,實現了基于MiniAlexnet模型的油井示功圖自動學習分類。與其他模型進行了實驗對比,實驗結果表明,MiniAlexnet模型在油井示功圖識別和分類方面有很高的準確率,大大縮減了訓練時間,提高了模型收斂速度,很好地滿足了實際應用需求,在很多類似應用領域具有很好的應用前景。