楊明健,黎鏡林,郭銳坤,唐小煜
(華南師范大學 物理與電信工程學院,廣東 廣州 510006)
近年來,隨著人工智能的高速發(fā)展,機器視覺在全球的生產制造中的地位越來越高,對人的姿態(tài)、動作識別和行為理解也逐漸成為計算機視覺領域的研究重點. 人體睡姿和健康有著十分緊密的關系,尤其對于體弱多病的人群,采用合適的睡姿能夠有效地預防疾病[1]. 因此,運用機器視覺識別人體睡眠姿態(tài),監(jiān)護人體健康狀況的研究具有重要意義和應用價值[2-3]. 目前人體睡姿識別監(jiān)護的研究或產品大多要求佩戴相關的貼身檢測裝置,不僅影響睡眠質量,還存在潛在性的傷害危險,但利用機器視覺完成睡姿識別工作則可以避免以上問題. 利用機器視覺識別睡姿的傳統(tǒng)方法主要是水平集分割法[1],該方法在面對特殊睡姿以及睡姿圖像背景復雜情況時,識別準確率不盡人意. 本文采用OpenPose關鍵節(jié)點提取算法模型解決睡姿圖像存在部分遮擋以及復雜背景的問題,采用基于人體關鍵點提取的睡姿識別算法來解決復雜睡姿問題.
OpenPose是卡內基梅隆大學感知計算實驗室打造的可以讀懂人類肢體語言的開放庫和程序包. 本文采用OpenPose關鍵節(jié)點提取算法來提取睡姿圖像的特征,包括存在部分遮擋和復雜睡姿的特征,最終由BP神經網絡進行睡姿識別,得到比較好的識別效果.
OpenPose的算法流程見圖1:首先將輸入的圖片[圖1(a)]經過10層VGG19網絡[4]轉化成圖像特征,再將得到的圖像特征分成2個分支分別送入深層卷積網絡,來預測每點的關鍵點的置信度S[圖1(b)]和親和度向量L[圖1(c)],然后通過貪心推理[5]分析每個關鍵點的置信度S以及親和度向量L,實現(xiàn)關鍵點的聚類[圖1(d)],最后實現(xiàn)骨架的組裝[圖1(e)].

圖1 OpenPose算法流程
OpenPose算法模型能夠將輸入的人體睡姿圖像輸出為人體的骨架圖以及人體各個關節(jié)點的坐標,進而通過計算識別人體的睡姿.
OpenPose提供了18或25個人體關節(jié)點,70個面部關節(jié)點,21個手部關節(jié)點的檢測提取定位. 其中18或25個人體關節(jié)點的主要區(qū)別為25個關節(jié)點的檢測多了左、右腳部的關節(jié)點[6]. 由于睡姿識別中腳部的關節(jié)點信息對于睡姿的特征提取區(qū)別性[7]不高,因此本文選用18個人體關節(jié)點信息作為睡姿識別算法的輸入. 此外,由于手部和臉部的關節(jié)點信息不是睡姿的重要特征,而手部和臉部關節(jié)點檢測對于圖像的運算速率有較大影響,開啟手部和臉部關節(jié)點檢測會大大降低運算速率,給實時識別人體睡姿的實現(xiàn)帶來困難. 綜上所述,只選取18個人體關節(jié)點信息作為睡姿識別算法的輸入能夠在保證睡姿識別的準確率的前提下提高運算速率. OpenPose輸出的18個人體關節(jié)點的骨架圖如圖2所示.

圖2 OpenPose輸出骨架圖(COCO數(shù)據(jù)集)
2.2.1 睡姿圖像的臉部特征提取
針對4種基本睡姿:仰臥、俯臥、左側臥、右側臥的特點,俯臥時人臉向下,仰臥時人臉向上,側臥時人臉朝側邊,因此人臉的朝向是睡姿識別時征集的重要特征. 對于OpenPose輸出的18個關節(jié)點,眼睛和耳朵的關節(jié)點(見圖2中的14~17號關節(jié)點)是臉部特征中關鍵的關節(jié)點. 睡姿圖像臉部關節(jié)點檢測效果圖如圖3所示.

(c)左側臥 (d)右側臥圖3 4種睡姿下OpenPose關節(jié)提取效果
將4種睡姿圖像進行OpenPose算法提取關節(jié)點后,由實驗結果可以看出只有俯臥這一睡姿可能提取不出眼部的關節(jié)點. 由此表明眼部關節(jié)點數(shù)量這一特征可以作為睡姿識別的重要特征.
2.2.2 睡姿圖像的體態(tài)特征提取
睡姿識別中除了臉部特征——人臉的朝向這一重要特征外,人體的體態(tài)特征也同樣是舉足輕重的. 例如人體在仰臥時胸部朝上,兩臂一般位于身體兩側. 下面介紹如何通過關節(jié)點信息提取睡姿圖像的體態(tài)特征.
首先將人體分為左、右2個半身. 對于OpenPose輸出的人體骨架圖,最簡單的劃分方法為將骨架圖中的鼻子所在關節(jié)點(x1,y1)(圖2的0號關節(jié)點)以及胸(背)部關節(jié)點(x2,y2)(圖2的1號關節(jié)點)兩點連成1條直線y=kx+b,這樣就可以將睡姿圖像一分為二,分出的2個平面大致可以代表人體的左、右2個半身,劃分效果如圖4(a). 劃分完左、右2個半身后再判斷兩臂是否位于同一半身,判斷方法為將最能代表兩臂位置的手臂關節(jié)點(x3,y3)和(x4,y4)的橫坐標x3和x4代入剛才得到的分界線y=kx+b,得到分界線上橫坐標x3和x4對應的縱坐標y03和y04;若y3和y4同時大于或小于y03和y04,則說明兩臂位于同一半身,其他情況則說明兩臂位于身體兩側. 考慮到手腕關節(jié)點(圖2的4號和7號關節(jié)點)存在被遮擋的可能性以及肩膀關節(jié)點(圖2的2和5號關節(jié)點)距離分界線過近容易出現(xiàn)誤判,本文采用的兩臂關節(jié)點為手肘(圖2的3號和6號關節(jié)點). 最終完成睡姿圖像中體態(tài)特征的提取.

(a) (b)圖4 人體分界線提取效果
該劃分人體兩側的方法雖然簡單,但當人體處于復雜睡姿時,這種劃分方法往往會造成體態(tài)特征的錯誤提取. 例如當人體的軀干處于平躺狀態(tài)但頭部偏向一側時,用這種方法劃分出的人體左右半身分界線并不能很好地代表真實的人體兩側分界線[見圖4(b)],從而導致體態(tài)特征的錯誤提取. 針對這種情況,可以對提取出的分界線引入修正因子δ和λ,得到新的分界線:
y=(k+λ)x+b+δ.
修正因子大小可以通過大量實驗數(shù)據(jù)進行BP神經網絡算法[8-10]獲得. BP神經網絡是按誤差逆?zhèn)鞑ニ惴ㄓ柧毜亩鄬忧梆伨W絡,本文采用的BP神經網絡包含1層輸入層、6層隱含層和1層輸出層.
由于容易產生誤差的情況主要是臉部和靠近胸部的關節(jié)位置導致,因此選取圖2中的0,1,2,5,14和15號關節(jié)點的橫、縱坐標共12個特征向量(p1,p2,…,p12)作為神經網絡輸入層的12個節(jié)點;而輸出層則有2個節(jié)點,輸出矢量(o1,o2)對應修正因子δ和λ. 隱含層的激活函數(shù)選擇tanh函數(shù)[11-12],訓練算法選擇縮小權值的反向傳播算法[13-15],神經網絡的學習率設置為0.05,誤差精度設置為0.005. 訓練結束后輸出的目標矢量即對應的修正因子δ和λ.
此外代表兩臂位置的手臂關節(jié)點坐標獲取時,通常選取手臂某一關節(jié)點的方法容易造成誤差. 因此本文針對左、右手臂的所有關節(jié)點坐標分別進行加權平均,同樣權值的大小通過BP神經網絡算法確定.
2.2.3 特征識別
通過提取臉部特征和體態(tài)特征2種睡姿特征,可以實現(xiàn)對2種基本睡姿的識別. 大量睡姿圖像實驗表明,對于臉部特征,仰臥能提取出2個眼部關節(jié)點,俯臥則能提取1個或提取不出關節(jié)點,側臥則為1個或2個. 而對于體態(tài)特征,人體在仰臥時胸部朝上,兩臂通常位于身體兩側;側臥時兩臂位于身體同一側;而俯臥時背部朝上,兩臂也位于身體同一側. 由于OpenPose輸出的關節(jié)點信息無法提取出背部還是胸部向上的體態(tài)特征,但能提取兩臂相對于身體位置的特征,因此若要區(qū)分仰臥和俯臥這2種睡姿,則需要結合臉部的朝向加以區(qū)分. 綜上所述,結合臉部特征和體態(tài)特征這2種睡姿特征就能夠對任意一睡姿圖像進行分類識別.
為了驗證OpenPose算法模型在身體部分遮擋時的識別效果,做以下3種情況的識別效果實驗:無被子遮擋圖、僅露出頭部和僅露出頭部和手臂. 這3種情況下關節(jié)點的識別效果如圖5所示.
通過對比這3個實驗的實驗結果不難看出,即使存在大面積的關節(jié)遮擋,只露出頭部和手臂的情況仍能夠提取出除了胸部以下的關節(jié)點,而本文的睡姿識別算法并沒有用到胸部以下的關節(jié)點,即在睡姿識別算法正確的前提下,只露出頭部和手臂也能夠正確識別出睡姿類型. 但只露出頭部的情況下只能提取出臉部的關節(jié)點,無法識別出睡姿類別. 該情況是通過圖像處理技術來識別人體睡姿的缺陷,其解決辦法是通過壓力測量[16]等其他技術方法來彌補圖像處理技術的不足. 本文的實驗結果表明,OpenPose的關節(jié)識別效果具有相當優(yōu)秀的魯棒性和準確性,完全滿足存在被子遮擋情況下的關節(jié)識別要求.

(a) (b) (c)圖5 OpenPose部分關節(jié)遮擋關節(jié)提取效果
睡姿圖像的臉部特征和體態(tài)特征的提取正確性是正確識別睡姿的前提. 因此本文做了以下實驗來驗證特征提取的正確性.
3.2.1 臉部特征提取正確性實驗
為便于驗證臉部特征提取的正確性,本文定義每種睡姿下的正確識別眼部關節(jié)點數(shù)為si(i=1,2,3,4),其分別對應仰臥、俯臥、左側臥以及右側臥. 由上文的分析結果可知s1=1或2,s2=0或1,s3=1或2,s4=1或2. 將4種睡姿的各100張睡姿圖像進行OpenPose算法提取眼部關節(jié)點信息,得到眼部關節(jié)點數(shù)s0i,關節(jié)檢測效果如圖3,再與si進行對比,相等則表示臉部特征提取正確,實驗結果如表1所示.

表1 臉部特征提取實驗結果
實驗結果表明臉部特征提取的正確性高達96.25%,且4種睡姿的正確提取率均達90%以上,為睡姿識別檢測提供了十分有利的條件.
3.2.2 體態(tài)特征提取正確性實驗
體態(tài)特征提取中分界線劃分的正確性直接決定了最終體態(tài)特征提取的正確性. 為此,對體態(tài)特征提取中經BP神經網絡訓練后的模型進行誤差分析,訓練集為4種基本睡姿圖片各50張,訓練誤差曲線如圖6所示.

圖6 BP神經網絡訓練誤差圖
可以看出,經過160次訓練后,神經網絡的輸出與訓練集的標準輸出的均方誤差趨于平穩(wěn),約為0.012 3,基本滿足BP神經網絡預設的誤差要求.
為了驗證基于OpenPose的人體睡姿識別算法的識別準確率和運算速率,選取5名志愿者做了200組實驗,其最終識別的實驗結果如表2所示.

表2 睡姿識別實驗結果
實驗結果表明本文所采取的睡姿識別算法識別準確率高達92.5 %,運算速率平均為9.8幀/s,完全達到實時睡姿識別檢測對準確率和運算速率的要求.
提出了基于OpenPose的人體睡姿識別算法. 該算法適用絕大部分復雜情況,包括復雜背景、被子遮擋、復雜睡姿,并具有較高的識別準確率和運算速率,識別準確率高達92.5%,且運算速率高達9.8幀/s,完全達到實時睡姿監(jiān)測的要求,以此設計的睡姿監(jiān)測系統(tǒng)能有效地看護病弱人群,如睡眠呼吸暫停綜合癥病人的睡眠情況.