溫后珍 王浩宇 欒儀廣 于雙鍇 陳德斌
(1.東北石油大學機械科學與工程學院 2.山東裕龍石化產(chǎn)業(yè)園發(fā)展有限公司 3.大慶高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)汽車和高端裝備產(chǎn)業(yè)促進中心)
當下,有桿抽油機是采油工業(yè)中必不可少的裝備,在國內(nèi)外機械采油中,有桿泵抽油機采油方式占有相當大的比例。油井中的原油通過井下抽油泵的抽汲后再通過管道被輸送到地面。然而,抽油泵的工作環(huán)境十分苛刻,其在工作過程中出現(xiàn)故障在所難免[1-4]。對于抽油系統(tǒng)的維護工作,現(xiàn)場的大部分人力都耗費在數(shù)據(jù)資料的獲取、抽油設(shè)備的質(zhì)檢及故障的解決等方面,使得人均管理的油井數(shù)量不多,且不能夠及時發(fā)現(xiàn)設(shè)備的故障[5]。為此,怎樣才能夠準確、及時地判斷抽油系統(tǒng)的故障是采油工業(yè)中的一大難題。常用的故障診斷技術(shù)有人工診斷、專家系統(tǒng)及人工智能。人工診斷方法容易受到個人專業(yè)水平的限制且診斷效率較低,不能夠?qū)崟r快速地給出診斷結(jié)果。專家系統(tǒng)依賴于最新、完整的數(shù)據(jù),并且難以處理復雜問題,同時缺乏一定的靈活性,如果出現(xiàn)新的情況或問題,可能需要重新編寫和重新訓練系統(tǒng),需要大量的時間和資源[6-7]。隨著現(xiàn)代技術(shù)的快速發(fā)展,油田已經(jīng)逐漸走向自動化、數(shù)字化及智能化方向。目前人工智能技術(shù)逐漸成為采油設(shè)備故障診斷的主力。相對于傳統(tǒng)的人工診斷方法,人工智能技術(shù)大大提高了診斷效率。該技術(shù)可以在不同的數(shù)據(jù)和環(huán)境下進行自適應調(diào)整,適應各種復雜的工況和環(huán)境變化。通過人工智能技術(shù)對采油系統(tǒng)實時監(jiān)控,可以減少不必要的維修時間,大大提高生產(chǎn)效率[8-10]。
目前,采用神經(jīng)網(wǎng)絡(luò)技術(shù)對抽油系統(tǒng)的故障診斷主要是通過對油井示功圖[11]的智能識別。然而對于功圖識別任務(wù),直接將數(shù)據(jù)集送入深度卷積神經(jīng)網(wǎng)絡(luò)去訓練并不能達到很好的預期效果;診斷精度受到數(shù)據(jù)量的限制,模型泛化能力不強。對于過于簡單的模型,它可能缺乏足夠的層數(shù)和參數(shù)來學習圖像的高層次特征,往往只能學習到簡單的特征,這些特征不足以很好地區(qū)分不同類別的圖像。
孿生神經(jīng)網(wǎng)絡(luò)[12-17]的結(jié)構(gòu)采用了參數(shù)共享的策略,即2個子網(wǎng)絡(luò)共享相同的權(quán)重。這種參數(shù)共享策略可以大大減少網(wǎng)絡(luò)的參數(shù)數(shù)量,使得在訓練過程中需要優(yōu)化的參數(shù)數(shù)量大大減少,從而降低了過擬合的風險。同時,參數(shù)共享還可以增強網(wǎng)絡(luò)的泛化能力,使得網(wǎng)絡(luò)能夠更好地適應小樣本任務(wù)。孿生神經(jīng)網(wǎng)絡(luò)通常被用于度量學習任務(wù)[18],即學習一個映射,將輸入的數(shù)據(jù)映射到一個低維度的空間中,并且在這個低維度的空間中保持相似的數(shù)據(jù)靠近,不相似的數(shù)據(jù)遠離。在小樣本任務(wù)中,數(shù)據(jù)的數(shù)量非常有限,很難對數(shù)據(jù)進行分類或者回歸等任務(wù)。但是,通過度量學習可以將數(shù)據(jù)映射到低維度的空間中,并且根據(jù)數(shù)據(jù)在這個空間中的相對位置進行分類或者回歸等任務(wù),可以大大減少數(shù)據(jù)量的要求。同時,孿生神經(jīng)網(wǎng)絡(luò)可以學習一些數(shù)據(jù)的共性,即使在小樣本任務(wù)中也可以得到很好的效果。
筆者利用大型公開數(shù)據(jù)集(Omniglot)構(gòu)建了訓練神經(jīng)網(wǎng)絡(luò)所需的圖像樣本庫,基于百度飛槳深度學習框架平臺搭建了孿生神經(jīng)網(wǎng)絡(luò)模型,利用公開數(shù)據(jù)集預訓練好孿生神經(jīng)網(wǎng)絡(luò)模型后,再在功圖數(shù)據(jù)集微調(diào)幾步。試驗結(jié)果證明,預訓練的孿生神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)模型能顯著提高功圖識別的準確率,特別適應于功圖識別任務(wù)。
孿生神經(jīng)網(wǎng)絡(luò)是由2個結(jié)構(gòu)相同的神經(jīng)網(wǎng)絡(luò)組成的模型,2個神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)共享權(quán)值參數(shù)。它通過對2個輸入圖片進行相似度比較,從而進行分類、識別及匹配等任務(wù)。而在實際訓練過程中,由于權(quán)值共享,通常是往一個神經(jīng)網(wǎng)絡(luò)里送入圖像數(shù)據(jù),網(wǎng)絡(luò)會將輸入映射到新的空間,依次得到每張圖像的特征向量。圖1為特征提取網(wǎng)絡(luò)圖。
圖1 特征提取網(wǎng)絡(luò)Fig.1 Feature extraction network
每個圖像數(shù)據(jù)樣本呈現(xiàn)形式是2張圖像加上類別標簽,來自同一類別則標簽為1,不同類別標簽為0。數(shù)據(jù)樣本通過特征提取網(wǎng)絡(luò)后展平得到2張圖片的特征向量;然后求取它們插值的L1范數(shù)[19],相當于度量了這2個特征向量距離,得到一個特征向量;再進行3次全連接得到一個輸出結(jié)果。圖2為比較網(wǎng)絡(luò)結(jié)構(gòu)圖。
圖2 比較網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Structure of comparison network
f(x1)與f(x2)為圖片展平后的特征向量,將2個特征向量相減取絕對值,就可以求取2個特征向量插值的L1范數(shù)。理論上來說,預訓練好神經(jīng)網(wǎng)絡(luò)后便可以應用于小樣本圖像分類任務(wù)[20-21],因為訓練好的模型已經(jīng)擁有了判斷圖像之間相似度的能力。但試驗結(jié)果證明,如果將訓練好的神經(jīng)網(wǎng)絡(luò)模型直接用在功圖識別任務(wù)上,其表現(xiàn)的效果并不是很理想。這可能是因為在訓練過程中,網(wǎng)絡(luò)過度適應了公開數(shù)據(jù)集。但是通過在大規(guī)模數(shù)據(jù)集上的訓練,該網(wǎng)絡(luò)已經(jīng)學習到了通用的圖像特征,尤其是邊緣特征,學習到這些特征之后,神經(jīng)網(wǎng)絡(luò)便能夠更快地適應新任務(wù),在新的分類任務(wù)上只需要較少的迭代次數(shù)便可以使模型很快地收斂。因此本文利用孿生神經(jīng)網(wǎng)絡(luò)對特征進行提取,然后在功圖識別任務(wù)中進行微調(diào)。這樣一來,該神經(jīng)網(wǎng)絡(luò)模型更好地利用了少樣本量的功圖數(shù)據(jù)集,模型能夠更快收斂,精度得到很大提升,降低了過擬合的風險。
筆者使用百度飛槳深度學習框架的Paddle.nn.BCEWithLogitsLoss()作為損失函數(shù)。Paddle.nn.BCEWithLogitsLoss結(jié)合了二元交叉熵和sigmoid函數(shù),通常用于度量2個輸入樣本的相似度或者差異度。它可以直接接收模型的輸出值,不需要sigmoid激活函數(shù)進行處理。Paddle.nn.BCEWithLogitsLoss將模型的輸出值(也就是 logits)傳遞給sigmoid函數(shù),將其映射到[0,1]之間的概率值,然后計算預測概率與真實標簽之間的二元交叉熵損失。由于sigmoid函數(shù)的導數(shù)可以在反向傳播時使用,所以可以有效地訓練神經(jīng)網(wǎng)絡(luò)模型。Paddle.nn.BCEWithLogitsLoss的計算公式如下:
log[1-σ(Zi)]}
(1)
式中:yi表示樣本i的真實標簽(取值為0或1);Zi表示樣本i的預測值;σ表示sigmoid函數(shù);N表示樣本數(shù)量。
在訓練過程中,將BCEWithLogitsLoss作為損失函數(shù)傳遞給優(yōu)化器,通過反向傳播更新模型參數(shù),以最小化損失函數(shù),使得模型更好地擬合訓練數(shù)據(jù)。
首先準備數(shù)據(jù)集,將各個類別下的圖像數(shù)據(jù)放在一個Python列表中;然后隨機選取一張圖片,接著隨機選取另一張圖片,如果選取的2張圖片是相同類別則打上標簽1,不同類別則打上標簽0。2張圖片組成一個數(shù)據(jù)樣本,將組織好的數(shù)據(jù)集樣本根據(jù)batchsize大小送進神經(jīng)網(wǎng)絡(luò)模型。此時需要先對數(shù)據(jù)樣本進行預處理,以減少計算資源的利用,加快網(wǎng)絡(luò)的訓練速度。在特征提取網(wǎng)絡(luò)中對數(shù)據(jù)進行特征提取,特征提取網(wǎng)絡(luò)基于Vgg16深度卷積網(wǎng)絡(luò)模型,得到2張圖像數(shù)據(jù)的特征向量,最后在比較網(wǎng)絡(luò)中對特征向量進行度量,輸出2張圖片的相似度。前文提到過,根據(jù)試驗結(jié)果,模型會對公開數(shù)據(jù)集過度適應,所以想要提高訓練的精度,需要在功圖數(shù)據(jù)集上進行微調(diào)。功圖數(shù)據(jù)組織步驟只需重復以上操作,預訓練好的神經(jīng)網(wǎng)絡(luò)模型已經(jīng)具備通用特征學習能力,只需將組織好的功圖數(shù)據(jù)集再送進神經(jīng)網(wǎng)絡(luò)進行訓練。原則上說,在大規(guī)模數(shù)據(jù)集上訓練好的模型已經(jīng)提取出了通用特征。因此底層的卷積層已經(jīng)學習到了很多的可重用特征,而這些特征對于新任務(wù)也有用。但考慮到功圖任務(wù)與預訓練網(wǎng)絡(luò)模型輸入、輸出空間有所不同,所以這里微調(diào)全部參數(shù),使神經(jīng)網(wǎng)絡(luò)模型在功圖識別任務(wù)上更加精確可靠。
算法流程圖如圖3所示。
圖3 算法流程圖Fig.3 Algorithm flowchart
本試驗的數(shù)據(jù)集包括10類故障工況:抽油桿斷、固定閥卡、固定閥漏、供液不足、活塞脫出工作筒、連油帶噴、碰泵、氣影響、游動閥漏、正常,總共收錄功圖1 606幅。抽油系統(tǒng)不會頻繁出現(xiàn)故障,所以實際收集到的故障工況數(shù)據(jù)樣本有限,且不同故障工況出現(xiàn)的頻率也不同,導致收集到的數(shù)據(jù)樣本分布也不均衡。選用的試驗數(shù)據(jù)來自10個典型工況下的故障數(shù)據(jù)樣本。
考慮到功圖數(shù)據(jù)集樣本量非常少,同時為了提高模型的魯棒性和泛化能力,需要對數(shù)據(jù)集采用數(shù)據(jù)增強技術(shù)。該技術(shù)可以幫助模型更好地學習數(shù)據(jù)不變性,從而減少過擬合風險,提高模型性能。對于少數(shù)類別,數(shù)據(jù)增強技術(shù)可以通過擴充數(shù)據(jù)集來平衡類別間的樣本數(shù)量,從而提高模型對少數(shù)類別的識別能力。數(shù)據(jù)增強技術(shù)可以增加數(shù)據(jù)集的多樣性,從而使模型更好地學習數(shù)據(jù)的變化和復雜性,提高模型的性能。部分數(shù)據(jù)增強操作前、后對比如圖4和圖5所示。
圖4 水平翻轉(zhuǎn)Fig.4 Horizontal flip
圖5 鏡像翻轉(zhuǎn)Fig.5 Mirror flip
功圖特征提取CNN模型包括13個卷積層和5個最大池化層,結(jié)構(gòu)如圖1所示。輸入的功圖尺寸為105×105,通道數(shù)為1,所用卷積核大小為3×3。卷積層步長為1,池化層步長為2,網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)設(shè)置如表1所示。
表1 孿生網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)Table 1 Structural parameters of siamese network
前面的卷積層用于圖像特征的提取,所用的激活函數(shù)為ReLU,使得神經(jīng)網(wǎng)絡(luò)在優(yōu)化過程中更加容易。因為其具有線性可分性和非飽和性,所用的梯度下降算法更容易找到全局最優(yōu)解。池化層采用最大池化,盡可能地保留圖像的主要特征,同時具有一定的平移不變性和旋轉(zhuǎn)不變性,使神經(jīng)網(wǎng)絡(luò)模型更加穩(wěn)定。后面的網(wǎng)絡(luò)層全連接+Dropout(在神經(jīng)網(wǎng)絡(luò)中應用的正則化技術(shù))層可以降低模型的復雜度和過擬合風險,全連接層需要大量的參數(shù)來描述網(wǎng)絡(luò)的結(jié)構(gòu),而dropout層可以有效減少參數(shù)量,從而減小模型的復雜度,縮短訓練時間。對于損失函數(shù)的選取,考慮到Paddle.nn.BCEWithLogitsLoss()是二元交叉熵損失和Sigmoid函數(shù)的結(jié)合。該損失函數(shù)的計算只與預測值和真實值有關(guān),而與數(shù)據(jù)集中各類別的數(shù)量無關(guān),即使標簽分布不均衡,損失函數(shù)的計算也不會受到影響。
由于該神經(jīng)網(wǎng)絡(luò)模型已經(jīng)在公開數(shù)據(jù)集預訓練完成,從理論上來講,網(wǎng)絡(luò)模型在功圖數(shù)據(jù)集上訓練較少的輪數(shù)便可收斂,本試驗僅訓練了50輪次,模型便有了很好的收斂性能,網(wǎng)絡(luò)模型的損失曲線趨于穩(wěn)定,且震蕩幅度越來越小。圖6為模型訓練過程中的訓練集與測試集的損失變化曲線。
圖6 模型訓練過程中訓練損失曲線Fig.6 Training loss curve during model training
本試驗的模型輸出結(jié)果是2張圖片的相似度,而不是直接輸出示功圖的故障類別。圖7是預測結(jié)果的可視化展示。
圖7 預測結(jié)果可視化展示Fig.7 Visualization of prediction results
需要預測的功圖應與已有數(shù)據(jù)集逐一對比。數(shù)據(jù)集一共有10個類別,每個類別下選出一張圖像樣本作為支撐集,然后模型會輸出10個相似度值,最后故障類別的判定是選出需要預測的功圖與支撐集中功圖相似度值最大的那一個。但是這樣做存在2個問題:一是支撐集如果每個類別只選一張與預測圖片做對比,會存在比較大的誤差,結(jié)果不具說服力,畢竟原始數(shù)據(jù)相同類別內(nèi)的樣本或多或少有一定的差距,而類間樣本有的也具有一定的相似性;二是不能直接輸出類別標簽,在實際應用過程中效率也不是很高,比較繁瑣。
針對以上問題,對模型預測作出改進。首先建立支撐集數(shù)據(jù)樣本庫,每個類別選出多個具有代表性的樣本數(shù)據(jù),將10個類別樣本集打上固定的標簽(0~9);然后將需要預測的功圖樣本依次與支撐集每個類別內(nèi)的功圖樣本做對比,這樣每個類別下模型會預測出多個相似度值,假設(shè)第一個類別下預測出了20個相似度值,將這20個值相加再取平均,得到預測功圖樣本與該類別功圖樣本的平均相似度值,接著預測其余的類別;最后得到10個平均相似度值,將這10個值放入Python列表中,然后用特定功能庫函數(shù)找出列表中最大值對應的索引,進而找出支撐集數(shù)據(jù)庫中與該索引值相等的固定標簽值,由此便可以判斷預測的故障類型。圖8是預測流程的直觀展示。
圖8 預測流程展示圖Fig.8 Prediction flowchart
將訓練好的模型用于10類不同故障工況功圖識別任務(wù),測試結(jié)果如表2所示。
表2 模型測試準確率Table 2 Model test accuracy
由測試結(jié)果可以看出,預訓練孿生神經(jīng)網(wǎng)絡(luò)方法在功圖識別任務(wù)上效果很可觀,盡管功圖樣本量很少,但在深度神經(jīng)網(wǎng)絡(luò)上訓練并沒有過擬合,在現(xiàn)有數(shù)據(jù)量的情況下,網(wǎng)絡(luò)對個別故障工況類型識別甚至可以達到零誤差。
理論上來說,對于小樣本圖像分類任務(wù),孿生網(wǎng)絡(luò)模型的表現(xiàn)要優(yōu)于傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)模型,主要原因是功圖數(shù)據(jù)量太少,傳統(tǒng)單一卷積網(wǎng)絡(luò)通常需要大量樣本進行訓練才能達到較好的性能。本文搭建了單一的經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)用于對比試驗,使用相同的功圖數(shù)據(jù)集對網(wǎng)絡(luò)進行訓練,得到訓練損失曲線如圖9所示。
圖9 卷積神經(jīng)網(wǎng)格訓練損失曲線Fig.9 Training loss curve of convolutional neural network
選取訓練過程中的最優(yōu)模型對測試數(shù)據(jù)集的每一類別進行準確率檢驗,結(jié)果如表3所示。
表3 卷積神經(jīng)網(wǎng)格模型準確率測試Table3 Model accuracy test
通過訓練損失曲線可以看出,模型在測試集上的表現(xiàn)并不是很理想,測試集上的損失曲線一直處于大幅度的波動狀態(tài)。主要原因在于樣本量過少,且樣本的類間不平衡也會導致大幅震蕩現(xiàn)象。與孿生神經(jīng)網(wǎng)絡(luò)不同,由于數(shù)據(jù)量較少,單一卷積神經(jīng)網(wǎng)絡(luò)則需要更多的迭代次數(shù)才能使模型盡可能的收斂,所以說訓練難度相對也較大,而孿生網(wǎng)絡(luò)需要較少的迭代次數(shù)便可以很好地收斂。通過對準確率的檢驗可以看出,模型對于不同類別的學習程度是不一樣的,而且整體上的預測表現(xiàn)要遜色于孿生神經(jīng)網(wǎng)絡(luò)。
本文采用的孿生網(wǎng)絡(luò)結(jié)構(gòu)是CNN卷積網(wǎng)絡(luò)結(jié)構(gòu)加對比網(wǎng)絡(luò)結(jié)構(gòu)的組合,并利用了遷移學習原理,先在大型數(shù)據(jù)集上預訓練,然后在功圖樣本集上微調(diào)。該模型在小樣本量功圖數(shù)據(jù)集上表現(xiàn)出了很好的收斂性,且沒有過擬合。在功圖識別領(lǐng)域,該訓練方法優(yōu)于單純的深度卷積網(wǎng)絡(luò)模型分類方法。搭建的網(wǎng)絡(luò)模型能夠淡化標簽,而且對于沒有被網(wǎng)絡(luò)訓練的任務(wù)能夠快速適應。預訓練神經(jīng)網(wǎng)絡(luò)方法在很大程度上緩解了數(shù)據(jù)稀缺問題,在小數(shù)據(jù)集分類任務(wù)上相比于其他算法更具優(yōu)勢,因為一個數(shù)據(jù)樣本是由2張圖片組成的,每張圖片都是隨機選擇,然后與另一張隨機選擇的圖片組成樣本對,這樣就能形成很多個數(shù)據(jù)樣本,變相地擴充了整個數(shù)據(jù)集,所以即使功圖樣本很少,該方法也能在深度網(wǎng)絡(luò)訓練中展現(xiàn)出不錯的效果。