袁鵬泰,劉寧鐘
(南京航空航天大學 計算機科學與技術(shù)學院,江蘇 南京 211106)
在世界范圍內(nèi)人口老齡化問題日益嚴重,并且預計到2050年,老年人(年齡超過60歲)人口數(shù)量將達到大約20億之眾,因此老年人的安全問題變得愈加重要。而對老年人的安全問題威脅最大的便是摔倒,導致老年人跌倒有多方面的原因,比如心臟病突發(fā),遭到碰撞、地面濕滑等等。同時,跌倒也會給老年人帶來諸如髖部骨折、創(chuàng)傷性腦損傷以及肢體骨折等多種問題,如果不能及時發(fā)現(xiàn),嚴重的將導致老年人的死亡。通過美國的一項調(diào)查表明[1],每年有大約250萬老年人因跌倒而送入醫(yī)院急診科,并且這些送入急診的老年人中大約有六分之一因送救不及時而死亡。因此,提出一種能夠?qū)崟r檢測老年人摔倒并且及時預警的檢測算法便顯得尤為重要。
近年來關(guān)于跌倒檢測的論文不在少數(shù)。根據(jù)文獻[2],檢測算法可以分為基于可穿戴設(shè)備的檢測算法、基于環(huán)境式的檢測算法以及基于計算機視覺的檢測算法這三大類。
基于可穿戴的檢測算法,主要依賴于一些可穿戴在身上的傳感器,其中應用最為廣泛的傳感器便是加速計和3軸加速計。Mathie等利用一種安裝在腰間的加速計系統(tǒng)來檢測跌倒現(xiàn)象[3]。當在豎直向下方向上的加速度突然增加時,便說明人從一個正常的狀態(tài)飛速地向倒地狀態(tài)轉(zhuǎn)變,這樣,便檢測到了一個跌倒事件。Lai等[4]使用多個三軸加速器來感知跌倒時身體易受傷部分的關(guān)節(jié)點。之后這個模型將對分布在身體各部分的傳感器所獲得的信息進行傳遞。這個系統(tǒng)能夠判斷出當加速度超出正常加速度范圍時,跌倒發(fā)生的可能性為多少。同時該系統(tǒng)還能夠通過比較跌倒時的加速度與正常的加速度來評定此時跌倒傷害的等級。由于算法是基于可穿戴設(shè)備的,這樣便帶了幾個問題——當人跌倒時穿戴在身上的設(shè)備可能會因跌倒而損壞,這樣便造成了識別結(jié)果的不準確;另一個問題便是,設(shè)備需要人時刻穿戴在身上,給用戶帶來了極大的不便。
基于環(huán)境的檢測算法,主要利用了視頻、音頻數(shù)據(jù)以及震動信息。文獻[5]中提出了一種利用視頻流中的加速度信息檢測跌倒的算法。人員的移動信息通過一些可穿戴的傳感器進行無線傳輸,之后通過支持向量機(SVM)對獲取到的信息進行分類,進而判斷出是否有跌倒事件發(fā)生。Alwan等設(shè)計了一種基于地面震動的跌倒檢測系統(tǒng)[6]。通過監(jiān)視地板的震動模式來識別跌倒事件,當人跌倒時所產(chǎn)生的震動信號和諸如行走等正常活動所產(chǎn)生的震動信號是不同的。他們使用了一個與地板相連的壓電式傳感器來獲取這些震動信號。同樣是利用地板的震動來進行跌倒檢測,但Zigel等提出了一種全新的利用聲音傳感器來獲取地板震動信息的觀念[7]。正如前文所介紹,基于環(huán)境的檢測算法需要在環(huán)境中部署相關(guān)的傳感器,這便對其使用環(huán)境有了很大的限制。如果環(huán)境中出現(xiàn)預期外的東西(如寵物等)也會影響到最終結(jié)果的準確性。
與前兩類算法相比,基于計算機視覺的檢測算法存在諸多優(yōu)勢—不需要用戶時刻攜帶、不受使用環(huán)境的限制。并且隨著當今社會的發(fā)展,在很多地方都裝有監(jiān)控攝像頭,因此其應用場景也更加廣泛。Auvinet等利用多攝像頭重建了人體3D模型[8],通過對豎直方向上的人體體積分布來判斷是否有跌倒事件發(fā)生。當人體的主要部分在一段時間內(nèi)異常地接近地面時,便說明此時已經(jīng)有人跌倒在地了。但是該算法對于人主動躺下的情況無法分辨,此種情況下會造成誤檢。Charfi等應用了一個SVM分類器,對從人體輪廓軌跡提取出來的特征進行分類,進而判斷出是否有跌倒事件發(fā)生[9]。這些特征包括人體bouding box的長寬比、人體運動軌跡方向以及映射直方圖。作者同時也應用了傅里葉變換、小波變換、一階導數(shù)和二階導數(shù)等方法對特征進行變換。但是文中對一些特征的提取是基于背景消去法的,如果背景較為復雜,背景消去結(jié)果不夠理想,則會間接影響到跌倒檢測結(jié)果。以往的跌倒檢測算法大部分都是在人為模擬跌倒的數(shù)據(jù)集中進行訓練與測試的,而Debard等[10]構(gòu)建了基于真實場景下的跌倒數(shù)據(jù)集,并且針對真實的跌倒數(shù)據(jù)集進行了算法的訓練與測試。Fan等將深度卷積網(wǎng)絡(luò)應用到了跌倒檢測領(lǐng)域[11]。他們首先將一段視頻序列整合為一個動態(tài)圖,然后將這些動態(tài)圖送入深度卷積網(wǎng)絡(luò)進行訓練。作者將跌倒分成了4個階段,即站立狀態(tài)、正在跌倒狀態(tài)、已經(jīng)跌倒狀態(tài)和不移動狀態(tài)。最后通過檢測是否存在一個完整的跌倒流程來判斷是否存在跌倒事件。
在跌倒檢測領(lǐng)域,通常人們都會對跌倒階段進行分類。Fan等將跌倒分成了4個階段——站立階段、正在跌倒階段、已經(jīng)跌倒狀態(tài)以及不動狀態(tài)[11]。文中也采用了分階段的思想,但并不是對跌倒階段進行的分類,而是對整個視頻中人可能存在的狀態(tài)進行了分類,同樣也分4類——正常狀態(tài)、跌倒狀態(tài)、平躺狀態(tài)以及其他狀態(tài)。之后通過對連續(xù)的幾幀圖像中人所處的狀態(tài)進行分析,以判斷視頻中是否有人跌倒。通過SVM分類器對前面提取到的特征進行分類,以確定當前圖像所處的狀態(tài)。輸入到SVM分類器中的特征是通過openpose算法提取出的關(guān)節(jié)點特征,但是單純openpose算法存在無人區(qū)域也會識別出關(guān)節(jié)點的問題,因此在將圖像信息傳入openpose前,提前識別出圖像中存在人的位置,將確定單個人的圖像再傳入到openpose算法中進行關(guān)節(jié)點特征的提取。算法流程如圖1所示。
圖1 算法流程
yolo是由Redmon等提出的目標檢測算法[12],其核心思想是利用整張圖作為網(wǎng)絡(luò)的輸入,直接在輸出層回歸邊界框(bounding box)位置及其所屬類別。
在yolo中將輸入圖像分成S×S個網(wǎng)格(grid cell),如果某個目標(object)的中心落在這個網(wǎng)格中,則這個網(wǎng)格就負責預測這個目標。每個網(wǎng)格負責預測B個邊界框,每個邊界框不僅要回歸自身的位置(x,y,w,h),同時還要預測一個置信度(confidence)。其中confidence代表了所預測的bounding box中所包含object的置信度以及這個bounding box預測的有多準這兩重信息,其計算公式為:
(1)
因此每一個bounding box預測了5個值,bounding box的位置(x,y,w,h)以及一個confidence,除此之外每一個網(wǎng)格還要預測出一個類別信息。最終yolo的損失函數(shù)如下:
(2)
在yolov2[13]中引入了anchor box的思想,根據(jù)相同尺寸的輸出倒推出不同尺寸的輸入,這個輸入的尺寸就是由anchor box的尺寸決定的。在yolov2中anchor box的尺寸大小是由k-means聚類算法所得。文中只需要檢測圖像中人所在的位置,因此不需要通用的全部尺寸的anchor box。文中對anchor box的尺寸大小重新進行了選取。
針對圖像中人的bounding box,同樣通過k-means算法進行聚類,參照yolov2,在此處k-means聚類算法并沒有使用標準的歐氏距離作為距離度量。若用歐氏距離作為距離度量,則box的尺寸較大時其誤差也更大,為使誤差與box的大小無關(guān),通過IOU定義距離度量公式:
d(box,centroid)=1-IOU(box,centroid)
(3)
其中,box為預選的anchor box;centroid為bounding box的圖心。
經(jīng)過重新選取anchor box后,訓練的模型對圖像中人員的檢測更具有針對性,并且對人員的檢測相對于傳統(tǒng)的yolo算法提高了0.2 mAP。
openpose算法[14]是自下而上的人體姿態(tài)估計算法,即先得到關(guān)節(jié)點位置再獲得骨架。其主體網(wǎng)絡(luò)結(jié)構(gòu)采用vggNet[15]作為骨架,之后采用兩個分支分別回歸關(guān)節(jié)點的位置S以及像素點在骨架中的走向L。并且其后續(xù)兩分支網(wǎng)絡(luò)結(jié)構(gòu)是多階段迭代的。每一個階段計算一次損失函數(shù),之后把L和S以及通過vggNet提取的原始圖像特征連接后繼續(xù)下一個階段的訓練。其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 openpose網(wǎng)絡(luò)結(jié)構(gòu)簡圖
其中F是通過vggNet提取出的原始圖像的特征,下標1和2分別表示多階段迭代中的第一階段和第二階段。對于整個網(wǎng)絡(luò)階段,其過程如下:
(4)
其中,ρt和φt分別表示在階段t時L和S的卷積神經(jīng)網(wǎng)絡(luò)。
由于openpose算法是自下而上,這就帶來了一個問題,即openpose會在沒有人存在的地方檢測出關(guān)節(jié)點,進而出現(xiàn)誤檢的情況。這樣便降低了依賴于關(guān)節(jié)點信息進行分類的SVM分類器的準確率。因此在openpose算法前先通過改進的yolo算法檢測圖像中的人所在位置,再將此信息傳入到openpose算法,使得oppenpose算法處理的圖像是必包含人的圖像,因此便有效地解決了上述問題。
添加yolo后的識別對比如圖3所示。
(a)添加yolo前 (b)添加yolo后圖3 結(jié)果對比
圖3(a)在沙發(fā)處誤識出了關(guān)節(jié)點,但在添加了yolo后這一誤識別被避免了,因此表明該方法是有效的。
在獲取到人體關(guān)節(jié)點信息后,便需要對這些關(guān)節(jié)點進行分類,以判斷出圖像中人所處的狀態(tài),進而判斷出視頻中是否存在跌倒現(xiàn)象。此處采用SVM分類器對獲取到的關(guān)節(jié)點信息進行分類。
SVM分類器是基于小樣本統(tǒng)計理論的,即使在小樣本集上也能夠?qū)W得很不錯的結(jié)果,而訓練樣本的不足也正是目前跌倒檢測領(lǐng)域存在的一個重要問題,因此采用SVM分類器可以在一定程度上減輕這一問題。此外,通過核函數(shù)SVM可以很好地處理高維數(shù)據(jù)集,這樣對于前面openpose提取的高維關(guān)節(jié)點特征,SVM可以很輕松地處理,而不會降低分類器的準確度與泛化能力。
此處將視頻中人可能處于的狀態(tài)分成4類,分別是正常狀態(tài)、跌倒狀態(tài)、平躺狀態(tài)以及其他狀態(tài)。正常狀態(tài):人正常直立行走以及正常坐的狀態(tài);平躺狀態(tài):人全身平躺在地上的狀態(tài);跌倒狀態(tài):人從正常階段向平躺階段的轉(zhuǎn)化的過程;其他狀態(tài):除其余3個狀態(tài)的其他狀態(tài),例如坐下狀態(tài)和起立狀態(tài)。具體如圖4所示。
(a)正常狀態(tài) (b)跌倒狀態(tài)
(c)平躺狀態(tài) (d)其他狀態(tài)圖4 SVM分類狀態(tài)
文中SVM的工作狀態(tài)如圖5所示。
圖5 SVM分類器
文中訓練SVM分類器時選用的核函數(shù)為高斯核函數(shù),核函數(shù)參數(shù)(gamma)為0.07,懲罰參數(shù)的值為1。經(jīng)訓練后,SVM分類器對關(guān)節(jié)點狀態(tài)分類的準確率達到了97.38%。
為判斷出視頻中是否有跌倒存在,需進一步對前面SVM分類出的狀態(tài)進行分析。文中通過4個步驟對前面所得到的狀態(tài)進行分析,分別是關(guān)鍵狀態(tài)提取、噪聲去除、狀態(tài)集簡化以及跌倒事件判斷。
2.4.1 關(guān)鍵狀態(tài)提取
文中的目的是檢測出一個場景中是否有跌倒事件發(fā)生,而不是檢測出場景中哪個人跌倒。因此,無需對一幀圖像內(nèi)的所有狀態(tài)進行分析,只需提取出一幀圖像中最為關(guān)鍵的狀態(tài)即可。
根據(jù)各個狀態(tài)對跌倒檢測的重要程度不同,對它們賦予不同的權(quán)重值。將正常狀態(tài)表示為pnormal,跌倒狀態(tài)表示為pfalling,平躺狀態(tài)表示為play,其他狀態(tài)表示為pothers。各階段的重要程度如下:
pfalling>play>pothers>pnormal
(5)
根據(jù)式5所示的重要程度排序,對各階段賦予如下權(quán)重值:ωfalling=4,ωlay=3,ωothers=2,ωnormal=1。由此對于每一幀圖像,根據(jù)所賦予的權(quán)重值,取權(quán)重值最大的狀態(tài)為關(guān)鍵狀態(tài)。
圖6 關(guān)節(jié)狀態(tài)提取
如圖6所示,幀圖像中存在兩個狀態(tài)分別為pnormal和play,對于一幀圖像只提取一個關(guān)鍵狀態(tài),由于ωlay>ωnormal,因此提取play為關(guān)鍵狀態(tài),這樣對于多人存在的情況便排除了非重要狀態(tài)(圖中的狀態(tài)pnormal)的干擾。
2.4.2 噪聲去除
對于一段視頻數(shù)據(jù),通過前一步的關(guān)鍵狀態(tài)提取,便得到了一個由每一幀圖像中的關(guān)鍵狀態(tài)所組成的一個狀態(tài)序列。由于前面所采用的SVM分類器,對人體狀態(tài)分類的準確率沒有達到100%,因此在這一狀態(tài)序列中必然會存在一些檢測錯誤的狀態(tài),即噪聲。因此,在此處對噪聲進行去除。
由于在視頻中幀圖像是一個連續(xù)的過程,因此在一個連續(xù)的同一狀態(tài)序列下,是不會在其中間突變出另一個狀態(tài)的,利用這一點可以對噪聲點進行過濾。噪聲去除示例如下:
{pnormal,pnormal,play,pnormal,pnormal}?{pnormal,pnormal,
pnormal,pnormal,pnormal}
(6)
2.4.3 狀態(tài)集簡化
通過上一節(jié),得到的狀態(tài)序列是由多個連續(xù)相同的狀態(tài)所組成,即連續(xù)的多幀圖像擁有相同的狀態(tài),但在最后判斷視頻中是否存在跌倒事件時不需對每一個相同的狀態(tài)進行分析。因此,在此對狀態(tài)集進行簡化,將多個連續(xù)相同的狀態(tài)抽象成一個狀態(tài),其過程如式7所示:
{pnormal,pnormal,…,pnormal,pnormal}?{pnormal}
(7)
2.4.4 跌倒事件判斷
經(jīng)過前幾步的處理,此處只需要判斷簡化后的狀態(tài)序列中是否存在連續(xù)的跌倒狀態(tài)和平躺狀態(tài)即可。即在狀態(tài)序列中存在{pfalling,play}這樣的序列對,即可判斷出此段視頻中有跌倒事件發(fā)生,否則沒有。
在跌倒檢測領(lǐng)域內(nèi)應用比較廣泛的評判準則主要有兩個指標,分別是敏感性(sensitivity)和特異性(specificity)。
(8)
(9)
其中,TP(真正例)為視頻中有跌倒事件發(fā)生同時檢測出有跌倒事件發(fā)生的視頻數(shù)量;FN(假反例)為實際有跌倒事件發(fā)生但沒有檢測到的視頻數(shù)量;FP(假正例)為實際上沒有跌倒事件發(fā)生但卻檢測為有跌倒發(fā)生的視頻數(shù)量;TN(真反例)為視頻中沒有跌倒事件發(fā)生同時也檢測為沒有跌倒發(fā)生的視頻數(shù)量。
分別在兩個數(shù)據(jù)集上進行了實驗對比,結(jié)果如表1和表2所示。其中Lei2 fall detection dataset場景較為簡單,并且視頻中只包含了1個人。而High quality fall simulation dataset的場景較為復雜,并且視頻中存在多個人。由對比結(jié)果可見,文中方法在場景中只有一個人時,其表現(xiàn)要略遜色于其他方法,但從sensitivity和specificity的值來看,其準確率還是很可觀的。在場景中存在多個人時,文中方法的表現(xiàn)要優(yōu)于其余兩種方法,可見該方法對場景中存在多人的情況下具有不錯的魯棒性。
表1 實驗結(jié)果對比(Le2i fall detection dataset) %
表2 實驗結(jié)果對比(High quality fall simulation dataset) %
文中提出了一種基于關(guān)節(jié)點提取的老年人跌倒檢測算法。實驗結(jié)果表明,該算法對單人存在的場景具有很好的檢測準確率,并且對場景中存在多個人的情況有很好的魯棒性。但另一方面,該算法對多人場景下的跌倒檢測sen與spc值均在70%左右,因此仍有很大的改進空間,尚需進一步研究。