劉亞飛 王敬東 劉 法 林思玉
(南京航空航天大學(xué)自動(dòng)化學(xué)院 南京 211106)
頭部姿態(tài)作為進(jìn)行人體行為分析的重要手段,在社區(qū)安防、智能家居以及室內(nèi)行為監(jiān)控等領(lǐng)域得到廣泛應(yīng)用。頭部姿態(tài)估計(jì)是指計(jì)算機(jī)通過(guò)對(duì)輸入圖像或者視頻序列進(jìn)行分析、預(yù)測(cè),確定人的頭部在三維空間中的位置以及姿態(tài)參量[1]。如圖1所示,頭部的姿態(tài)包括俯仰角(pitch),偏航角(yaw)和翻滾角(roll),其中,俯仰角作為頭部姿態(tài)中的關(guān)鍵信息之一,在教室學(xué)生注意力分析、判斷駕駛員疲勞狀態(tài)等方面有諸多應(yīng)用,因此,本文主要針對(duì)俯仰角進(jìn)行展開(kāi)研究。
圖1 頭部姿態(tài)三個(gè)旋轉(zhuǎn)角度
目前,頭部姿態(tài)估計(jì)的方法有多種,主要可分為基于模型的方法和基于表觀的方法,基于模型的方法[2~4]是先獲取臉部的多個(gè)關(guān)鍵點(diǎn),通過(guò)PnP 算法[5]實(shí)現(xiàn)2D 到3D 的轉(zhuǎn)化,構(gòu)建頭部模型與姿態(tài)之間的空間立體的對(duì)應(yīng)關(guān)系。但該方法在頭部轉(zhuǎn)動(dòng)角度大時(shí),難以對(duì)臉部關(guān)鍵點(diǎn)進(jìn)行準(zhǔn)確定位,造成頭部圖像與3D 頭部模型之間的匹配度降低。另一種基于表觀的方法[6~8]則是直接對(duì)頭部圖像進(jìn)行分析,通過(guò)學(xué)習(xí)不同頭部姿態(tài)對(duì)應(yīng)的角度信息,可以不受角度限制,因此受到廣泛關(guān)注?;诖朔椒?,Patacchiola 與Cangelosi 等[6]測(cè)試了dropout 和基于自適應(yīng)梯度的方法與CNN 相結(jié)合進(jìn)行頭部姿勢(shì)估計(jì)的效果,提出將自適應(yīng)梯度與CNN 結(jié)合使用。Nataniel 等[7]利用ResNet50 進(jìn)行特征提取,并對(duì)俯仰、偏航和翻滾三個(gè)角度分別采取分類(lèi)與回歸雙重?fù)p失,增強(qiáng)對(duì)誤差的約束。Shao 等[8]在此基礎(chǔ)上,研究了不同人臉邊界框?qū)︻^部姿態(tài)估計(jì)的影響,并將文獻(xiàn)[7]中對(duì)三個(gè)角度先分類(lèi)后預(yù)測(cè)改為了回歸與分類(lèi)結(jié)果同時(shí)輸出,以減小分類(lèi)與回歸之間的換算誤差。
但是頭部姿態(tài)估計(jì)網(wǎng)絡(luò)需要提取和保留比較多的空間結(jié)構(gòu)信息,如由于頭部轉(zhuǎn)動(dòng)所形成的與原豎直頭部之間的俯仰角。上述基于表觀的方法均是通過(guò)使用深層次網(wǎng)絡(luò)以提取更多、更豐富的語(yǔ)義信息,而增加網(wǎng)絡(luò)深度就意味著需要增加相應(yīng)的MaxPooling 池化層以降低參數(shù)量,加快網(wǎng)絡(luò)訓(xùn)練速度,但由于MaxPooling 是取一定尺寸范圍內(nèi)的最大值,即最顯著特征,而忽略最顯著特征所處圖像的位置與角度,使得特征丟失了原本圖像中所存在的空間結(jié)構(gòu)信息。因此,構(gòu)建的網(wǎng)絡(luò)模型一方面應(yīng)當(dāng)盡量避免MaxPooling 池化的使用,另一方面也應(yīng)當(dāng)對(duì)頭部的角度信息能夠進(jìn)行有效地提取,使頭部的姿態(tài)信息傳遞至最終的輸出。
為此,本文利用膠囊網(wǎng)絡(luò)充分保留空間結(jié)構(gòu)信息的優(yōu)點(diǎn),并結(jié)合傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,提出將膠囊網(wǎng)絡(luò)(Capsule Networks,CapsNet)[9]與傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)相結(jié)合,利用設(shè)計(jì)的三級(jí)網(wǎng)絡(luò)輸出特征后,將特征編碼為膠囊形式傳入膠囊網(wǎng)絡(luò)進(jìn)行傳遞至輸出,使整個(gè)網(wǎng)絡(luò)既能對(duì)語(yǔ)義特征進(jìn)行充分的提取,又能利用CapsNet特性,保留圖像中存在的姿態(tài)關(guān)系,實(shí)現(xiàn)對(duì)頭部姿態(tài)的準(zhǔn)確估計(jì)。本文模型具有以下三個(gè)優(yōu)點(diǎn):1)采用單輸入異構(gòu)雙流的特征提取結(jié)構(gòu),使不同的卷積流提取更為豐富的信息;2)采用三級(jí)輸出策略,使得每級(jí)輸出能夠提取到不同的空間結(jié)構(gòu)特征和語(yǔ)義特征;3)將CapsNet引入其中,并在三級(jí)輸出的特征轉(zhuǎn)成膠囊向量后,以動(dòng)態(tài)路由確定最終輸出,從而能夠使空間結(jié)構(gòu)特征得以保留。
如圖2 所示,相比于傳統(tǒng)的單個(gè)神經(jīng)元,膠囊由多個(gè)神經(jīng)元構(gòu)成,因此在卷積層上,普通的單層卷積是二維,而單層的膠囊則是三維。膠囊中的每個(gè)神經(jīng)元表示一種屬性,如大小、方向、色調(diào)、紋理等特征,故相對(duì)而言,膠囊可以記錄更詳細(xì)的信息。當(dāng)圖像中頭部發(fā)生角度變化時(shí),膠囊中神經(jīng)元也會(huì)產(chǎn)生相應(yīng)的變化,接著使用動(dòng)態(tài)路由算法對(duì)膠囊進(jìn)行篩選傳遞,進(jìn)而影響最終的輸出。而傳統(tǒng)的CNN 由于MaxPooling 的存在,只會(huì)保存顯著特征,丟棄非顯著特征,造成空間結(jié)構(gòu)信息丟失。為了更形象地將二者相區(qū)分,常用標(biāo)量表示普通神經(jīng)元,向量表示膠囊,向量的長(zhǎng)度表示識(shí)別目標(biāo)存在的概率,方向表示目標(biāo)的各種屬性。
圖2 普通神經(jīng)元與膠囊對(duì)比圖
首先利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,并將其轉(zhuǎn)換為膠囊形式,經(jīng)過(guò)姿態(tài)矩陣得到初始預(yù)測(cè)膠囊,即子膠囊。姿態(tài)矩陣用于子膠囊對(duì)父膠囊的預(yù)測(cè),不同的姿態(tài)矩陣代表子膠囊的不同預(yù)測(cè)方向,所有子膠囊對(duì)父膠囊的預(yù)測(cè),實(shí)際是聚類(lèi)的過(guò)程,如圖3 所示,子膠囊Caps1、Caps2、Caps3 以及Caps4等均對(duì)多個(gè)父膠囊進(jìn)行預(yù)測(cè),當(dāng)多數(shù)子膠囊輸出一致時(shí),會(huì)對(duì)不同的父膠囊形成簇,作為對(duì)父膠囊的預(yù)測(cè),從而激活對(duì)應(yīng)父膠囊。而對(duì)于如何使簇更緊密,以形成對(duì)父膠囊的準(zhǔn)確預(yù)測(cè),則由動(dòng)態(tài)路由算法確定。
圖3 子膠囊向父膠囊聚類(lèi)示意圖
根據(jù)動(dòng)態(tài)路由算法,子膠囊與父膠囊之間是類(lèi)似全連接的形式,所有子膠囊都會(huì)與父膠囊相連,并嘗試預(yù)測(cè)父膠囊的輸出,但是它們的權(quán)重并不相同,若子膠囊的預(yù)測(cè)與父膠囊的輸出一致,則這兩個(gè)膠囊之間的權(quán)重會(huì)增加,這樣就可以將對(duì)父膠囊貢獻(xiàn)大的子膠囊的權(quán)重變大,貢獻(xiàn)小的權(quán)重變小,造成預(yù)測(cè)相同的子膠囊逐漸接近,差別很大的逐漸遠(yuǎn)離,經(jīng)過(guò)迭代三次,最終根據(jù)權(quán)重大小,確定每個(gè)子膠囊對(duì)父膠囊的貢獻(xiàn)程度,進(jìn)行加權(quán)求和,得到綜合的輸出。相比于MaxPooling 簡(jiǎn)單地選擇最大值,更有利于保存最符合預(yù)期的信息。
由于原來(lái)的CapsNet僅含有一個(gè)卷積層用于提取特征,其對(duì)于語(yǔ)義信息的提取是不夠的,為了既能進(jìn)行充分信息提取,又能將其中的空間信息保留[10~11],本文借鑒了SSR 網(wǎng)絡(luò)[12]的多級(jí)輸出思想,提出了一種新的頭部姿態(tài)估計(jì)網(wǎng)絡(luò)模型。如圖4所示,該模型利用深度卷積結(jié)構(gòu)用于提取特征,采用異構(gòu)雙流的方式,并將網(wǎng)絡(luò)分為三級(jí),分別在一層、三層和七層卷積輸出,每級(jí)輸出均通過(guò)同維度膠囊對(duì)實(shí)體的語(yǔ)義信息以及空間結(jié)構(gòu)特征進(jìn)行編碼,然后將三個(gè)CapsNet 通過(guò)三個(gè)不同的姿態(tài)矩陣得到膠囊網(wǎng)絡(luò)的全連接層,并通過(guò)動(dòng)態(tài)路由的方式將上一級(jí)膠囊對(duì)輸出膠囊進(jìn)行聚類(lèi),最終得到類(lèi)別輸出。在整個(gè)特征提取網(wǎng)絡(luò)中,一層卷積對(duì)輸入圖像的特征提取較淺,基本保留了空間結(jié)構(gòu)信息;而第三層卷積既保留了一部分空間信息,也對(duì)語(yǔ)義特征進(jìn)行了一定的提?。坏谄邔觿t是通過(guò)不斷的卷積池化,將語(yǔ)義信息進(jìn)行了充分的提取。這樣,既能得到豐富的空間結(jié)構(gòu)信息,也能對(duì)語(yǔ)義信息進(jìn)行充分提取,而通過(guò)CapsNet 模塊對(duì)特征信息進(jìn)行編碼并傳遞至輸出,從而既實(shí)現(xiàn)豐富的信息提取,又能夠?qū)⑻卣鞒浞謧鬏敳粊G失。這種深度和多級(jí)的協(xié)調(diào)融合有利于空間特征和語(yǔ)義特征的提取和保留,使網(wǎng)絡(luò)對(duì)頭部姿態(tài)有更好的檢測(cè)和識(shí)別效果。
圖4 用于頭部姿態(tài)估計(jì)的CNN與CapsNet相結(jié)合的網(wǎng)絡(luò)結(jié)構(gòu)示意圖
如圖4所示,將尺寸大小為64×64 的頭部圖片分別送入上下兩個(gè)輸入進(jìn)行深度可分離卷積,每個(gè)輸入在K1、K2、K3三個(gè)階段均進(jìn)行特征提取,并通過(guò)1×1 卷積和element-wise 的方式進(jìn)行點(diǎn)乘融合,其中,為提高網(wǎng)絡(luò)收斂的速度和防止過(guò)擬合,將處理后的卷積層進(jìn)行批歸一化(Bacth Normalization)處理。本文網(wǎng)絡(luò)的基本構(gòu)建塊由3×3 卷積、批歸一化、非線性激活以及2×2 池化組成,每個(gè)輸入采用不同類(lèi)型的激活函數(shù)和池化以使它們異構(gòu),上輸入采用ReLU 與AveragePooling,下輸入采用Tanh 和MaxPooling,這樣可以通過(guò)不同的激活函數(shù)和池化對(duì)圖像信息進(jìn)行提取,通過(guò)相互融合以提高性能,最后將融合后的特征送入CapsNet進(jìn)行信息編碼。本文所設(shè)計(jì)的CapsNet模塊的結(jié)構(gòu)如圖5所示。
本文對(duì)于圖4 中CapsNet 模塊的設(shè)計(jì)如圖5 所示,三級(jí)輸出進(jìn)入CapsNet模塊后,首先通過(guò)一層卷積使其變?yōu)槟z囊形式,繼而利用姿態(tài)矩陣將其轉(zhuǎn)化為類(lèi)膠囊的形式的初始預(yù)測(cè)膠囊,通過(guò)dropout 的方法舍棄一部分后,通過(guò)動(dòng)態(tài)路由算法將其轉(zhuǎn)為最終預(yù)測(cè)膠囊。具體設(shè)計(jì)為CapsNet模塊的輸入是三個(gè)N×M×D的卷積層,輸出為大小為1×Q的O個(gè)膠囊向量,中間過(guò)程如下:在三級(jí)輸出后,通過(guò)在原有卷積層的基礎(chǔ)上再進(jìn)行C次相同卷積操作,使得原有卷積層從三維擴(kuò)展至四維,形成了含有N×M×D個(gè)膠囊,每個(gè)膠囊含有C個(gè)神經(jīng)元的初始膠囊層,其中每個(gè)神經(jīng)元代表著不同的含義,諸如方向、大小、紋理等信息,由于輸出膠囊層中所含膠囊的個(gè)數(shù)對(duì)應(yīng)著輸出類(lèi)別O,因此該層中共含有O個(gè)膠囊,且每個(gè)膠囊是1×Q的向量。初始膠囊層需要經(jīng)過(guò)三個(gè)N×M×D個(gè)C×Q的姿態(tài)矩陣(即圖6 中的W1、W2以及W3),從而得到初始預(yù)測(cè)U?,然后U?經(jīng)過(guò)動(dòng)態(tài)路由算法最終得到O×1 個(gè)長(zhǎng)度為Q的膠囊。其中,姿態(tài)矩陣與常規(guī)的變換矩陣一樣,在初始化之后通過(guò)反向傳播訓(xùn)練得到,而動(dòng)態(tài)路由算法中各膠囊的權(quán)重則是在不斷的迭代更新中確定的。
圖5 CapsNet模塊結(jié)構(gòu)示意圖
由于dropout 可以使某些膠囊暫時(shí)不起作用,防止了網(wǎng)絡(luò)過(guò)度依賴(lài)某些特征,提高網(wǎng)絡(luò)泛化能力,使網(wǎng)絡(luò)能夠通過(guò)子膠囊的共性對(duì)頭部的俯仰角度進(jìn)行正確預(yù)測(cè),本文采用文獻(xiàn)[13]中的dropout方法,將每個(gè)輸出的膠囊作為整體對(duì)待,以保證每個(gè)膠囊的方向不變,通過(guò)伯努利分布對(duì)膠囊進(jìn)行隨機(jī)丟棄,即保持子膠囊與父膠囊之間的姿態(tài)矩陣參數(shù)不變,將子膠囊中各神經(jīng)元的輸出置為0,從而使整個(gè)膠囊在網(wǎng)絡(luò)訓(xùn)練中不起作用,避免因?yàn)閬G棄膠囊中部分元素導(dǎo)致膠囊的方向發(fā)生變化。
本文所采用的損失函數(shù)是Marginloss,該函數(shù)常用于多類(lèi)別損失的計(jì)算。在輸出父膠囊后,計(jì)算各向量的L2 范數(shù),能夠得到對(duì)應(yīng)于pitch 角度的60種不同類(lèi)別的預(yù)測(cè)值與損失值,具體如式(1)所示:
為了驗(yàn)證本文提出的網(wǎng)絡(luò)模型的有效性,并便于與其他經(jīng)典模型進(jìn)行對(duì)比,本文選取在頭部姿態(tài)估計(jì)領(lǐng)域具有代表性且常用的300W-LP 數(shù)據(jù)集、AFLW2000數(shù)據(jù)集以及BIWI數(shù)據(jù)集。300W-LP 數(shù)據(jù)集是一個(gè)大型人臉姿態(tài)數(shù)據(jù)集,共有122450 張圖片,這些圖片通過(guò)三維密集面對(duì)齊(3D Dense Face Alignment,3DDFA)[14]合成出不同的偏航角。各圖片間差異較大,背景環(huán)境復(fù)雜,人物之間差異性較大,具有不同年齡段、不同光照、不同表情以及不同的遮擋程度,最大程度體現(xiàn)了真實(shí)環(huán)境下的頭部各個(gè)姿態(tài)。另外,該數(shù)據(jù)集中還對(duì)原有的數(shù)據(jù)進(jìn)行了水平翻轉(zhuǎn),在增加了不同角度的同時(shí),也對(duì)數(shù)據(jù)集進(jìn)行了擴(kuò)充。本文使用數(shù)據(jù)集進(jìn)行訓(xùn)練,300W-LP數(shù)據(jù)集的部分圖片如圖6 所示。
圖6 300W-LP數(shù)據(jù)集部分實(shí)驗(yàn)用圖
AFLW2000數(shù)據(jù)集是由2000張頭部圖片組成,該數(shù)據(jù)集包含有不同光照和遮擋條件的頭部姿勢(shì),是頭部姿態(tài)估計(jì)中常用的用于測(cè)試的數(shù)據(jù)集。由于頭部的俯仰角基本位于[-90°,90°]之間,因此本文刪除了AFLW2000中存在角度不在[-90°,90°]之間的圖片,并歸一化為64×64 大小進(jìn)行測(cè)試。
圖7 AFLW2000數(shù)據(jù)集部分圖片
圖8 BIWI數(shù)據(jù)集部分圖片
BIWI 數(shù)據(jù)集包含有24 個(gè)人拍攝的約15000 張圖片,每個(gè)人都有較為豐富的頭部姿態(tài),并提供了每張圖片的深度圖像以及姿態(tài)信息。由于該數(shù)據(jù)集未提供頭部檢測(cè)框信息,故本文使用MTCNN(Multi-Task Convolutional Neural Network)進(jìn)行頭部檢測(cè)和截取,針對(duì)部分圖片中多人存在的情況,采用分離區(qū)域檢測(cè)手段進(jìn)行處理。
根據(jù)文獻(xiàn)[8]經(jīng)實(shí)驗(yàn)證明,邊界框邊緣參數(shù)K取0.5時(shí),改善了俯仰角,偏航角和翻滾角在各個(gè)角度值上精度,因此,為保證一致性,本文所有的數(shù)據(jù)集均采用邊界框邊緣參數(shù)K=0.5 進(jìn)行頭部區(qū)域裁剪。
本文使用Python 語(yǔ)言,基于Keras 和Tensorflow框架進(jìn)行算法實(shí)現(xiàn),其硬件環(huán)境為Intel i7-7200H@2.7Hz×8 CPU和GTX1080Ti GPU,卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練參數(shù)設(shè)置為訓(xùn)練的迭代次數(shù)為numEpochs=90,采用AdamOptimer優(yōu)化器,每批次大小batch size為16,初始的學(xué)習(xí)率為0.001,每30步縮小0.1倍。
為了能夠更好地體現(xiàn)CapsNet與卷積神經(jīng)網(wǎng)絡(luò)結(jié)合的頭部姿態(tài)估計(jì)模型的優(yōu)勢(shì),將該模型與FAN[15],Dlib[16],HopeNet 分別在在AFLW2000 數(shù)據(jù)集以及BIWI 數(shù)據(jù)集上進(jìn)行測(cè)試,并采用平均絕對(duì)誤差(Mean Absolute Error,MAE)作為評(píng)價(jià)指標(biāo)。
本文采用上述不同的方法對(duì)BIWI數(shù)據(jù)集的數(shù)據(jù)進(jìn)行預(yù)測(cè),并通過(guò)類(lèi)別×3-90°的轉(zhuǎn)換公式將類(lèi)別轉(zhuǎn)為對(duì)應(yīng)的角度值,根據(jù)MAE 計(jì)算公式得到測(cè)試數(shù)據(jù)如表1所示。
表1 BIWI數(shù)據(jù)集在俯仰角上的MAE對(duì)比
由表1 可以看出,本文在俯仰角上所得出的MAE 具有最優(yōu)值,且BIWI 數(shù)據(jù)集在角度姿態(tài)展現(xiàn)出多樣性,更能體現(xiàn)本文方法的表現(xiàn)優(yōu)異。
另外,在AFLW2000 數(shù)據(jù)集上的測(cè)試結(jié)果如表2所示。
表2 AFLW2000數(shù)據(jù)集在俯仰角上的MAE對(duì)比
實(shí)驗(yàn)結(jié)果表明,本文方法以及HopeNet 在俯仰角上與經(jīng)典的Dlib 與FAN 算法相比,具有明顯的優(yōu)勢(shì),也證明了基于表觀的方法相比于基于模板的方法能夠克服頭部姿態(tài)變化的差異,更加準(zhǔn)確地估計(jì);并且本文方法相較于目前較為先進(jìn)的HopeNet也有了很大程度的提高,在MAE 上取得了最佳的測(cè)試值。表2 的測(cè)試結(jié)果整體優(yōu)于表1,是由于BIWI 數(shù)據(jù)集是在單一背景下拍攝的,而AFLW2000數(shù)據(jù)集背景構(gòu)成較為復(fù)雜,從而影響了最終的估計(jì)精度,可見(jiàn)復(fù)雜背景對(duì)頭部姿態(tài)的估計(jì)精度影響較大。
為了驗(yàn)證模型在實(shí)際應(yīng)用中的有效性,本文拍攝了生活中的常見(jiàn)情形,分別為正常光照、昏暗光照、戴帽子以及復(fù)雜背景。數(shù)據(jù)采集自6 個(gè)人,每人在4種環(huán)境下分別做15種頭部姿勢(shì),俯仰角取值為{-30°,0°,30°},偏航角取值為{-45°,-30°,0°,30°,45°},部分測(cè)試圖片如圖9所示。
圖9 不同條件下的部分測(cè)試圖
考慮到在實(shí)際操作過(guò)程中,由于人為標(biāo)注以及實(shí)驗(yàn)人員本身造成的誤差,故進(jìn)行了本文模型與HopeNet的對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表3所示。
表3 不同條件下在俯仰角上的MAE對(duì)比
由表3 可以看出,本文方法在各個(gè)不同的場(chǎng)景中,都具有優(yōu)異地表現(xiàn),并且MAE 值均較小,魯棒性較強(qiáng),沒(méi)有出現(xiàn)大幅度的起伏變化,在四組實(shí)驗(yàn)中,昏暗光照下的表現(xiàn)最差,原因是實(shí)驗(yàn)本身光照強(qiáng)度較低,且出現(xiàn)黑影,對(duì)頭部俯仰角的預(yù)測(cè)產(chǎn)生較大的影響。另外,由于測(cè)試的頭部區(qū)域均按照臉部邊界框邊緣參數(shù)K=0.5,因此背景所占比例較大,對(duì)最終的頭部姿態(tài)估計(jì)造成了一定的干擾。
本文通過(guò)傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)提取圖像特征,并將特征信息傳入CapsNet 進(jìn)行空間信息保留與傳遞,從而構(gòu)建了一種新的頭部姿態(tài)估計(jì)模型,解決了傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)存在的MaxPooling 池化所造成的空間結(jié)構(gòu)信息丟失的缺點(diǎn)。通過(guò)本文算法與FAN,Dlib 和HopeNet 分別在AFLW2000 數(shù)據(jù)集和BIWI 數(shù)據(jù)集上進(jìn)行的俯仰角實(shí)驗(yàn)對(duì)比結(jié)果表明,相比于其他算法,本文模型在俯仰角的估計(jì)上具備更加優(yōu)異的表現(xiàn)。