(北京工業(yè)大學(xué) 信息學(xué)部,北京 100124)
隨著我國建造業(yè)的蓬勃發(fā)展,人們對(duì)于金屬零部件的品質(zhì)和使用壽命越來越關(guān)注,而其中最為重視的當(dāng)為金屬的硬度。硬度是指金屬材料抵抗形變或破壞的能力,是判斷金屬材料軟硬程度與品質(zhì)的重要指標(biāo)。金屬硬度的檢測方法大致可分為兩種:有損檢測與無損檢測。有損檢測是指通過破壞性的方法獲得金屬的硬度信息,例如靜壓、拉伸等。但這些方法或多或少都會(huì)對(duì)金屬本身造成破壞性影響,既費(fèi)時(shí)又昂貴,并且不能應(yīng)用于正在服役的金屬器件。因此無損檢測這種不會(huì)損壞金屬本身的硬度檢測方法被人提出。
金屬的無損檢測是利用物質(zhì)的聲、光、磁和電等特性,來對(duì)金屬特性,缺陷等一系列信息進(jìn)行檢測,而在這個(gè)過程中并不破壞或不影響檢測對(duì)象的使用性能[1]。常用的無損檢測方法包括電阻應(yīng)變發(fā)、超聲波檢測法、微磁檢測法等,在上述的方法中,使用微磁信號(hào)進(jìn)行無損檢測較為常用[2],而巴克豪森噪聲信號(hào)就是一種典型的微磁信號(hào)。巴克豪森噪聲信號(hào)是由德國科學(xué)家H.Barkhausen于1919年發(fā)現(xiàn)的可測噪聲信號(hào),巴克豪森噪聲信號(hào)是由于外加磁場變化導(dǎo)致磁疇壁的不連續(xù)運(yùn)動(dòng)導(dǎo)致的[3],這些不連續(xù)的運(yùn)動(dòng)會(huì)產(chǎn)生一種類似于噪聲的信號(hào)。巴克豪森信號(hào)會(huì)受金相,含碳量,晶格尺寸等一系列因素[4-5]的影響。對(duì)于金屬外在屬性來說,巴克豪森噪聲與金屬的硬度,殘余應(yīng)力等特性有關(guān),大范圍的應(yīng)用于金屬硬度的無損檢測中。
Aki Sorsa等人[6]初步建立了以信號(hào)預(yù)處理、特征提取、基于wrapper的特征挑選、回歸分析四步為核心的材料性能預(yù)測方法;南京航空航天大學(xué)的王平等人[7]提出了巴克豪森信號(hào)新的特征值——峰寬比,引入了新的概念——半高全寬, 即包絡(luò)線的峰值與半高全寬之比,將這些特征與以往的經(jīng)典時(shí)域特征相結(jié)合輸入到BP神經(jīng)網(wǎng)絡(luò)中,利用得到的模型構(gòu)建了一套鐵磁材料的應(yīng)力和硬度進(jìn)行驗(yàn)證性檢測的系統(tǒng),然而這些系統(tǒng)并沒有采用線上的方式進(jìn)行檢測。
本文設(shè)計(jì)的基于Django的金屬在線硬度檢測系統(tǒng),以輕量級(jí)web框架Django為基礎(chǔ),利用機(jī)器學(xué)習(xí)的方法,對(duì)金屬的巴克豪森噪聲信號(hào)進(jìn)行信號(hào)分析與特征提取并訓(xùn)練,將訓(xùn)練好的模型加載到系統(tǒng)中以供硬度檢測,并且在系統(tǒng)中加入巴克豪森噪聲信息管理功能,可以上傳或下載巴克豪森噪聲信息文件,極大的方便了金屬硬度檢測的過程。
系統(tǒng)采用的是瀏覽器/服務(wù)器結(jié)構(gòu),使用權(quán)限分為兩種,分別是用戶權(quán)限和管理員權(quán)限,在登錄時(shí)為兩種權(quán)限提供兩個(gè)界面。系統(tǒng)為用戶提供的是用戶主界面,可用來在線檢測和查詢金屬試件信息。系統(tǒng)為管理員提供的是管理員主界面,除了包括用戶權(quán)限的所有功能之外,可以對(duì)用戶信息和金屬試件進(jìn)行維護(hù)工作。
用戶首先通過瀏覽器向系統(tǒng)服務(wù)器發(fā)出HTTP請(qǐng)求,Django接受到這個(gè)請(qǐng)求后會(huì)將它轉(zhuǎn)化為然后該對(duì)象被傳遞給 Request中間件處理,如果該中間件返回了Response,則直接傳遞給Response中間件做收尾處理,否則的話 Request中間件將訪問URL映射文件。在Django框架中,url.py文件定義了系統(tǒng)中所有的URL路由表,通過正則表達(dá)式的方法匹配對(duì)應(yīng)的URL-pattern,從而調(diào)用對(duì)應(yīng)的處理函數(shù)。本項(xiàng)目全部的處理函數(shù)被定義在view.py文件中,根據(jù)不同的請(qǐng)求調(diào)用view.py文件中指定的函數(shù),從而實(shí)現(xiàn)用戶的請(qǐng)求。當(dāng)處理函數(shù)需要訪問數(shù)據(jù)庫時(shí),Django框架通過內(nèi)置的MySQL適配器訪問本系統(tǒng)的MySQL數(shù)據(jù)庫,將需要的數(shù)據(jù)取出并加載到用戶請(qǐng)求對(duì)應(yīng)的模板頁面上,經(jīng)過渲染成HTML代碼后響應(yīng)給瀏覽器,最終展示給用戶。
整個(gè)系統(tǒng)包括兩部分:用戶系統(tǒng)和管理員系統(tǒng),在登錄模塊可以識(shí)別用戶類型。
用戶系統(tǒng)分為兩個(gè)子模塊,分別為試件信息查詢模塊和硬度檢測模塊。用戶可以通過上傳金屬試件的巴克豪森噪聲信號(hào)文件進(jìn)行在線的金屬硬度檢測,并可以查詢存儲(chǔ)在系統(tǒng)中的金屬試件信息,系統(tǒng)還為用戶提供了文件下載功能,可以獲取平臺(tái)提供的已經(jīng)標(biāo)注硬度的金屬試件的巴克豪森噪聲信號(hào)文件,以供用戶分析與研究。
管理員系統(tǒng)分為3個(gè)子模塊,分別為用戶信息管理模塊、試件信息管理模塊和硬度檢測模塊。管理員具有比用戶更高的權(quán)限,除了擁有在線硬度檢測和試件信息查詢功能外,還可以對(duì)用戶信息、金屬試件信息、金屬試件的巴克豪森噪聲信號(hào)文件進(jìn)行管理,管理員可以添加、刪除、修改、查詢用戶的信息和金屬試件信息,上傳新的金屬試件的巴克豪森噪聲信號(hào)文件到系統(tǒng)服務(wù)器中,擴(kuò)充系統(tǒng)的金屬試件樣本數(shù)量。下面對(duì)上述的子模塊從系統(tǒng)登錄模塊、信息管理模塊和硬度檢測模塊詳細(xì)介紹本系統(tǒng)。
為了實(shí)現(xiàn)既能隨時(shí)修改與添加存儲(chǔ)于系統(tǒng)中的金屬試件信息又能防止這些信息被非專業(yè)人員隨意修改,本系統(tǒng)設(shè)立了管理員和用戶兩個(gè)權(quán)限,系統(tǒng)登錄模塊就是實(shí)現(xiàn)在進(jìn)入系統(tǒng)時(shí)區(qū)分兩種權(quán)限,這個(gè)模塊設(shè)計(jì)的好壞直接影響著用戶體驗(yàn)與系統(tǒng)的安全性能。系統(tǒng)登錄的業(yè)務(wù)邏輯如圖1所示。
有效管理的課堂是指運(yùn)行順利、時(shí)間使用經(jīng)濟(jì)、學(xué)生能夠充分獲得學(xué)習(xí)機(jī)會(huì)的課堂。學(xué)生在學(xué)習(xí)之前需要一些必要的指導(dǎo),比如該如何做、什么時(shí)候可以以什么樣的方式在教室里活動(dòng)、該坐在哪里、什么時(shí)候可以或不可以打斷教師說話、音量不能超過多少分貝,等等。如果缺乏相關(guān)引導(dǎo),那么教師的教學(xué)無法開展,學(xué)生的學(xué)習(xí)也無法取得成效。
圖1 系統(tǒng)登錄邏輯圖
在系統(tǒng)登錄界面需要填寫兩個(gè)信息,分別是Username和Password,提交后前端將兩個(gè)數(shù)據(jù)傳遞到后臺(tái),與MySQL數(shù)據(jù)庫中存儲(chǔ)的用戶信息和管理員信息進(jìn)行比較,若Username不存在,則返回用戶名錯(cuò)誤,若Username正確但Password錯(cuò)誤,則返回密碼錯(cuò)誤,全正確后會(huì)會(huì)根據(jù)被賦予的不同權(quán)限進(jìn)入各自的系統(tǒng)。
信息管理模塊的主要功能是實(shí)現(xiàn)管理員對(duì)系統(tǒng)中所有信息進(jìn)行維護(hù)管理,包括用戶信息與金屬試件信息。由于本系統(tǒng)的Django框架在與數(shù)據(jù)庫交互上采用的是ORM(Object Relational Mapping)機(jī)制,可以根據(jù)對(duì)接的數(shù)據(jù)庫引擎,翻譯成對(duì)應(yīng)的sql語句,無需專門編寫數(shù)據(jù)庫訪問層代碼,直接編寫python代碼即可。在用戶信息管理模塊中包括用戶名和密碼兩個(gè)信息,管理員可以對(duì)現(xiàn)有的用戶進(jìn)行編輯與刪除操作,也可以添加新的用戶;在金屬試件信息管理系統(tǒng)中包括試件原號(hào)、維氏硬度和巴克豪森噪聲文件,試件原號(hào)、維氏硬度與用戶的用戶名和密碼操作相同,均為文本信息,在這里需要特別說明的是巴克豪森噪聲文件。作為金屬試件硬度檢測的依據(jù),系統(tǒng)會(huì)為每一個(gè)用戶提供試件的巴克豪森噪聲文件以供研究使用。管理員可以對(duì)信號(hào)文件進(jìn)行上傳與刪除處理,將上傳的文件放在服務(wù)器指定的路徑中,并與試件通過試件原號(hào)進(jìn)行綁定,使得用戶在需要時(shí)可以隨時(shí)下載。
本模塊是系統(tǒng)中最為核心的部分,完成了對(duì)用戶上傳的金屬試件樣本的硬度檢測功能。主要分為3個(gè)步驟:特征提取、模型訓(xùn)練和在線檢測。
2.3.1 特征提取
根據(jù)閱讀華中科技大學(xué)羅教授的文章可知[9],對(duì)于不同硬度材料的巴克豪森噪聲的AR譜同階展開的峰值的高度會(huì)隨著硬度的變化而變化,并且不易于受其他因素(如塑性形變、殘余應(yīng)力等)的影響,與硬度呈單一關(guān)系,比基于時(shí)域的信號(hào)分析方法魯棒性與準(zhǔn)確性更強(qiáng),因此本系統(tǒng)采用基于基于AR譜估計(jì)的信號(hào)分析方法。AR譜分析是利用AR模型計(jì)算隨機(jī)信號(hào)的能量譜、功率譜,即隨機(jī)信號(hào)自回歸分析,是一種被廣泛使用的現(xiàn)代功率譜計(jì)算方法[10]。AR譜估計(jì)分為三步:第一步,假設(shè)出于觀測的數(shù)據(jù)相符合的階數(shù)P,本系統(tǒng)為了更好的擬合數(shù)據(jù),使用了5個(gè)階次的展開,分別是4、8、16、32、64;第二步,根據(jù)部分采集的數(shù)據(jù)去估計(jì)AR譜中的參數(shù)。在自回歸模型中,利用式(1)檢測一個(gè)時(shí)間序列{X(n)}中的未知數(shù)據(jù)點(diǎn)的數(shù)值:
(1)
Y=XA+ε
(2)
其中:
Y=[x(p),x(p+1), …,x(N)]T
(3)
A=[a1,a2,…,ap]T
(4)
(5)
(6)
上述公式中,N為輸入信號(hào)的總數(shù)量,a1,a2,…,ap為所求的AR譜特征參數(shù),u(p),u(p+1), …,u(N)為白噪聲,T表示矩陣的轉(zhuǎn)置;根據(jù)最小二乘法原理可得到模型參數(shù)A的估計(jì)為:
A=(XTX)-1XTY
(7)
從而得到AR譜特征參數(shù)。
第三步,利用步驟二所得到的參數(shù)計(jì)算功率譜與能量譜。根據(jù)AR模型的假設(shè),計(jì)算單邊功率譜密度根據(jù)式(8)即可得到:
(8)
經(jīng)過上述步驟,p值分別取4、8、16、32、64,從而得到了巴克豪森噪聲5個(gè)階次的AR譜。但是因?yàn)椴杉降陌涂撕郎盘?hào)的 AR 譜上峰的數(shù)量并不相同,特征維度不統(tǒng)一,所以無法直接使用特征選擇方法結(jié)合機(jī)器學(xué)習(xí)或神經(jīng)網(wǎng)絡(luò)來進(jìn)行自動(dòng)預(yù)測。本發(fā)明先對(duì)AR譜求一階導(dǎo),濾除噪聲。然后求二階導(dǎo)數(shù),把一階導(dǎo)數(shù)的兩部分融合成一個(gè)谷,從而去除冗余信息,因此最后對(duì)于每一個(gè)巴克豪森噪聲信號(hào)來說,特征源是 AR譜信號(hào)的二階導(dǎo)數(shù),而提取的特征分別的是AR 二階導(dǎo)數(shù)的每個(gè)谷的谷寬,谷深和谷值點(diǎn)所在的位置3個(gè)特征。得到上述特征后再使用kmeans算法對(duì)所有谷進(jìn)行聚類,并按照每個(gè)谷所歸屬的類別對(duì)得到的特征進(jìn)行編碼,規(guī)則為若一個(gè)有某類谷則標(biāo)1,無則標(biāo)0。從而將每個(gè)樣本的特征數(shù)量進(jìn)行了統(tǒng)一。
2.3.2 模型訓(xùn)練
本步驟的輸入為上一步得到的歸一化后的特征,將特征輸入到改進(jìn)BP神經(jīng)網(wǎng)絡(luò)。BP神經(jīng)網(wǎng)絡(luò)是一種基于感知機(jī)的多層神經(jīng)網(wǎng)絡(luò),其主要特點(diǎn)是信號(hào)前向傳遞,而誤差后向傳播,通過不斷調(diào)節(jié)網(wǎng)絡(luò)權(quán)重值,擬合真實(shí)輸出[12]。但由于隨機(jī)初始權(quán)值的設(shè)定導(dǎo)致每次訓(xùn)練的結(jié)果不同,使得BP神經(jīng)網(wǎng)絡(luò)模型的性能不穩(wěn)定,為了提高模型的魯棒性,本系統(tǒng)采用改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)模型。改進(jìn)BP神經(jīng)網(wǎng)絡(luò)的方法是先采用行采樣的方式,每次抽取訓(xùn)練集的75%作為訓(xùn)練子集,一共采樣10次。經(jīng)過這些子集就學(xué)習(xí)出10個(gè)BP神經(jīng)網(wǎng)絡(luò),將需要檢測的樣本分別放入其中,得到10個(gè)檢測結(jié)果,檢測結(jié)果求和取均值則為最終檢測結(jié)果,整體流程如圖2所示。本系統(tǒng)的模型是在離線環(huán)境下訓(xùn)練的,訓(xùn)練集為720個(gè)巴克豪森噪聲信號(hào)文件,標(biāo)簽為金屬的硬度,單位是維氏硬度。
圖2 集成化BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練流程圖
將此模型在測試集中進(jìn)行測試,其中測試集包含180個(gè)信號(hào)文件作為測試樣本,測試結(jié)果的均方誤差為82.4,而傳統(tǒng)算法(使用巴克豪森噪聲信號(hào)的峰值、矯頑力、左半峰寬、右半峰寬、包絡(luò)線大于閾值的平均值、剩磁作為輸入特征)結(jié)果的均方誤差為229.8,說明本模型具有良好的性能。
2.3.3 在線檢測
通過上述的步驟訓(xùn)練好模型后,需要將模型導(dǎo)入到服務(wù)端與系統(tǒng)對(duì)接。為了方便調(diào)用和數(shù)據(jù)模型的持久化存儲(chǔ),本系統(tǒng)采用的方案是將上述訓(xùn)練好的10個(gè)BP神經(jīng)網(wǎng)絡(luò)模型通過python的pickle模塊保存成.pkl格式文件,導(dǎo)入到服務(wù)器端以供調(diào)用。pickle模塊可以將數(shù)據(jù)對(duì)象保存到文件,在調(diào)用時(shí)可通過讀取.pkl文件重構(gòu)成python對(duì)象。
用戶在線上傳需檢測的金屬試件信號(hào)文件,后臺(tái)得到文件后對(duì)其進(jìn)行特征提取,將提取好的特征輸入到10個(gè)模型中,對(duì)得到的預(yù)測結(jié)果加和求均值,得到的數(shù)值則為系統(tǒng)預(yù)測的金屬硬度,后臺(tái)將金屬硬度傳遞到前端的展示頁面,從而完成了在線檢測功能。
本系統(tǒng)采用的開發(fā)模式為MTV模式,進(jìn)系統(tǒng)分為3個(gè)部分:模型(Model)、模板(Template)和視圖(View)[13],其中模型是數(shù)據(jù)存取層,處理與數(shù)據(jù)相關(guān)的業(yè)務(wù),負(fù)責(zé)業(yè)務(wù)對(duì)象和數(shù)據(jù)庫的關(guān)系映射(ORM);模板是展示層,負(fù)責(zé)如何把頁面展示給用戶(html);視圖是業(yè)務(wù)邏輯層,負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)時(shí)候調(diào)用Model和Template。這種開發(fā)模式關(guān)鍵的優(yōu)勢在于各種組件都是松耦合的。這樣,每個(gè)由 Django驅(qū)動(dòng)的Web應(yīng)用都有著明確的目的,并且可獨(dú)立更改而不影響到其它的部分。
用戶可以在此模塊對(duì)系統(tǒng)中提供的信息進(jìn)行查詢,包括金屬試件的硬度信息的查詢和金屬試件信號(hào)文件的下載,如圖3所示。
圖3 信息查詢頁面展示
本模塊需要管理員權(quán)限才能使用,管理員可以查詢與管理用戶和試件信息,包括對(duì)信息的增查改刪,并均已彈窗的方式進(jìn)行展現(xiàn),如圖詢用戶信息并對(duì)用戶進(jìn)行一系列操作,包括對(duì)現(xiàn)有用戶的編輯與刪除和新增用戶,如圖4(a)和4(b)所示。
圖4 信息管理展示
在本模塊中,用戶可以通過上傳金屬試件的巴克豪森噪聲文件進(jìn)行硬度檢測。頁面詳情如圖5(a)所示,首先點(diǎn)擊“選擇文件”按鈕,從本地選擇待檢測文件并上傳,后臺(tái)讀取到文件后對(duì)文件進(jìn)行特征提取,將提取的特征輸入到離線訓(xùn)練好的10個(gè)改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)模型中,加和求均值后將最后的結(jié)果展現(xiàn)在頁面上,如圖5(b)所示。
圖5 在線檢測模塊
基于Django框架,結(jié)合MySQL數(shù)據(jù)庫和改進(jìn)BP神經(jīng)網(wǎng)絡(luò)模型,設(shè)計(jì)并開發(fā)了一套在線硬度檢測系統(tǒng)。系統(tǒng)包括用戶和管理員兩個(gè)權(quán)限,提供了金屬信息查詢、金屬試件巴克豪森噪聲文件下載、用戶信息維護(hù)管理和金屬硬度檢測功能。經(jīng)試驗(yàn)證明,系統(tǒng)有如下幾個(gè)優(yōu)點(diǎn):第一,使用了新的硬度檢測方法,在測試集(共有180個(gè)測試樣本)中的均方誤差為82.4,而傳統(tǒng)算法的均方誤差為229.8,說明本方法完全優(yōu)于傳統(tǒng)方法;第二,系統(tǒng)能夠極大的方便金屬硬度檢測過程,并可以對(duì)金屬數(shù)據(jù)進(jìn)行有效的存儲(chǔ)與調(diào)用下載,解決了以往數(shù)據(jù)管理不規(guī)范的問題;第三,系統(tǒng)搭建使用了Django,此框架方便部署,強(qiáng)大的緩存技術(shù)提高了頁面的加載速度,使得用戶獲得了更好的使用體驗(yàn)。綜上所述,基于Django的金屬在線硬度檢測系統(tǒng),在金屬試件硬度檢測方面有著廣闊的應(yīng)用場景。