丁文超,張俊寶,陰庚雷
(中原工學院 計算機學院,河南 鄭州 450007)
隨著Wi-Fi技術(shù)的發(fā)展以及相關(guān)硬件價格的下降,生活中各種場所幾乎均有Wi-Fi信號的存在。Wi-Fi信號不僅能傳輸數(shù)據(jù),利用其信道狀態(tài)信息還能進行人體動作識別[1]。
傳統(tǒng)的動作識別需要借助如加速度計、陀螺儀等接觸式傳感設備[2]對用戶進行監(jiān)測來識別用戶的動作,又或者是借助攝像頭等非接觸設備的基于視覺[3]的動作識別。相較于傳統(tǒng)的識別方式,基于CSI的動作識別利用的是環(huán)境中廣泛存在的Wi-Fi信號,具有不依賴特殊傳感器、成本低、易擴展、不存在隱私泄露等優(yōu)點。
但是當前應用大部分都依賴于手工選擇子載波,構(gòu)建分類特征。因此,該文提出一種基于學習的識別方法,無需專業(yè)知識構(gòu)建Wi-Fi傳播模型,即可進行訓練識別。
由于采集數(shù)據(jù)時網(wǎng)卡報告了多組子載波的CSI,且不同的子載波對于環(huán)境變化的敏感度不同,所以要選取合適的子載波來提取CSI數(shù)據(jù)。WiFall[4]將30組子載波上的CSI取平均值作為訓練數(shù)據(jù)來檢測摔倒動作的發(fā)生。LBR[5]選取CSI方差第二大的子載波作為有效子載波來提取CSI。上述方法均根據(jù)某個統(tǒng)計值來選擇子載波,需要大量的時間研究數(shù)據(jù)從而選擇合適的統(tǒng)計特征。該文提出一種基于SOM[6]聚類的子載波選擇方法。相同的動作,某個子載波上的CSI數(shù)據(jù)聚類生成多個簇,則說明CSI存在多種變化模式數(shù)據(jù)間差異較大,數(shù)據(jù)采集過程中該子載波易受環(huán)境干擾。因此對于每個動作,該文選取所有子載波聚類后生成簇較少的子載波作為有效子載波。
在訓練特征的選擇上,CARM[7]使用離散小波變換從不同時間尺度的不同活動中提取頻率分量作為特征。WiSee[8]從手勢動作中提取對應的多普勒頻移特征來識別手勢。兩種方法均需手動設計特征。該文提出使用GASF[9]方法將CSI轉(zhuǎn)換成圖像從而利用CNN強大的特征提取能力自動提取特征。
由于實驗對象的運動速度以及采樣頻率的差異,相同動作所收集到的CSI數(shù)據(jù)長度可能不同,但神經(jīng)網(wǎng)絡輸入數(shù)據(jù)的長度需要保持一致。所以要對收集到的CSI數(shù)據(jù)進行截取,以保證數(shù)據(jù)長度相同,并且截取到的部分需要包含動作發(fā)生的整個過程。WiFinger[10]根據(jù)統(tǒng)計特征來檢測手勢動作的起始點和結(jié)束點。文獻[11]直接采用了人工截取的方式。上述方法需要大量的人力與計算資源來截取數(shù)據(jù)。文中的CRNN網(wǎng)絡使用CTC[12]作為損失函數(shù),能夠使網(wǎng)絡自動對齊輸入數(shù)據(jù)中發(fā)生動作的部分,無需對數(shù)據(jù)進行截取。
深度學習網(wǎng)絡需要大量的數(shù)據(jù)來進行訓練從而防止模型過擬合,但是人工采集大量的數(shù)據(jù)往往是不容易的。因此,該文通過添加噪音、縮放、滑動平均等方法增加數(shù)據(jù)量,從而提高模型的魯棒性。
CSI代表了信號在傳輸過程中所產(chǎn)生的時延、幅度衰減以及相位偏移等變化。換句話說,CSI表征了附近環(huán)境的無線特性。假設發(fā)送端信號為X(f,t),接收端信號為Y(f,t),那么有[1]:
Y(f,t)=H(f,t)·X(f,t)+n
(1)
其中,H(f,t)為信道頻率響應矩陣,CSI就是對H(f,t)的估計。n為高斯白噪聲。對于單個子載波,CSI的形式如下:
Hi=|Hi|ej·sinθ
(2)
其中,|Hi|和θ分別表示CSI的幅度和相位。由于商用網(wǎng)卡接收到的兩個連續(xù)的CSI間相位差可能很大,因此該文只使用CSI的振幅進行動作識別。
圖1所示為方法流程,由信號采集、數(shù)據(jù)處理、訓練預測三個階段組成。其中信號采集階段將在第3章詳細闡述。

圖1 方法流程
3.1.1 濾波去噪
由于人體動作的頻率較低以及環(huán)境中高頻噪音存在,所以原始CSI需要濾除高頻分量,這里使用常用的巴特沃斯低通濾波器進行濾波[1]。巴特沃斯低通濾波器的增益G2(ω)為:
(3)
其中,n表示濾波器的階數(shù),ωc表示截止頻率即功率下降為-3分貝時的頻率,G0是直流增益。頻率低于ωc的部分會以G0的增益通過,而頻率高于ωc的就會被抑制。由于手部動作頻率范圍在0.3 Hz到4.5 Hz之間[13],因此設置截止頻率為5 Hz,考慮到濾波效果與計算成本濾波器階數(shù)設置為5。圖2所示為濾波前后對比,可以看出濾波后曲線變得平滑高頻噪聲被抑制。

圖2 低通濾波前后CSI幅值對比
3.1.2 子載波選擇
SOM[6]是一種無監(jiān)督聚類的神經(jīng)網(wǎng)絡,通過學習自動對輸入進行聚類,且能保持數(shù)據(jù)的拓撲結(jié)構(gòu)不變。SOM由輸入和輸出(競爭兩層)構(gòu)成,采用競爭學習的方式進行訓練。首先將網(wǎng)絡權(quán)重初始化,接著每個輸入的樣本遍歷競爭層中的每個節(jié)點,計算兩者之間的距離(通常為歐式距離),選取距離最小的節(jié)點作為獲勝節(jié)點。
接著用隨機梯度下降法更新獲勝節(jié)點及其鄰近節(jié)點的權(quán)重向量使它們向輸入向量移動。輸出節(jié)點v的權(quán)值更新公式為:
Wv(s+1)=Wv(s)+θ(u,v,s)·α(s)·(D(t)-Wv(s))
(4)
其中,Wv為權(quán)重向量,s為迭代次數(shù),D(t)為當前輸入向量,u為獲勝節(jié)點,θ(u,v,s)為s下給出u和v之間距離的鄰近函數(shù),用來確定獲勝節(jié)點對其近鄰節(jié)點的影響強弱。α(s)是一個單調(diào)遞減的學習率。對每個輸入向量這個過程會重復進行直到達到提前設置的循環(huán)次數(shù)λ。
該文設置輸出層SOM神經(jīng)元的數(shù)量為3進行聚類,圖3所示為上下?lián)]手時不同的四個子載波上的CSI聚類后的結(jié)果。樣本數(shù)量為50,可以看到子載波3聚類后只有一個簇,說明數(shù)據(jù)內(nèi)在的分布較一致,受環(huán)境干擾較小。子載波1、2、4聚類后均生成多個簇,說明同一個子載波上的CSI間差異較大。因此對于上下?lián)]手動作,選擇提取子載波3上的CSI作為訓練數(shù)據(jù)。

圖3 上下?lián)]手的四個子載波聚類結(jié)果
3.1.3 數(shù)據(jù)擴增
相較傳統(tǒng)模型,深度學習的參數(shù)非常多,故有很強的擬合能力,從而也就需要更多的數(shù)據(jù)來避免過擬合的發(fā)生。但收集和標記大量的數(shù)據(jù)是耗時耗力的。通過現(xiàn)有的樣本進行數(shù)據(jù)擴增創(chuàng)建新的樣本,能夠利用有限的數(shù)據(jù)有效地提高分類性能[14]。該文采取了多種數(shù)據(jù)擴增方法包括:
(a)添加噪聲,CSI序列加上高斯隨機噪聲序列n。
(b)縮放,CSI序列乘以縮放系數(shù)s。
(c)降采樣,設置降采樣因子m,保留CSI序列中間隔為m的采樣點,其余采樣點舍棄。
(d)滑動平均,采樣點i的值由滑動窗口w內(nèi)CSI數(shù)據(jù)的平均值代替。
(e)截取,使用長度為l的窗口在CSI序列上截取數(shù)據(jù)。
圖4所示為使用不同方法所產(chǎn)生的新樣本。可以看到一個樣本能生成多個虛擬樣本。且所生成的樣本保留了CSI的變化模式。

圖4 應用不同數(shù)據(jù)擴增方法得到的新樣本
3.1.4 CSI轉(zhuǎn)換為圖像
CNN能夠自動高效地從圖像中提取特征。因此該文沒有手工設計特征,而是使用GASF[9]方法將接收到的CSI編碼為圖像,使用CNN提取特征。設X={x1,x2,…,xn}為濾波后的CSI序列,先通過
(5)

GASF=[cos(φi+φj)]1≤i,j≤n
(6)
于是有:
GASF= [cos(φi)·cos(φj)-sin(φi)·
sin(φj)]n×n
(7)

(8)
圖5所示為6種手勢動作的CSI,通過轉(zhuǎn)換得到的GASF圖像,可以看到不同的動作生成的圖像有不同的紋理特征。

圖5 不同手勢的CSI轉(zhuǎn)化得到的圖像
文中的CRNN由CNN、RNN構(gòu)成,訓練時使用CTC作為損失函數(shù)。網(wǎng)絡結(jié)構(gòu)如圖6所示。

圖6 網(wǎng)絡結(jié)構(gòu)
3.2.1 卷積神經(jīng)網(wǎng)絡
首先使用卷積神經(jīng)網(wǎng)絡[15]來對圖像提取特征,卷積網(wǎng)絡部分由四個卷積模塊組成,每個卷積模塊由兩個二維卷積層加上一個池化層構(gòu)成。卷積層l的卷積計算公式為:
(9)

池卷積層的池化操作能夠減少模型的計算量和參數(shù)個數(shù),防止過擬合。該文使用了最大池化,其公式為:
fpool=Max(si,j,si+l,j,si,j+1,si+l,j+1)
(10)
其中,fpool是池化后的結(jié)果。si,j是特征圖張量上位置(i,j)上的元素。該文使用的池化核大小為2×2。
3.2.2 長短期記憶網(wǎng)絡
由于CSI是時間序列數(shù)據(jù),所以接下來使用兩個長短期記憶(long short-term memory,LSTM)層對CSI序列時間上的變化進行建模。LSTM[16]是一種擁有三個“門”的特殊網(wǎng)絡結(jié)構(gòu),包括遺忘門、輸入門、輸出門。輸入門選擇保留的信息,遺忘門選擇被遺忘的信息,輸出門決定哪些狀態(tài)信息需要輸出,如公式(11)所示。
(11)
其中,i,f,o,g分別表示輸入門、遺忘門、輸出門的輸出以及輸入的單元狀態(tài)。σ,φ分別為sigmoid、tanh激活函數(shù),ht-1,xt分別為上一時刻的輸出和當前時刻的輸入。當前時刻的單元狀態(tài)ct為:
ct=f⊙ct-1+i⊙g
(12)
其中,ct-1為上一時刻的單元狀態(tài),⊙表示元素乘。由當前時刻的輸出門輸出ot和單元狀態(tài)可得當前時刻的輸出ht為:
ht=ot⊙tanh(ct)
(13)
3.2.3 CTC損失函數(shù)
由于CSI序列長度不一致,那么訓練前每個樣本都需要標記出發(fā)生動作的片段在整個CSI序列中的位置,從而截取得到長度一致的輸入數(shù)據(jù),該文使用CTC[12]損失函數(shù)不需要對數(shù)據(jù)進行截取。LSTM提取完特征后由兩個全連接層和Softmax層進行分類,分類結(jié)果作為CTC損失函數(shù)的輸入,此外還需要提供輸入長度、標簽、標簽長度。

(14)
用B表示映射函數(shù),消除重復的標簽和空白標簽,例如:
B(_,a,a,b,b,c,c,_)=(a,b,c)
(15)
因此輸出序列路徑為μ的概率可以表示為經(jīng)過映射后為μ的所有π的概率之和,即:
(16)
CTC損失函數(shù)定義如下:
CTC(X)=-logP(μ|X)
(17)
CTC算法通過最大路徑解碼所解得的概率最大的輸出序列路徑為:
(18)
其中,π*為T幀輸入序列的后驗概率最大的CTC輸出序列路徑。
將一臺裝有英特爾5300網(wǎng)卡,系統(tǒng)內(nèi)核版本為4.1.10的HP Pavilion15筆記本電腦作為接收端接收信號。一個支持802.11n 協(xié)議的MERCURY MW305R路由器為發(fā)射端發(fā)送信號。使用Halperin[17]發(fā)布的CSI工具包來修改網(wǎng)卡驅(qū)動。設置路由器的工作頻率為2.4 G,發(fā)包頻率為20 Hz。由于發(fā)射端有兩根天線,接收端有三根天線,每個天線對上有30個子載波。因此接收到的CSI數(shù)據(jù)為2*3*30的復數(shù)矩陣。
圖7(a)所示為實驗環(huán)境。實驗對象站在筆記本和路由器之間的桌子前做如圖7(b)所示的6種手勢動作,每個手勢采集50組數(shù)據(jù),共計300組數(shù)據(jù)。使用240組數(shù)據(jù)訓練模型,剩余60組數(shù)據(jù)對訓練好的模型進行測試。

(a)實驗環(huán)境平面圖

(b)6種手勢
該文做了一系列對照實驗來對比分析提出的方法的有效性。
4.2.1 不同的子載波選擇方法
為了驗證提出的基于SOM聚類的子載波選擇方法的有效性,對照實驗使用了WiFall[4]的所有子載波求平均、LBR[5]的選擇CSI方差第二大的子載波進行對比。僅改變子載波選擇方法,其他步驟相同,實驗結(jié)果如表1所示。

表1 不同的子載波選擇方法結(jié)果對比
結(jié)果表明直接對所有子載波上的CSI求平均,結(jié)果準確率較低,原因可能是不同的子載波對動作和環(huán)境的敏感度不同,直接求平均值將各種環(huán)境因素的影響疊加到一起,使得CSI中的有效信息被掩蓋。選取方差第二大的子載波,準確率雖然有所提高,但是由于CSI易受環(huán)境噪音影響,較大的方差可能是由于環(huán)境噪音變化引起的,而且不能保證相同動作的CSI變化模式的一致性。通過聚類選擇子載波能夠保證相同動作的CSI數(shù)據(jù)內(nèi)部的一致性,不會出現(xiàn)異常數(shù)據(jù),準確率較高。
4.2.2 不同的網(wǎng)絡結(jié)構(gòu)
將SignFi[18]使用的CNN及文獻[19]所使用的LSTM作為對照,并把使用交叉熵損失函數(shù)的CRNN也作為一種不同的網(wǎng)絡進行對比,結(jié)果如表2所示。

表2 不同的網(wǎng)絡結(jié)構(gòu)結(jié)果對比
可以看到僅使用LSTM由于模型參數(shù)數(shù)量較少因此擬合能力較弱。使用CNN能夠達到相對較高的準確率。相較于僅使用CNN或LSTM,同時使用CNN、LSTM能綜合利用兩種網(wǎng)絡結(jié)構(gòu)的優(yōu)勢,準確率較高。使用CTC損失函數(shù)不僅不需要對CSI進行截取,而且能夠有效地識別發(fā)生動作的CSI序列片段,從而提高模型的分類準確率。
4.2.3 不同數(shù)量的訓練數(shù)據(jù)
基于學習的識別方法要求有大量的數(shù)據(jù)訓練模型,本小節(jié)通過對比實驗探究不同數(shù)量的訓練數(shù)據(jù)對于識別準確率的影響。分別使用120組數(shù)據(jù),240組數(shù)據(jù),與文中使用的240組數(shù)據(jù)并對數(shù)據(jù)擴增的方法作對比,結(jié)果如表3所示。

表3 不同數(shù)量的訓練數(shù)據(jù)結(jié)果對比
可以看到隨著訓練數(shù)據(jù)的增加模型的分類準確率也隨之增加,模型對訓練數(shù)據(jù)的數(shù)量有較高的要求。雖然大規(guī)模采集數(shù)據(jù)是不容易的,但是通過數(shù)據(jù)擴增的方法,能夠在原有數(shù)據(jù)的基礎上增加數(shù)據(jù)的多樣性,有效提升模型的準確率。使得基于學習的方法也能夠以較低的數(shù)據(jù)成本達到較高的識別效果。
提出了一種基于SOM聚類的子載波選擇方法,并將CSI數(shù)據(jù)序列轉(zhuǎn)換為圖像,通過CNN、LSTM構(gòu)成的網(wǎng)絡使用CTC損失函數(shù)進行訓練分類。在數(shù)據(jù)預處理和模型訓練中,采用聚類和深度學習的方法代替?zhèn)鹘y(tǒng)的基于手工設計特征的方法,并利用現(xiàn)有樣本進行了數(shù)據(jù)擴增。實驗結(jié)果表明,該方法能夠在數(shù)據(jù)量較小的情況下達到較高的識別準確率,且無需手工設計特征。下一步將會致力于研究提高模型的泛化能力。