魏震宇,文 暢,謝 凱,賀建飚
(1.長江大學 計算機科學學院,湖北 荊州434023; 2.長江大學 電子信息學院,湖北 荊州 434023;3.中南大學 信息科學與工程學院, 長沙 410083)(*通信作者電子郵箱wenchang2016paper@163.com)
移動設備上的實時人臉檢測是人臉識別的一個重要發展方向。人臉檢測的應用領域也由經典的靜態圖像向連續的視頻幀發展。受性能限制,移動設備上的人臉檢測往往存在速度較慢難以滿足實時檢測需求、檢測精度差的問題,從而需要設計一種高效的移動設備人臉檢測算法。人臉檢測問題是屬于圖像識別中目標檢測的一個分支,傳統的檢測算法都是以多張人臉為目標在圖像上進行檢測。現有的人臉檢測算法分為以維奧拉-瓊斯(Viola-Jones, V-J)目標檢測框架[1-2]為代表的經典機器學習方法和使用卷積神經網絡進行檢測的深度學習方法兩大類,這兩類方法都是針對單張靜態圖片設計的,并不能很好地適應視頻實時檢測的需求。
Viola-Jones目標檢測框架利用AdaBoost方法[3]訓練級聯分類器,能進行快速靜態人臉檢測,也是現有大多數工程采用的方法,開放視覺庫OpenCV[4-5]中就有一種具體實現。但OpenCV實現的算法主要缺點是誤檢率高[5],不能很好地滿足精確度要求。
針對Viola-Jones方法檢測率低的問題,出現了應用卷積神經網絡(Convolution Neural Network, CNN)[6-8]來進行人臉檢測的方法,通過利用局部感知和權值共享的卷積神經網絡進行特征提取并加以分類,使利用CNN進行人臉檢測在20%誤檢率下召回率普遍達到了87%以上[9-10];但由于CNN高昂的計算代價,往往只能應用在單張靜態圖像上,不能進行實時視頻檢測。
由靜態圖像檢測轉變到視頻檢測同樣存在一些難點,其中一些熱點問題由視頻幀不良內容引起,例如動態模糊、部分遮擋、角度偏轉等問題引起檢測結果精度較差甚至無法檢測。
為應對移動設備傳統解決方案中的現有問題,本文嘗試將機器學習算法與CNN相結合,以提高檢測精度;同時為平衡CNN高昂的計算代價,本文應用了光流估計方法[11],以解決移動設備上的視頻實時人臉檢測中無法很好地平衡檢測速度與檢測精度的問題。
本文提出了一種在人臉子圖快速劃分的基礎上應用以卷積神經網絡檢測面部特征分布的方法。如圖1所示,進行人臉檢測的算法流程主要分為:1)視頻幀預處理,提取灰度分量并計算積分圖;2)應用嵌入型級聯分類器進行人臉子圖劃分;3)應用五官特征進行人臉精細分割;4)預測人臉響應邊界盒。

圖1 視頻人臉檢測流程
1.1.1 提取灰度分量
由Google提供的應用程序編程接口(Application Programming Interface, API)[12-13]可知,在API Level 14以上的安卓設備中,攝像頭預覽的數據以ImageFormat.YV12的格式通過預覽的回調接口傳遞給用戶。YV12圖像數據在Android實現為一個大小為(w*h)3/2的byte數組,而YV12格式中的Y′分量就是一幀圖像frame的灰度表示,記一幀圖像大小為sizey=w*h,則灰度化后的視頻幀序列記為grey:
grey=[frame0,frame1,…,framesizey-1]
(1)
記灰度圖像中每一點的灰度值為grey(x,y):
grey(x,y)=frame[x+y*w]
(2)
其中:(x,y)是位于以橫持設備時,以屏幕左上角的點為原點,橫向為x軸,縱向為y軸的坐標系上的點。
1.1.2 積分圖計算
基于Haar-like特征的分類器需要計算特征區域內的圖像和,應用積分圖可以進行區域快速求和計算。積分圖的計算方法很簡單,定義積分圖上的一點為I(x′,y′):

(3)
顯然,對積分圖的計算可以轉換為前綴數組求和:
I(x′,y′)=I(x′-1,y′-1)+I(x′,y′-1)+
I(x′-1,y′)+grey(x′,y′)
(4)
當積分圖計算完成,對灰度圖像的任意矩形區域求和計算在常數時間內即可完成。


圖2 嵌入式級聯分類器
嵌入型級聯(nested classifier)是一種信息復用的級聯方式,與AdaBoost方法的主要區別在于,分類器級聯時加入了一個“嵌入式”的項,一起合并為當前迭代的強分類器,其檢測基礎同樣是Haar-like特征,優點是能在不損失分類速度的情況下提高準確率。
經典的弱分類器h(w′)表達式為:

(5)
其中:w′為一個子窗口圖像;f為一種Haar-like特征;p用于控制不等號方向,使之總是小于號;θ是閾值,即圖2中的bij。Nested瀑布流的級聯方式是在退化決策樹的基礎上,為每一個迭代后的神經元加入了額外的被稱為Nested的子項。強分類器采用這樣的形式:
(6)
Hn(w′)=
(7)
這相當于所有弱分類器投票,即所有弱分類器與其突觸的權重乘積加上前一次迭代中強分類器的輸出加權平均,與本次迭代中的弱分類器輸出的算術平均比較,最終判斷一個子窗口內圖像是否通過檢測。嵌入型的分類器級聯方式有效地重用了信息,降低了每個分類器需要學習的特征數目,可以在達到經典框架相同級別檢測率的同時減少所需分類器的層數,從而降低移動設備上由于復雜特征帶來的計算代價。
為了進一步剔除非人臉無關項,本文綜合了卷積神經網絡Faceness-Net[14]進行人臉面部特征提取,分別探查頭發、眼睛、鼻子、唇部、下顎的存在性,并應用光流估計算法用于平衡卷積神經網絡的計算代價,如算法1所示。為表述方便,先定義需要用到的符號,如表1所示。

表1 符號的定義
算法1 稀疏關鍵幀五官特征檢測。
輸入 視頻幀序列。
輸出 人臉檢測結果。
1)init(視頻幀序列):
curr=key=0
feature0=netfeature(frames[0])
mask0=netdect(feature0)
2)detect(視頻幀序列):
while (curr ifisKeyFrame(curr) key=curr featurekey=netfeature(frames[key]) maskkey=netdect(featurekey) else flow=F(featurekey,featurecurr) featurecurr=W(featurekey,flow) maskcurr=netdect(featurecurr) return {maski} 1.3.1 關鍵幀Faceness-Net五官特征分布提取 卷積神經網絡Faceness-Net的檢測目標是人臉部件,文獻[13]中的實現是對頭發、眼睛、鼻子、唇部、下顎進行特征提取,并構造評分窗口進行區域預測。而本文的檢測并不需要精細到像素級,所以需要對關鍵幀上的Faceness-Net特征提取子網絡netfeature流程加以優化。 Faceness-Net的網絡結構同樣可以分為特征提取與目標檢測兩個部分,這樣便于區分計算開銷大的卷積神經網絡netfeature與輕量的目標檢測網絡netdect。計算代價高昂的netfeature只在關鍵幀上運行,而非關鍵幀的特征圖將通過光流估計將關鍵幀的特征圖遷移到當前幀。 1.3.2 非關鍵幀光流估計特征傳播 光流場(Optical flow field)估計是一種視頻中運動圖像位移量的估計方法,用于兩幀圖像之間計算二維位移關系。光流估計方法假設間隔相近的兩幀視頻幀中出現的內容相近,進而假設相同亮度的點存在二維線性位移關系,從而得到圖像插值時的速度與位置信息。圖3展示了應用光流估計進行特征傳播與直接應用Faceness-Net進行特征提取的流程。 記key為關鍵幀索引,curr為當前幀索引,framekey為關鍵幀,framecurr為當前幀,Mkey→curr為二維光流場: flow=Mkey→curr=F(framekey,framecurr) (8) 得到光流估計的結果后應用雙線性插值算法將特征圖縮放至視頻當前幀同等大小,這將返回一個二維映射,用于表示關鍵幀上的特征位置p與當前幀上特征位置p+δp的關系,構造雙線性插值函數B′(q,p+δp): B′(q,p+δp)=b(qx,px+δpx)·b(qy,py+δpy) (9) (10) 其中:δp=Mkey→curr(p);b(q′,p′)=max(0,1-|q′-p′|)。 圖3 基于光流估計的特征聚合 本項目在實驗中用到的設備硬件部分為:小米6手機,CPU為高通驍龍835,主頻為2.45 GHz,圖形處理器Adreno 540,DDR4內存6 GB。軟件部分安卓系統軟件版本為Android 7.1.1,本文開發的應用使用Android Studio編寫, Java development kit版本8u152。 實驗分別在YouTube人臉視頻數據庫(YouTube Face Database[16])和實驗室自建正位人臉(攝像頭正對人臉,法線夾角不大于20°,人臉位置大致位于視野中央)數據庫上進行測試。YouTube人臉視頻數據庫包含有3 425段來自YouTube的視頻和1 595張規格化圖片,常被用于“視頻-視頻”人臉識別的項目測試,剪輯為24 frame/s的1 080 p視頻,平均剪輯長度為每秒181.3幀(剪輯總長度約為620 952幀),視頻人臉區域標定方法同戶外臉部檢測數據庫(Labeled Faces in the Wild, LFW)。本項目中使用的自建人臉視頻數據庫為100段1 min幀率為24 frame/s的H.264編碼壓縮視頻,包含來自5個人的各20段1分鐘視頻,視頻幀使用YCrCb顏色空間,按LFW標注方法為每人4段視頻的第一幀起前120幀手工標定人臉區域范圍。同時,為訓練得到的模型編寫接口用于設計安卓程序,將從移動設備攝像頭直接讀取數據以進行實時人臉檢測,圖4~5為不同條件下軟件的運行截圖。 圖4 明亮平均光照環境測試結果 圖5 單側不良光照環境測試 2.2.1 不同關鍵幀間隔選擇對檢測速度的影響 關鍵幀上運行耗時最長的Faceness-Net五官特征分布提取直接決定了運行最小時間,記l為兩關鍵幀間隔幀數,選取Faceness-Net完整5個特征,分別對l=0(即不應用光流估計)、l=15、l=30進行實驗。 程序在始終沒有得到特征分布圖的檢測結果時不會運行檢測程序,即檢測幀被丟棄。從表2可以看出,關鍵幀選取間隔越大,輸入視頻幀分辨率越低,檢測平均幀率越高(耗時越短)。 表2 關鍵幀間隔對平均幀率的影響 frame/s 2.2.2 Faceness-Net不同粒度下的速度 為了研究相似五官特征的影響,在測試關鍵幀選取間隔實驗的基礎上,本項目嘗試減少Faceness-Net提取的五官特征數目,分別去掉了嘴巴和鼻子的檢測,在關鍵幀間隔l=30的條件下實驗,得到了如表3所示的結果。 表3 檢測粒度對平均幀率的影響(l=30) 考慮到由于在關鍵幀上運行Faceness-Net仍將耗費大量的計算時間,將會在移動設備上造成卡頓,使檢測精度波動;同時考慮到五官特征的特殊性,即部分特征可能是相似且可以舍棄的,進而可以選取更加合適的間隔-粒度關系。從表3的結果中可以看出,減少檢測特征目標數目可以帶來檢測速度的提升。 2.3.1 算法復雜度分析 根據本文算法流程,算法前端應用人臉子圖分割的算法是相同的,都記作O(crop)。記在每一幀上應用的人臉提取的算法時間復雜度為O(task): O(task)=O(netfeature)+O(netdect) (10) 在光流估計的基礎上進行五官檢測的復雜度為O(task)′: (11) (12) 那么非關鍵幀與關鍵幀的復雜度之比ratio在O(netdect)?O(netfeature)的條件下有以下近似關系: (13) 又O(crop)?O(F),O(crop)?O(netfeature),則總體算法復雜度之比r為: (14) 可以得出,檢測所需的時間在非關鍵幀上接近傳統的Viola-Jones結果,而關鍵幀上的運行最短時間由Faceness-Net提取特征的時間決定。從表2所示的相同粒度實驗結果來看,統計1 min 640 p視頻檢測結果由不應用光流估計l=0的平均幀率7.75 frame/s提升至l=30的平均幀率18.35 frame/s, 速度有2~3倍的提升,實驗結果符合復雜度預期。 2.3.2 檢測精度對比分析 除了正位人臉測試視頻數據集,本項目還使用了旋轉人臉(人臉所在平面內)、側位人臉(人臉所在平面外)進行測試與對比分析。其中側位人臉的評判標準沒有很好地界定,所以本項目人為規定,側位人臉的可見特征(1幀內)不少于3個(最低Faceness-Net檢測粒度),即可認為視頻中出現了有效側位人臉。 圖6 運行時間與召回率擬合關系 由圖6~7所示的實驗結果可看出,減少檢測特征數目時,Faceness-Net網絡的檢測精度有所下降,隨之帶來的是速度的提升。檢驗全部5個特征速度最慢,平均幀率在14.10 frame/s左右;只檢驗3個部分特征的運行速度最快,平均幀率在18.53 frame/s以上,而檢測精度的損失也最大,相較全部5個特征損失在5.1%~8.3%;而4個特征的情況精度損失在0.6%~2.5%。相比之下,同等級檢測粒度下視頻幀分辨率對結果影響不大。 圖7 不同算法在不同誤檢數下的召回率關系 綜合來看,舍棄一個部分特征即檢測粒度為4的情況,檢驗速度與召回率的平衡最好,精度損失較粒度為3的損失小,可以根據不同的需求場景調整精度與速度的平衡。 2.3.3 復雜情況視頻檢測問題 在實際的程序運行測試中,本項目還進行了人臉快速移動帶來動態模糊復雜情況檢測,應用光流估計,可以在內容較差、無法提取有效特征的幀上進行檢測,如圖8所示。 圖8 動態模糊檢測結果 從圖8可以看出應用本文算法對部分視頻檢測熱點問題有一定的幫助。 本文通過綜合改進的Viola-Jones檢測算法與應用光流估計的Faceness-Net面部特征檢測方法,實現了移動設備上的視頻人臉檢測,使檢測精度達到了接近CNN方法的檢測精度,且速度基本滿足實時監測的要求;實現的應用可以應用于中低端設備,滿足了大多數移動設備實際監測工作的性能需要,可以應用于諸如人臉門禁等項目的檢測任務中。但同時也存在不足:人臉快速運動帶來的動態模糊未能得到良好的解決,在更高的分辨率下性能仍有待進一步提升。接下來的工作中可以通過加入優化關鍵幀的智能選取以在不同設備上更好地平衡精度與速度,以規避關鍵幀內容較差的情況。 參考文獻(References) [1] 魏瑋,馬瑞,王小芳. 視頻中人臉位置的定量檢測[J]. 計算機應用, 2017, 37(3): 801-805.(WEI W, MA R, WANG X F. Quantitative detection of face location in videos[J]. Journal of Computer Applications, 2017, 37(3): 801-805.) [2] LI Q, NIAZ U, MERIALDO B. An improved algorithm on Viola-Jones object detector[C]// Proceedings of the 2012 10th International Workshop on Content-Based Multimedia Indexing. Piscataway, NJ: IEEE, 2012: 55-60. [3] ELMAGHRABY A, ABDALLA M, ENANY O, et al. Detect and analyze face parts information using Viola-Jones and geometric approaches[J]. International Journal of Computer Applications, 2014, 101(3): 23-28. [4] 朱承志.基于OpenCV的人臉檢測與跟蹤[J]. 計算機工程與應用, 2012, 48(26): 157-161.(ZHU C Z. Face detection and tracking based on OpenCV[J]. Computer Engineering and Applications, 2012, 48(26): 157-161.) [5] BRUCE B R, AITKEN J M, PETKE J. Deep parameter optimisation for face detection using the Viola-Jones algorithm in OpenCV[C]// SSBSE 2016: Proceedings of 8th International Symposium, LNCS 9962. Berlin: Springer, 2016: 238-243. [6] 孔英會,王之涵, 車轔轔. 基于卷積神經網絡(CNN) 和CUDA加速的實時視頻人臉識別[J]. 科學技術與工程, 2016, 16(35): 96-100.(KONG Y H, WANG Z H, CHE L L. Real-time face recognition in videos based on Convolutional Neural Networks(CNN) and CUDA[J]. Science Technology & Engineering, 2016, 16(35): 96-100.) [7] JIANG H, LEARNEDMILLER E. Face detection with the faster R-CNN[C]// Proceedings of the 2017 12th IEEE International Conference on Automatic Face & Gesture Recognition. Washington, DC: IEEE Computer Society, 2017: 650-657. [8] QIN H, YAN J, LI X, et al. Joint training of cascaded CNN for face detection [C]// Proceedings of the 2016 IEEE Conference on Computer Vision and Pattern Recognition. Washington, DC: IEEE Computer Society, 2016: 3456-3465. [9] 盧宏濤, 張秦川. 深度卷積神經網絡在計算機視覺中的應用研究綜述[J]. 數據采集與處理, 2016, 31(1): 1-17.(LU H T, ZHANG Q C. Applications of deep convolutional neural network in computer vision[J]. Journal of Data Acquisition and Processing, 2016, 31(1): 1-17.) [10] KONG K H, KANG D S. A study of face detection algorithm using CNN based on symmetry-LGP & uniform-LGP and the skin color[EB/OL]. [2017- 05- 10]. http: //onlinepresent.org/proceedings/vol139_2016/30.pdf. [11] ZHU X, XIONG Y, DAI J, et al. Deep feature flow for video recognition[EB/OL]. [2017- 05- 10]. https: //arxiv.org/abs/1611.07715. [12] Google. Camera.PreviewCallback[EB/OL]. [2017- 08- 22]. https: //developer.android.com/reference/android/hardware/Camera.PreviewCallback.html. [13] Google. Camera.Parameters[EB/OL]. [2017- 08- 22]. https: //developer.android.com/reference/android/hardware/Camera.Parameters.html#setPreviewFormat(int). [14] YANG S, LUO P, LOY C C, et al. From facial parts responses to face detection: a deep learning approach [C]// Proceedings of the 2015 IEEE International Conference on Computer Vision. Piscataway, NJ: IEEE, 2015: 3676-3684. [15] WEDEL A, CREMERS D. Stereo Scene Flow for 3D Motion Analysis[M]. Berlin: Springer, 2011: 5-30. [16] WOLF L, HASSNER T, MAOZ I. Face recognition in unconstrained videos with matched background similarity [C]// Proceedings of the 2011 IEEE Conference on Computer Vision and Pattern Recognition. Washington, DC: IEEE Computer Society, 2011: 529-534. This work is partially supported by the National Natural Science Foundation of China (61272147), the Innovation and Entrepreneurship Training Program for Yangtze University Students (2017008)

2 實驗與結果分析
2.1 實驗平臺


2.2 數據記錄


2.3 結果分析




3 結語