楊俊欽,張雨楠,林實(shí)鋒,徐偉臻
(廣州大學(xué)計(jì)算機(jī)科學(xué)與教育軟件學(xué)院,廣州 510006)
人臉作為人體顯著的生物特征之一,與指紋、虹膜一樣包含著豐富的個(gè)人信息,如:性別、年齡、種族、表情、發(fā)型、是否戴口罩帽子,等等。這些人臉屬性信息在海量圖像檢索、智能視頻監(jiān)控、輔助駕駛、人機(jī)交互、精準(zhǔn)廣告投放、娛樂休閑等系統(tǒng)中有著廣泛的應(yīng)用,涉及安防、金融、廣告、娛樂等多個(gè)領(lǐng)域,與人們的生活息息相關(guān)。此外,相比于指紋、虹膜等生物特征所含有的信息,人臉屬性具有信息易于獲取、識(shí)別符合人類習(xí)慣等優(yōu)勢(shì)。
在傳統(tǒng)的人臉屬性識(shí)別方法中,程序通常先檢測(cè)人臉區(qū)域,再提取以關(guān)鍵點(diǎn)為中心的圖像塊的高維特征,如方向梯度直方圖特征(Histogram of Oriented Gra?dient,HOG)[1]或局部二值模式特征(Local Binary Pat?tern,LBP)[2],然后將其拉伸成長(zhǎng)向量訓(xùn)練分類器對(duì)屬性進(jìn)行識(shí)別。這類方法對(duì)于限定條件下的正臉圖像表現(xiàn)尚可,但在非限定條件下易受復(fù)雜環(huán)境影響,其準(zhǔn)確率不高,難以滿足人們的需求。
近年來,深度神經(jīng)網(wǎng)絡(luò)發(fā)展迅速,許多圖像識(shí)別研究基于深度學(xué)習(xí)開展。在人臉屬性識(shí)別問題上也出現(xiàn)了多種深度神經(jīng)網(wǎng)絡(luò)的方法和應(yīng)用,如L-MFCNN方法[3],面向嵌入式應(yīng)用的DeepID網(wǎng)絡(luò)模型[4],等等。但是大多神經(jīng)網(wǎng)絡(luò)方法主要針對(duì)單一或者少量的人臉屬性,很少做到多個(gè)屬性識(shí)別,難以滿足市場(chǎng)的需求。根據(jù)上述問題,本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于深度卷積神經(jīng)網(wǎng)絡(luò)(Deep Convolution Neural Networks,DCNNs)的人臉多屬性識(shí)別系統(tǒng)。該系統(tǒng)利用公開的人臉屬性數(shù)據(jù)集CelebA[5],基于PyTorch深度學(xué)習(xí)框架設(shè)計(jì)訓(xùn)練了級(jí)聯(lián)的深度卷積神經(jīng)網(wǎng)絡(luò)模型,模型在CelebA上的平均識(shí)別準(zhǔn)確率達(dá)到了90.09%。
為了提高自然場(chǎng)景下的人臉屬性識(shí)別的準(zhǔn)確率和效率,本系統(tǒng)基于深度學(xué)習(xí)算法,設(shè)計(jì)了人臉屬性識(shí)別模型,模型級(jí)聯(lián)了人臉關(guān)鍵點(diǎn)(landmark)定位和人臉屬性識(shí)別兩個(gè)網(wǎng)絡(luò)。對(duì)于自然場(chǎng)景下的圖片輸入,模型首先使用人臉關(guān)鍵點(diǎn)定位網(wǎng)絡(luò)對(duì)人臉進(jìn)行關(guān)鍵點(diǎn)定位,進(jìn)而根據(jù)定位結(jié)果校準(zhǔn)并截取人臉圖像,最后將對(duì)齊后的人臉圖像輸出到人臉屬性識(shí)別網(wǎng)絡(luò)中,完成屬性識(shí)別。其整體工作流程如圖1所示。
圖1 人臉屬性識(shí)別流程圖
人臉關(guān)鍵點(diǎn)定位,即在原始圖像的基礎(chǔ)上定位人臉的關(guān)鍵點(diǎn),例如眼睛、鼻子、嘴巴等的坐標(biāo)。其目的是為了利用定位的關(guān)鍵點(diǎn)進(jìn)行人臉圖像的校準(zhǔn)與截取,排除角度、姿態(tài)因素對(duì)于人臉圖像分類的影響。
本文采用一個(gè)主干-分支的全卷積神經(jīng)網(wǎng)絡(luò)模型(Backbone-Branches Fully-Convolutional Neural Net?work,BB-FCN)來進(jìn)行人臉關(guān)鍵點(diǎn)定位。該模型能夠直接從原始圖像產(chǎn)生人臉關(guān)鍵點(diǎn)熱度圖而不需要任何預(yù)處理工作。模型采用了從粗到精的定位過程,先采用全局的主干網(wǎng)絡(luò)粗略地估計(jì)人臉關(guān)鍵點(diǎn)的位置,然后對(duì)全局關(guān)鍵點(diǎn)位置取圖像塊訓(xùn)練分支網(wǎng)絡(luò),進(jìn)一步優(yōu)化該關(guān)鍵點(diǎn)的定位。為了提高算法的運(yùn)行效率,模型只標(biāo)注人臉的雙眼、鼻子和嘴巴的兩個(gè)嘴角共計(jì)5個(gè)關(guān)鍵點(diǎn)。
模型進(jìn)行關(guān)鍵點(diǎn)定位的具體操作過程是:首先把整幅圖像輸入到BB-FCN的主干網(wǎng),主干網(wǎng)由多個(gè)卷積層和最大值池化層交替堆疊而成,處理所有關(guān)鍵點(diǎn)、輸出低分辨率的響應(yīng)圖像;然后根據(jù)響應(yīng)圖像反向定位關(guān)鍵點(diǎn),以關(guān)鍵點(diǎn)為中心提取原圖像中的相應(yīng)的圖像塊;接下來以包含關(guān)鍵點(diǎn)的圖像塊為輸入訓(xùn)練分支網(wǎng)絡(luò),分支網(wǎng)絡(luò)僅包含卷積層以保證最后輸出準(zhǔn)確定位高分辨率的響應(yīng)圖像。
關(guān)鍵點(diǎn)定位完成以后,本文以雙眼的坐標(biāo)連線的中點(diǎn)為原點(diǎn)建立二維直角坐標(biāo)系,將圖片旋轉(zhuǎn)變換,使雙眼的坐標(biāo)點(diǎn)位于水平軸方向上,以此完成人臉的對(duì)齊。之后,借助已定位的關(guān)鍵點(diǎn)坐標(biāo)的橫、縱向位置,分別估計(jì)出人臉的高度和寬度,以此截取出對(duì)齊的人臉圖像。
經(jīng)過人臉關(guān)鍵點(diǎn)網(wǎng)絡(luò)的定位后,系統(tǒng)得到對(duì)齊的人臉圖像,根據(jù)對(duì)齊的人臉圖像,系統(tǒng)需要進(jìn)行進(jìn)一步的人臉多屬性分類。
在人臉屬性識(shí)別模型中,文獻(xiàn)[5]最先提出使用ANet+LNet的深度學(xué)習(xí)方法進(jìn)行人臉多屬性進(jìn)行識(shí)別,超越了傳統(tǒng)方法。MOON[6]在DCNNs的基礎(chǔ)上,通過改進(jìn)網(wǎng)絡(luò)模型和人臉屬性數(shù)據(jù)集的不平衡時(shí)難以對(duì)深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行多任務(wù)聯(lián)合優(yōu)化的問題,進(jìn)一步提高了準(zhǔn)確率。隨著近年來深度學(xué)習(xí)的快速發(fā)展,深度卷積神經(jīng)網(wǎng)絡(luò)的模型性能不斷完善,人臉多屬性識(shí)別的準(zhǔn)確率還可進(jìn)一步提升。
本文采用殘差網(wǎng)絡(luò)來進(jìn)行人臉屬性識(shí)別。殘差網(wǎng)絡(luò)是利用殘差來重構(gòu)神經(jīng)網(wǎng)絡(luò)的映射,把輸入x再次引人到結(jié)果,其相比其他網(wǎng)絡(luò)模型更易于優(yōu)化,并且可以大幅增加網(wǎng)絡(luò)深度,從而提高識(shí)別準(zhǔn)確率。殘差網(wǎng)絡(luò)的結(jié)構(gòu)是由多個(gè)殘差塊堆疊而成,單個(gè)殘差塊采用跨層連接的模式設(shè)計(jì),內(nèi)部由兩個(gè)卷積結(jié)構(gòu)組成,其結(jié)構(gòu)如圖2所示。
圖2 殘差塊模型
本文采用了香港中文大學(xué)發(fā)布的CelebA人臉屬性數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù)集。該數(shù)據(jù)集包含約20萬張人臉圖像,每張圖片提供了40個(gè)人臉屬性標(biāo)注和5個(gè)人臉關(guān)鍵點(diǎn)的位置信息。本文依據(jù)CelebA官方的標(biāo)準(zhǔn),取其中的約16萬張人臉圖像用于網(wǎng)絡(luò)模型的訓(xùn)練,約2萬張圖像用于驗(yàn)證,2萬張圖像用于測(cè)試網(wǎng)絡(luò)模型。本實(shí)驗(yàn)在CelebA提供的圖片數(shù)據(jù)集上進(jìn)行模型準(zhǔn)確率的測(cè)試,并聯(lián)合整個(gè)系統(tǒng)進(jìn)行系統(tǒng)的性能測(cè)試,對(duì)系統(tǒng)的現(xiàn)實(shí)應(yīng)用能力進(jìn)行綜合評(píng)估。
針對(duì)多標(biāo)簽分類問題,本系統(tǒng)算法使用交叉熵作為損失函數(shù)進(jìn)行訓(xùn)練,該函數(shù)創(chuàng)建一個(gè)衡量目標(biāo)和輸出之間的交叉熵的標(biāo)準(zhǔn),其公式如公式(1):
公式(1)中的m表示屬性總數(shù),ni表示第i個(gè)屬性的樣本總數(shù),y(i)指第i個(gè)屬性第j個(gè)樣本的標(biāo)注值,而jhx(i)指第i個(gè)屬性第j個(gè)樣本的預(yù)測(cè)值。θj
為了方便與其他網(wǎng)絡(luò)模型的實(shí)驗(yàn)結(jié)果比較,本文采用了多屬性平均識(shí)別準(zhǔn)確率(mACC)作為評(píng)價(jià)標(biāo)準(zhǔn),其計(jì)算公式如下公式(2):
本文隨機(jī)抽取12項(xiàng)人臉屬性進(jìn)行測(cè)試,其平均識(shí)別準(zhǔn)確率達(dá)到了90.02%。實(shí)驗(yàn)結(jié)果見表1,在相同的測(cè)試條件下,所有屬性的識(shí)別準(zhǔn)確率均高于已有的方法 ANet+LNet和 MOON。
表1 在數(shù)據(jù)集CelebA上識(shí)別正確率比較
系統(tǒng)運(yùn)行平臺(tái)為Windows 10操作系統(tǒng),開發(fā)語言為Python 3.5.2,基于PyTorch神經(jīng)網(wǎng)絡(luò)開源框架開發(fā)。
本文的人臉屬性識(shí)別系統(tǒng)功能主要分為兩部分:圖像獲取和屬性識(shí)別。
圖像獲取分為兩種方式:第一種方式是系統(tǒng)調(diào)用攝像頭設(shè)備,拍攝并采集圖像,將圖像存入內(nèi)存進(jìn)行識(shí)別。本系統(tǒng)對(duì)攝像頭的調(diào)用通過OpenCV(Open Source Computer Vision Library)計(jì)算機(jī)視覺庫實(shí)現(xiàn)。OpenCV調(diào)用攝像頭獲取圖像的步驟為:①利用Video?Capture函數(shù)獲取攝像頭對(duì)象;②在內(nèi)存中開辟三維矩陣空間用以保存彩色(多通道)圖像;③將圖像的像素以矩陣形式保存到內(nèi)存中。
第二種方式是通過用戶選取保存在硬盤內(nèi)部的人臉圖像文件,將其送入內(nèi)存中。
屬性識(shí)別部分的具體工作流程主要包括以下幾個(gè)步驟:從內(nèi)存中獲取圖像,對(duì)圖像進(jìn)行人臉關(guān)鍵點(diǎn)定位、人臉校準(zhǔn)以及人臉截取處理,預(yù)處理后進(jìn)行人臉屬性識(shí)別,最后將識(shí)別結(jié)果輸出。
具體工作流程如圖3所示。
圖3 系統(tǒng)運(yùn)作主要流程
系統(tǒng)效率的主要影響因素為神經(jīng)網(wǎng)絡(luò)模型的加載和對(duì)圖像的處理速度。我們?cè)贑elebA數(shù)據(jù)集上進(jìn)行測(cè)試,單張圖片從加載到完成所有屬性的識(shí)別需時(shí)236ms。該時(shí)長(zhǎng)保證了用戶在使用系統(tǒng)時(shí)能有較好的交互體驗(yàn)。
系統(tǒng)運(yùn)行時(shí)的效果如圖4所示。系統(tǒng)提供了用攝像頭獲取圖像、從本機(jī)選取圖像、屬性識(shí)別圖像等多種功能。用戶能夠通過兩種方式輸入圖像,對(duì)系統(tǒng)進(jìn)行識(shí)別。一種是從本機(jī)中選取人臉圖像,圖像選擇后將顯示在界面中部;另一種是通過調(diào)用計(jì)算機(jī)配備的攝像頭直接獲取用戶圖像,將獲取的圖像顯示在界面中部。識(shí)別之后界面右側(cè)出現(xiàn)識(shí)別結(jié)果。
圖4 系統(tǒng)運(yùn)行結(jié)果
本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)人臉多屬性識(shí)別系統(tǒng)。該系統(tǒng)設(shè)計(jì)了級(jí)聯(lián)的神經(jīng)網(wǎng)絡(luò)分別對(duì)圖像進(jìn)行關(guān)鍵點(diǎn)定位和屬性識(shí)別,其中關(guān)鍵點(diǎn)定位采用了主干-分支網(wǎng)絡(luò)結(jié)構(gòu),能夠直接從原始圖像中提取關(guān)鍵點(diǎn)信息,進(jìn)而幫助系統(tǒng)獲取對(duì)齊后的人臉;屬性識(shí)別方面則使用了較為先進(jìn)的殘差網(wǎng)絡(luò),提高了系統(tǒng)的識(shí)別準(zhǔn)確率(平均識(shí)別準(zhǔn)確率為90.02%),有良好的應(yīng)用前景。