薛繼偉 劉濟塵 劉顯德 李 冰
(1.東北石油大學(xué)計算機與信息技術(shù)學(xué)院 大慶 163318)(2.吉林大學(xué)軟件學(xué)院 長春 132200)
隨著互聯(lián)網(wǎng)的飛速發(fā)展,視頻數(shù)據(jù)每天以驚人的速度在增加,通過人工方式在大量的視頻中檢索到特定人變得越來越困難和不切實際。由于多種原因,各類影視公司和數(shù)字媒體公司往往面臨著對特定視頻中的特殊人進行定位和再編輯的需求,而目前絕大多數(shù)非線性編輯系統(tǒng)中沒有智能檢索功能,都是靠人工方式進行,浪費大量人力物力。
機器學(xué)習(xí)技術(shù)推動了現(xiàn)代社會的許多方面:從網(wǎng)絡(luò)搜索到社交網(wǎng)絡(luò)的內(nèi)容過濾,再到電子商務(wù)網(wǎng)站的推薦等[1]。傳統(tǒng)的機器學(xué)習(xí)技術(shù)因為使用數(shù)據(jù)的原始形式進行處理而受到限制。深度學(xué)習(xí)模型由于使用多個處理層來學(xué)習(xí)原始數(shù)據(jù)的多級抽象表示,在圖像識別[2~3]、語音識別[4~5]、預(yù)測潛在藥物分子的活性[6]等領(lǐng)域取得了重大進展。
本文提出了一種基于深度卷積網(wǎng)絡(luò)的視頻檢索方法,實現(xiàn)了在特定視頻中檢索特定人的功能,為非線性編輯及相關(guān)人員提供視頻的快速定位。
自2012年Krizhevsky等利用一個8層的卷積神經(jīng)網(wǎng)絡(luò)AlexNet[2]在當年的ImageNet圖像分類競賽(ILSVRC2012)中以top-5錯誤率15.3%的絕對優(yōu)勢取得冠軍以來,卷積神經(jīng)網(wǎng)絡(luò)在大規(guī)模圖像和視頻識別方面取得了巨大的成功。AlexNet中使用了11×11、5×5和3×3卷積核,網(wǎng)絡(luò)參數(shù)較多。2014年Simonyan等全部使用3×3小卷積核設(shè)計了深層卷積網(wǎng)絡(luò)VGG16和VGG19,獲得了ILSVRC2014比賽的亞軍,使得top-5錯誤率降低到6.8%[7]。同年Google公司的Szegedy等在網(wǎng)絡(luò)寬度和深度兩方面對AlexNet進行了改進,設(shè)計了22層的GoogleNet,獲得了ILSVRC2014比賽的冠軍[8]。GoogleNet的成功證明了卷積網(wǎng)絡(luò)不僅可以在深度上進行疊加,在寬度上同樣可以進行疊加,寬度上的疊加避免了到底選擇多大的卷積核比較合適的煩惱。之后Szegedy對GoogleNet進行了改進,于2015年推出了InceptionV2、InceptionV3[9],2016年推出了InceptionV4和Inception-ResNet[10]。當網(wǎng)絡(luò)層數(shù)疊加過多時往往會出現(xiàn)梯度彌散現(xiàn)象,導(dǎo)致網(wǎng)絡(luò)性能下降。2015年He Kaiming等設(shè)計了一個152層ResNet網(wǎng)絡(luò),獲得ILSVRC 2015分類比賽的冠軍,使得top-5錯誤率降低到3.57%[11]。ResNet成功開創(chuàng)了卷積網(wǎng)絡(luò)不僅可以相鄰層進行連接而且可以跨層連接的歷史,使得網(wǎng)絡(luò)層數(shù)更深、錯誤率更低。受ResNet啟發(fā),2017年Gao Huang等設(shè)計了DenseNet,DenseNet的任一層不僅與相鄰層有連接,而且與它的隨后的所有層都有直接連接,DenseNet緩解了梯度消失問題,增強了特征傳播,促進了特征再用,大大減少了參數(shù)的數(shù)量[12]。圖像分類網(wǎng)絡(luò)的成功也促進了圖像定位與識別領(lǐng)域的快速發(fā)展。
人臉識別系統(tǒng)集成了人工智能、機器識別、機器學(xué)習(xí)、模型理論、專家系統(tǒng)、視頻圖像處理等多種專業(yè)技術(shù)。隨著深度卷積網(wǎng)絡(luò)的成功應(yīng)用,2016年Zhang Kaipeng等提出了基于多任務(wù)級聯(lián)卷積網(wǎng)絡(luò)的人臉檢測與對齊方法MTCNN,該方法在FDDB比賽和WIDERFACE測試集上取得很好的精度并保持了實時性能[13]。2015年Schroff等提出一種用于人臉識別和聚類的統(tǒng)一嵌入方法FaceNet,該方法在LFW數(shù)據(jù)集上的準確率達到99.63%,在You-Tube Faces DB上準確率達到95.12%,在兩個數(shù)據(jù)上的錯誤率比當時公開發(fā)表的結(jié)果降低了30%[14]。
鑒于MTCNN和FaceNet的良好性能,本文以二者為基礎(chǔ),實現(xiàn)了人臉視頻檢索功能,流程如圖1所示,包括模型訓(xùn)練與人臉檢索兩個階段。
圖1 人臉視頻檢索流程
本文所用到的FaceNet和MTCNN模型代碼來源于http://github.com/davidsandberg/facenet。為適應(yīng)本文方法,作者在此基礎(chǔ)上進行了修改。
模型訓(xùn)練過程如圖2所示,主要由三步組成。
圖2 模型的訓(xùn)練過程
step1:準備好將要被檢索的人物圖像文件,并把文件按照不同的人分別存儲到不同的文件夾中,文件夾結(jié)構(gòu)如圖3所示,其中文件夾名即為人名,用于后期的分類與識別。圖4為本文用到的部分人物圖像文件。
圖3 人物圖像文件存儲結(jié)構(gòu)
圖4 部分人物圖像
step2:利用MTCNN算法檢測圖像中的人臉,并把檢測到的人臉裁剪出來,為了便于后期卷積神經(jīng)網(wǎng)絡(luò)處理,本文把檢測到的人臉圖像統(tǒng)一縮放到160×160像素并保存成新的文件,圖5為本文得到的部分人臉圖像。
圖5 部分人臉圖像
step3:利用得到的人臉圖像對FaceNet預(yù)訓(xùn)練模型的SVM分類器進行訓(xùn)練,得到自己的人臉識別模型。
給定一張人物照片和一段視頻,按照圖6所示過程可在視頻文件中檢索出該人出現(xiàn)的所有幀。具體過程如下。
圖6 視頻中人臉檢索過程
step1:輸入將要進行檢索的人物圖像文件和視頻文件;
step2:利用MTCNN模型對準備好的人物圖像進行人臉檢測與對齊得到人臉圖像;
step3:利用訓(xùn)練好的FaceNet模型對step2檢測到的人臉進行識別,得到被檢索人名;
step4:利用MTCNN和FaceNet模型按照一定幀間隔對視頻的圖像進行人臉檢測,如果含有被檢索人則在framelist中添加1,否則添加0;
step5:對framelist進行處理,得到含有被檢索人的視頻的開始幀與結(jié)束幀;
step6:輸出檢索結(jié)果。
本文的主要實驗環(huán)境配置為Intel Core i7-7800X 6核CPU,32G內(nèi)存,NVIDIA RTX 2080Ti顯卡,操作系統(tǒng)為Ubuntu16.04,Python 3.6,tensorflow 1.13.1。
實驗數(shù)據(jù)包括訓(xùn)練集、驗證集和測試集,所有照片都是作者從網(wǎng)上下載的。訓(xùn)練集由10名演員各20張照片共200張照片組成;驗證集由10名演員各5張照片共50張照片組成,驗證集中的照片在訓(xùn)練集中未出現(xiàn)過。利用MTCNN進行人臉檢測與對齊的批處理語句如下:
由于本文實驗數(shù)據(jù)有限,所以采用預(yù)訓(xùn)練模型“20180402-114759”對人臉進行特征提取,該模型使用的網(wǎng)絡(luò)結(jié)構(gòu)為Inception ResNet v1,訓(xùn)練數(shù)據(jù)集為VGGFace2,LFW準確率為99.65%。實驗中只利用200張人臉數(shù)據(jù)對FaceNet模型的SVM分類器進行訓(xùn)練,批處理語句如下:
訓(xùn)練后利用下面的批處理語句對驗證集中的50張人臉數(shù)據(jù)對模型進行驗證,準確率達到98%。
在訓(xùn)練數(shù)據(jù)只有200張人臉圖像的情況下,能達到如此高的準確率,已是難能可貴,另一方面也說明了預(yù)訓(xùn)練模型的強大。
從github上下載的代碼中沒有視頻檢索功能,所以作者對利用攝像頭進行人臉識別的src/real_time_face_recognition.py文件進行了修改,一方面可以對視頻文件進行人臉檢測與識別,另一方面可以對檢測結(jié)果列表進行合并,輸出含有被檢索人的開始幀與結(jié)束幀。下文以從網(wǎng)上下載的一段含有趙麗穎的視頻檢索為例進行說明,利用如下的批處理語句進行視頻檢索:
檢索后將會輸出如圖7所示的framelist列表,其中:“1”表示當前幀含有被檢索人,“0”表示當前幀中不含被檢索人。
圖7 部分檢索結(jié)果列表
從圖7中我們可以看出存在如下兩種情況。
1)在多個含有被檢索人的幀之間存在少數(shù)幾幀不含檢索人(如圖7中劃線部分);
2)在多個不含有被檢索人的幀之間存在少數(shù)幾幀含檢索人;
實驗結(jié)果表明這兩種情況大多是因為漏檢或誤檢造成的。第1種情況屬于漏檢或誤檢,第2中情況屬于誤檢。為了避免漏檢或誤檢,本文對第1種情況進行特殊處理。即:當兩個“1”之間存在的“0”的個數(shù)少于所設(shè)定的threshold時,把“0”當成“1”處理,處理之后的結(jié)果如圖8所示,框起來的“1”為發(fā)生改變的元素。
圖8 threshold=10時framelist處理結(jié)果
然后對處理之后的framelist進行統(tǒng)計,得到若干連續(xù)“1”的開始幀和結(jié)束幀,輸出結(jié)果如下:
接下來可以根據(jù)視頻的播放頻率把幀區(qū)間轉(zhuǎn)換成如下所示的與非編時間線一致的時間區(qū)間:
與人工檢索方式對比,本段視頻共有1719幀,其中含有趙麗穎的共有1069幀,臉部不被大范圍遮擋的有859幀,本文共檢索出558幀,召回率64.96%,圖9為誤檢或漏檢的部分圖像。
圖9 部分誤檢或漏檢的圖像
本文利用MTCNN和FaceNet模型對視頻文件進行人臉檢索,獲得該人在視頻中出現(xiàn)的所有幀,便于非線性編輯人員快速進行視頻幀的定位與編輯,從而節(jié)省大量勞力。但本文方法也存在如下不足:一是存在漏檢和誤檢情況;二是檢索速度離實時檢索還有距離。今后將從以下幾個方面進行改進:1)增大訓(xùn)練數(shù)據(jù)集,提高識別的準確率;2)繼續(xù)研究如何利用更好、更快的人臉識別算法提高檢索的準確率和速度;3)研究如何讀取視頻的關(guān)鍵幀,免得逐幀或按固定間隔進行處理以提高檢索速度;4)改進MTCNN算法,提高人臉檢測的準確率。