賈穎淼,李紫蕊,范書瑞,張 艷
(河北工業(yè)大學(xué)電子信息工程學(xué)院,天津 300401)
動態(tài)氣體的分析在檢測氣體泄漏源[1],環(huán)境監(jiān)測[2-3],估計(jì)氣源距離[4]等方面有巨大應(yīng)用。在復(fù)雜的動態(tài)環(huán)境中,傳感器的響應(yīng)曲線受周圍環(huán)境的溫度,濕度以及空氣的方向和速度的影響[5-6],導(dǎo)致氣體羽流發(fā)生復(fù)雜的不規(guī)則變化,另外,當(dāng)存在不同種類的氣體時,復(fù)雜環(huán)境也會導(dǎo)致多種氣體的不均勻分布。
為了對室外復(fù)雜環(huán)境中的氣體進(jìn)行準(zhǔn)確識別,深度學(xué)習(xí)被應(yīng)用到氣體識別領(lǐng)域中。Mishra等人[7]利用最簡單的四神經(jīng)元人工神經(jīng)網(wǎng)絡(luò)對進(jìn)行了歸一化差分處理(NDSRT)的傳感器數(shù)據(jù)進(jìn)行分類,把原始傳感器響應(yīng)轉(zhuǎn)換成為具有濃度不變性的虛擬多傳感器使用,所有的測試樣本在變換后都得到了準(zhǔn)確分類。張?zhí)炀热薣8]使用LSTM基于煤礦實(shí)際生產(chǎn)時檢測的時間序列預(yù)測瓦斯?jié)舛?,可以較好的預(yù)測出瓦斯?jié)舛?,預(yù)測誤差在0.000 5~0.040 0之間,在拐點(diǎn)處的預(yù)測誤差也保持在0.014以下。之后,他又提出了基于RNN的多參數(shù)融合預(yù)測模型對瓦斯?jié)舛冗M(jìn)行預(yù)測[9],對瓦斯?jié)舛葧r間序列的預(yù)測精度較高,可作為礦井瓦斯?jié)舛阮A(yù)測的參考模型。胡志偉等人[2]利用K-最近鄰算法(KNN)與深度卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合,實(shí)現(xiàn)了空氣質(zhì)量的短期預(yù)測。但是模型較為復(fù)雜,數(shù)據(jù)處理繁瑣。但以上算法均在PC端實(shí)現(xiàn),具有訓(xùn)練的模型大,參數(shù)多;訓(xùn)練緩慢;功耗大和成本高等問題,如何在終端設(shè)備上運(yùn)轉(zhuǎn)深度學(xué)習(xí)相關(guān)算法,實(shí)現(xiàn)模型的輕量化人工智能的設(shè)計(jì),是我們還面臨的一項(xiàng)挑戰(zhàn)。
陳寅生等人[10]利用基于KPCA和MRVM算法實(shí)現(xiàn)了二元混合氣體的準(zhǔn)確識別,準(zhǔn)確率達(dá)到了99.83%。李紫蕊等人[11]研究了基于隨機(jī)森林和粒子群優(yōu)化的SVR混合氣體的定量分析方法,可以準(zhǔn)確的對混合氣體進(jìn)行分類并且預(yù)測氣體濃度。但是由于EAIDK-310支持的安裝包的格式為aarch64類型文件,而sklearn官網(wǎng)上提供的安裝包沒有此種類型的文件,這種情況導(dǎo)致sklearn在EAIDK-310上無法安裝,從而論文中提出的方法暫時無法在EAIDK-310上部署調(diào)用。
為解決上述問題,本文研究了基于CNN的氣體濃度預(yù)測方法,提出了用于動態(tài)氣體識別的輕量級卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)FD-CNN(fast detection-convolutional neural network),采用OPEN AI LAB的EAIDK-310開發(fā)板作為嵌入式端智能平臺,將在PC端訓(xùn)練好的氣體模型部署到嵌入式端實(shí)現(xiàn)氣體的成分識別以及濃度預(yù)測,測試模型在嵌入式端的有效性和可靠性,得到空氣質(zhì)量分析結(jié)果。
趙小今提出的1D-CNN[12]、Guangfen Wei提出的改進(jìn)型LeNet-5[13]Peng Pai提出的GasNet[14]均是基于CNN的氣體識別方法,與這三種方法相比,本文提出的網(wǎng)絡(luò)結(jié)構(gòu)層數(shù)較少,只包括一個卷積層和一個最大池化層用于提取和選擇特征,一層Flatten層將多維數(shù)據(jù)轉(zhuǎn)換為一維數(shù)據(jù),兩層全連接層將學(xué)習(xí)到的分布式特征映射到樣本標(biāo)簽中。
如果將模型應(yīng)用于動態(tài)氣體的成分識別,最后一層全連接層有5個神經(jīng)單元,激活函數(shù)選擇“Softmax”,使輸出結(jié)果為測試樣本屬于各個類別的概率;如果將模型應(yīng)用于回歸預(yù)測,網(wǎng)絡(luò)最后一層只有一個神經(jīng)單元,激活函數(shù)選擇“l(fā)ineaer”,使輸出結(jié)果預(yù)測的氣體濃度。如圖1所示。
圖1 FD-CNN網(wǎng)絡(luò)結(jié)構(gòu)
網(wǎng)絡(luò)中,卷積核大小為3×3,數(shù)量為64個,Padding選擇為SAME,步長為1,以保證卷積層的輸入輸出形狀不變,池化層步長為2,減少輸出特征圖的大小。第一層全連接層有128個神經(jīng)單元。網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化參數(shù)選擇如表1,權(quán)重W的初始化方式為Glorot uniform initializer,由均勻分布來初始化數(shù)據(jù),偏置b初始化為0。利用Adam進(jìn)行優(yōu)化,其超參數(shù)設(shè)置為默認(rèn)值,Adam優(yōu)化器實(shí)現(xiàn)簡單,對內(nèi)存需求少,其超參數(shù)具有很好的解釋性,通常無需調(diào)整,屬于默認(rèn)工作性能比較優(yōu)秀的優(yōu)化器,適合本問題。用均方誤差(MSE)作為優(yōu)化的目標(biāo)函數(shù),均方誤差代表預(yù)測值與真實(shí)值之差平方的平均值,計(jì)算公式如式(1)。m為預(yù)測樣本數(shù)量,yi為第i個樣本的預(yù)測值,為第i個樣本的真實(shí)值。
表1 參數(shù)設(shè)置
訓(xùn)練過程中選用隨機(jī)梯度下降法進(jìn)行多次迭代訓(xùn)練,迭代次數(shù)設(shè)置為150,在每次訓(xùn)練迭代中,從訓(xùn)練數(shù)據(jù)選擇N個樣本作為一批數(shù)據(jù)而不進(jìn)行替換,然后,利用神經(jīng)網(wǎng)絡(luò)的正向傳播來計(jì)算損耗,利用反向傳播來更新參數(shù)。在反向傳播中,通過最小化損耗對θ的梯度乘以一個小的步長α(稱為學(xué)習(xí)率)的梯度來更新每層的參數(shù)θ(包括權(quán)重W和偏置b),如式(2)。
對動態(tài)氣體進(jìn)行成分識別時,輸入樣本數(shù)據(jù)的大小是100×8,經(jīng)過150次迭代訓(xùn)練,訓(xùn)練過程中損失值和準(zhǔn)確率的變化如圖2,其中帶“+”的代表訓(xùn)練集損失,平滑曲線代表訓(xùn)練集準(zhǔn)確率,可以看到在訓(xùn)練過程中,損失值下降,準(zhǔn)確率上升,最后損失值平穩(wěn)在0.02左右,準(zhǔn)確率平穩(wěn)在98%。
圖2 氣體成分識別模型訓(xùn)練時損失和準(zhǔn)確率變化
對混合氣體進(jìn)行回歸預(yù)測時,利用文獻(xiàn)[11]中預(yù)處理后的數(shù)據(jù),網(wǎng)絡(luò)結(jié)構(gòu)的輸入數(shù)據(jù)尺寸為(1,4,1),即每個訓(xùn)練樣本的大小為1×4,只有1個通道。經(jīng)過150次迭代訓(xùn)練,損失值和MAE的變化過程如圖3所示,其中帶“+”的代表訓(xùn)練集損失,平滑曲線代表訓(xùn)練集MAE,可以看到在訓(xùn)練的過程中,損失值和MAE都在不斷地下降,最后損失值平穩(wěn)在16附近,MAE平穩(wěn)在2附近。
圖3 氣體濃度預(yù)測模型訓(xùn)練時損失和MAE的變化
模型的部署完整流程圖如圖4所示,模型由計(jì)算機(jī)端部署到嵌入式端。在windows系統(tǒng)下利用Keras框架訓(xùn)練得到的分析模型為.h5文件,首先將其轉(zhuǎn)換為Tensoflow的.pb文件,然后在Ubuntu系統(tǒng)中利用tengine模型轉(zhuǎn)換工具將模型由.pb文件轉(zhuǎn)換為.tmfile文件,以上操作均可以在計(jì)算機(jī)端完成,最后在EAIDK-310板子上的Linux系統(tǒng)下完成模型的調(diào)用與氣體的分析。
圖4 模型部署流程圖
通過第1節(jié)PC端的訓(xùn)練,我們得到了FD-CNN.h5模型,此模型是在Kears框架下利用CPU訓(xùn)練得到的模型,h5文件包含模型的結(jié)構(gòu),以便重構(gòu)該模型;模型的權(quán)重;訓(xùn)練配置(損失函數(shù)、優(yōu)化器等)和優(yōu)化器的狀態(tài)。而嵌入式端Tengine的模型文件為.tmfile文件,因此需要將FD-CNN.h5文件轉(zhuǎn)換為FD-CNN.tmfile文件。
Tengine的模型轉(zhuǎn)換工具僅支持Caffe、Onnx、Mxnet、Tensorflow或tf-lite模型向tmfile模型的轉(zhuǎn)換,因此首先要在計(jì)算機(jī)端的windows系統(tǒng)下將.h5模型轉(zhuǎn)換為Tensorflow的.pb模型。.pb文件包含了計(jì)算圖,可以從中得到所有operators的細(xì)節(jié),也包括tensors和Variables定義,因此只能從中恢復(fù)計(jì)算圖。
我們首先讀取載入FD-CNN.h5模型文件,識別模型網(wǎng)絡(luò)中的張量數(shù)據(jù)的類型/格式、運(yùn)算單元的類型和參數(shù)、計(jì)算圖的結(jié)構(gòu)和命名規(guī)范,以及它們之間的其他關(guān)聯(lián)信息。然后將得到的模型結(jié)構(gòu)和模型參數(shù)信息翻譯成Tensorflow框架支持的代碼格式。在Tensorflow框架下保存模型,即可得到FD-CNN.pb模型文件。
將.pb模型利用模型轉(zhuǎn)換工具轉(zhuǎn)換為.tmfile,命令格式為:
[Usage]:./install/tool/convert_model_to_tm[-h][-f file_format][-p proto_file][-m model_file][-o output_tmfile]
convert_model_to_tm是tengine提供的模型轉(zhuǎn)換工具,其中,-h代表help選項(xiàng),-f指定模型框架類型,此處指定tensorflow,-m指定源模型路徑,-o指定轉(zhuǎn)換后的Tengine模型路徑。
EAIDK-310上自帶的操作系統(tǒng)為Fedora28,在系統(tǒng)上進(jìn)行的模型遷移和部署操作都是基于Tengine框架的,因此首先要利用下載工具下載tengine源碼,安裝依賴包,并編譯源碼。
Tengine框架支持Caffe、TensorFlow等模型文件,可以在此開源框架下進(jìn)行模型的測試工作。Tengine核心API流程如圖5所示,首先利用init_tengine函數(shù)初始化Tengine,此函數(shù)僅調(diào)用一次,然后創(chuàng)建Tengine計(jì)算圖,在運(yùn)行前分配所需資源,接著運(yùn)行Tengine圖推理,推理完成之后使用兩次postrun_graph函數(shù)停止運(yùn)行圖并釋放所占資源,最后銷毀創(chuàng)建的計(jì)算圖。
圖5 Tengine核心流程
本文用于動態(tài)氣體混合物的快速成分識別的數(shù)據(jù)是TGM數(shù)據(jù)集[15],此數(shù)據(jù)集在風(fēng)洞中獲得,擁有兩個獨(dú)立氣源,其中一個氣源釋放乙烯氣體,另外一個氣源釋放一氧化碳(CO)或者甲烷氣體,不同濃度的氣體隨著湍流自然混合,由8個化學(xué)電阻性氣體傳感器收集。因此完整的數(shù)據(jù)集由重復(fù)6次的30種氣體組合組成,因此一共進(jìn)行了180次測量,得到了180個樣本,每次測量時間是300s。數(shù)據(jù)集中有甲烷(Met)、乙烯(Eth)、一氧化碳(CO)、乙烯-一氧化碳(Eth-CO)、乙烯-甲烷(Eth-Met)五種類別的樣本,同時每類樣本中混合氣體的濃度并不相同,對數(shù)據(jù)進(jìn)行動態(tài)時間規(guī)整(Dynamic Time Warping,DTW)預(yù)處理,以及滑動窗口再取樣,以增加樣本數(shù)量,減小樣本尺寸,使每個樣本的維數(shù)為(2970,8),預(yù)處理后得到的樣本集如表2。
表2 預(yù)處理后的數(shù)據(jù)集
由于數(shù)據(jù)集種各個類別的數(shù)量不同,使用分層抽樣劃分訓(xùn)練集和測試集,其中,訓(xùn)練集占90%,測試集占10%,此次分層抽樣得到訓(xùn)練集中3 672個樣本,測試集中408個樣本。訓(xùn)練集用于FD-CNN模型的訓(xùn)練,測試集用于計(jì)算機(jī)端以及嵌入式端模型的測試。
對混合氣體進(jìn)行回歸預(yù)測時,實(shí)驗(yàn)樣本基于UCI數(shù)據(jù)集[16],該數(shù)據(jù)集由不同濃度的甲烷、乙烯、空氣以及其混合物在16個傳感器(TGS2600、TGS2602、TGS2610、TGS2620(每種類型有4個單元))的陣列下的響應(yīng)組成,持續(xù)測量的時間為10 486 s。對數(shù)據(jù)進(jìn)行歸一化以及主成分分析后,發(fā)現(xiàn)前4個主成分的累計(jì)貢獻(xiàn)率達(dá)到99.69%,因此前4個主成分足以代表的特征信息。
本文選取15 499行單一氣體甲烷的數(shù)據(jù)進(jìn)行實(shí)驗(yàn),預(yù)測其濃度。經(jīng)過特征提取后,數(shù)據(jù)大小變?yōu)?5 499×4。對降維后的數(shù)據(jù)按照1∶1的比例劃分訓(xùn)練集和測試集,其中訓(xùn)練集用于模型的訓(xùn)練,測試集用于測試PC端訓(xùn)練模型的準(zhǔn)確率以及模型部署在嵌入式端之后的效果。測試集中一共包含7750個測試樣本(每個樣本代表1 s的數(shù)據(jù))。
對動態(tài)氣體進(jìn)行成分識別時,將提出的FD-CNN模型與1D-CNN,Improved LeNet-5,GasNet進(jìn)行比較。由于本次實(shí)驗(yàn)樣本中有5中類別,因此我們需要使用多分類的評價指標(biāo)來衡量他的分類性能,針對多分類模型的評價,可以將多分類問題轉(zhuǎn)換為二分類問題,這樣可以得到模型預(yù)測的準(zhǔn)確率,Precision,Recall,F(xiàn)1-score,AUC等。除此之外,我們還可以利用直接定義的多分類指標(biāo)Kappa系數(shù)以及海明距離等,如表3所示。此外,我們還比較了模型的訓(xùn)練時間,模型預(yù)測樣本的時間,以及不同模型的慘呼量來衡量模型的效率,如表4所示。實(shí)驗(yàn)的所有模型使用的訓(xùn)練和測試數(shù)據(jù)相同。
表4 不同模型的效率比較
從表3中可以看出,GasNet的準(zhǔn)確率、Precision、Recall和F1-score在四個模型中都是最好的,本文提出的模型FD-CNN在準(zhǔn)確率和Precision上略差于GasNet,但AUC比GasNet較好,除1D-DCNN外,其余三個模型的AUC均在0.99以上,相差不大。KAPPA系數(shù)和海明距離是常用的多分類評價指標(biāo),KAPPA系數(shù)在實(shí)際應(yīng)用中一般取值[0,1],系數(shù)的值越高,代表模型實(shí)現(xiàn)的分類準(zhǔn)確度越高,四個模型中GasNet的kappa系數(shù)最高,其次是FD-CNN和Improved LeNet5,1D-DCNN最小。海明距離衡量預(yù)測標(biāo)簽與真實(shí)標(biāo)簽之間的距離,取值在也在[0.1]之間,其值越接近0,證明預(yù)測標(biāo)簽與真實(shí)標(biāo)簽之間距離越小,預(yù)測越準(zhǔn)確,四個模型中,也是GasNet的海明距離值最小,其次是FD-CNN。所以,但從分類性能來看,GasNet的分類性能略優(yōu)于FD-CNN,但是兩者差距不大,兩者的分類性能明顯優(yōu)于Improved LeNet5和1D-DCNN模型。
表3 不同模型的分類性能
如果從模型訓(xùn)練的效率來看,表4可以明顯看出GasNet的訓(xùn)練參數(shù)最多,PC端訓(xùn)練模型的消耗時間也明顯最長,其消耗時間是FD-CNN的4倍左右,模型預(yù)測所需要的時間更是FD-CNN的16倍,這是因?yàn)镚asNet的模型結(jié)構(gòu)比FD-CNN復(fù)雜的多,除去輸入層和輸出層,他有12次卷積歸一化組合,共26層,這也是他的分類性能較好的原因。而FD-CNN用6層結(jié)構(gòu)可以與GasNet模型達(dá)到相似的分類性能,是由于選取的網(wǎng)絡(luò)層均具有代表意義,可以以最少的層數(shù)達(dá)到最好的分類效果。與Improved LeNet5相比,F(xiàn)D-CNN的參數(shù)量雖然更多,但是模型訓(xùn)練所需要的時間以及預(yù)測時間比Improved LeNet5少,且其分類性能也明顯優(yōu)于Improved LeNet5。對于1D-DCNN,他的參數(shù)量與FD-CNN類似,但是預(yù)測時間是FD-CNN的6倍。
除了模型的分類性能與效率,本模型是為了快速檢測設(shè)計(jì)的,因此對于輸入數(shù)據(jù)的長度也有要求,F(xiàn)D-CNN和ID-DCNN只需要輸入10 s的數(shù)據(jù)便可得到分類結(jié)果,Improved LeNet5需要輸入180s的數(shù)據(jù),而分類性能最好的GasNet則需要300 s的數(shù)據(jù)才能得到分類結(jié)果。
綜上所述,本文提出的FD-CNN分類性能與復(fù)雜的GasNet相似,但結(jié)構(gòu)比GasNet簡單的多,消耗時間是GasNet的1/16,其分類性能又明顯優(yōu)于效率相似的Improved LeNet5,各項(xiàng)指標(biāo)均比Improved LeNet好,因此FD-CNN可以在網(wǎng)絡(luò)層數(shù)最少且訓(xùn)練時間相對較短的情況下可以實(shí)現(xiàn)出色的測試準(zhǔn)確率,在快速檢測場景中,可以達(dá)到較高的準(zhǔn)確率與效率。
對動態(tài)氣體進(jìn)行濃度預(yù)測時,利用FD-CNN模型對7 750個測試樣本進(jìn)行預(yù)測,并將預(yù)測結(jié)果與基于粒子群優(yōu)化的SVR方法作比較,以均方根誤差(RMSE),均方誤差(MSE),平均絕對誤差(MAE)以及R2為評價指標(biāo),評判模型擬合度的好壞,結(jié)果如表5。
表5 PC端濃度預(yù)測評價指標(biāo)結(jié)果
由表5可以看出PSO+SVR的RMSE、MSE、MAE值均較小,但R2的值較大,證明PSO+SVR單純在計(jì)算機(jī)端的回歸預(yù)測效果好于FD-CNN,但是由于EAIDK-310的限制,sklearn安裝包無法在EAIDK-310上安裝,導(dǎo)致PSO+SVR模型無法部署在嵌入式端,并且發(fā)現(xiàn)使用FD-CNN的模型于PSO+SVR的R2只相差0.02,差距較小,也可以較好的進(jìn)行回歸預(yù)測,在測試集中選取140個樣本點(diǎn)畫出利用FD-CNN預(yù)測得到的預(yù)測濃度以及實(shí)際濃度的曲線圖如圖6??梢钥吹綄?shí)際濃度與預(yù)測濃度曲線基本重合,圖7是預(yù)測誤差曲線圖,可以看到,隨機(jī)選取的140個樣本中,預(yù)測誤差最大為8×10-6,大部分誤差在4×10-6以下,圍繞2×10-6波動。
圖6 計(jì)算機(jī)端FD-CNN濃度預(yù)測結(jié)果
圖7 FD-CNN濃度預(yù)測誤差
將FD-CNN部署在EAIDK-310上,調(diào)用其模型運(yùn)行應(yīng)用程序?qū)y試集進(jìn)行測試,測試集中共有408個測試樣本,每個樣本中包含10 s的數(shù)據(jù),表6中展示了隨機(jī)挑選的10個樣本的識別結(jié)果,識別完成后模型輸出預(yù)測的最高概率及其對應(yīng)類別,可以看到這10個樣本全部識別正確,預(yù)測為此類別的概率全部為1.000 0(輸出保留四位小數(shù)),識別效果較好,同時每個樣本的消耗時間在13 ms以內(nèi),識別速度很快,效率較高。
表6 嵌入式端FD-CNN成分識別結(jié)果
修改模型中的最后一層全連接層以及激活函數(shù),對甲烷氣體的濃度進(jìn)行預(yù)測,調(diào)用模型執(zhí)行應(yīng)用程序后,得到對7 750個測試樣本的濃度預(yù)測結(jié)果。表7中列出了隨機(jī)挑選的10個樣本的預(yù)測結(jié)果以及進(jìn)行濃度預(yù)測所消耗的時間。
表7 嵌入式端FD-CNN濃度預(yù)測結(jié)果
可以看出10個樣本的預(yù)測誤差均在6×10-6以下,其中有5個樣本預(yù)測誤差在1×10-6以下,發(fā)現(xiàn)預(yù)測準(zhǔn)確度很高,預(yù)測誤差較小,10個樣本的消耗時間均在1 ms以下,可以知道預(yù)測速度很快,效率較高。
本文提出一種基于嵌入式CNN的氣體分析方法FD-CNN,進(jìn)行了氣體分析模型在嵌入式端的移植部署,將計(jì)算機(jī)端訓(xùn)練好的FD-CNN模型通過格式轉(zhuǎn)換、模型調(diào)用等步驟部署到EADIK-310上,在嵌入式端測試模型的有效性。實(shí)驗(yàn)結(jié)果證明,提出模型可以實(shí)現(xiàn)快速檢測條件下的氣體識別,識別準(zhǔn)確率和效率均高于其他模型,在濃度預(yù)測方面,與PSO+SVR的預(yù)測效果近似相同,R2達(dá)到了0.994,與PSO+SVR僅僅相差0.02,識別準(zhǔn)確率較高。經(jīng)FD-CNN部署在嵌入式端后,發(fā)現(xiàn)成分識別和濃度預(yù)測的準(zhǔn)確率都比較高,隨機(jī)抽取的10個樣本,在嵌入式端全部識別正確,且預(yù)測的濃度誤差也保持在6×10-6以內(nèi),成分識別消耗時間保持在12 ms~13 ms之間,濃度預(yù)測的消耗時間在1 ms以下,計(jì)算效率很高。此次測試證明了在EAIDK-310上可以以高效率、高準(zhǔn)確率實(shí)現(xiàn)空氣質(zhì)量分析。