郭境熙 劉 嘉
(北京電影學(xué)院聲音學(xué)院,北京 100088)
隨著影視文化產(chǎn)業(yè)的繁榮,社會對影視產(chǎn)品的需求也越來越大。今天,由于工業(yè)化技術(shù)水平的提高,影視聲音后期制作的分工越來越細(xì),質(zhì)量也越來越好。無論是院線電影、電視劇,還是網(wǎng)絡(luò)平臺上播放的一些劇集,甚至包括目前非常流行的抖音小視頻,都很明顯地感受到了這種趨勢。然而,隨著節(jié)目數(shù)量爆發(fā)性地增長,隨之而來的問題是有限的制作勞動力資源與越來越多的節(jié)目數(shù)量和質(zhì)量需求之間不可調(diào)和的矛盾。從目前的工藝來看,聲音編輯環(huán)節(jié)在整個制作流程中占據(jù)了絕對的時間比例,它有著人力高度密集、工作強(qiáng)度大、時間占比長、重復(fù)性勞動非常多的特點(diǎn),在實(shí)際工作中,從業(yè)人員大量的時間和精力會耗費(fèi)在對聲音素材的檢索、分類、編輯、聲畫同步等工作上。與此同時,我們看到聲音編輯工作并非簡單勞動,一個合格的聲音編輯人員往往需要經(jīng)過長時間的職業(yè)技能培訓(xùn),才能滿足這種藝術(shù)產(chǎn)品的生產(chǎn)質(zhì)量要求。所以,無論是采用簡單地增加個體勞動時間,還是快速擴(kuò)大聲音編輯從業(yè)人員的規(guī)模來滿足越來越多、越來越高的行業(yè)制作需求,都是不現(xiàn)實(shí)的。
從2015年起,人工智能的研究和應(yīng)用逐步開始進(jìn)入到大眾的視野,在圖像識別領(lǐng)域和神經(jīng)網(wǎng)絡(luò)系統(tǒng)領(lǐng)域不斷出現(xiàn)了一些有趣的思路和新的應(yīng)用場景。得益于算法的發(fā)展以及計(jì)算能力的提升,圖像識別的準(zhǔn)確度相對以前有了很大的提高,近年來ImageNet的年度大規(guī)模視覺識別挑戰(zhàn)賽中(ILSVRC),排名前五的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)錯誤率即能做到小于5%。這其實(shí)已經(jīng)在分類準(zhǔn)確率上高于人類了,而隨著于計(jì)算機(jī)硬件的快速迭代和性能提升,在目前普通家用計(jì)算機(jī)平臺上利用性能稍好一點(diǎn)的GPU和CPU就能輕易地滿足以上視覺識別和神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)的需求。
在我們通常的習(xí)慣思維中,影視聲音后期往往被更多地認(rèn)為是一個藝術(shù)創(chuàng)作過程,技術(shù)性的手段被限定在了一個很有限的范圍里。并且由于聲音自身的特性以及基礎(chǔ)研究長期停滯不前,造成了它幾乎是現(xiàn)在影視制作中自動化和智能化程度最低的一個領(lǐng)域。但是,如果我們理性地對整個過程進(jìn)行結(jié)構(gòu)化的回溯,就會發(fā)現(xiàn)其實(shí)前面提到的很多工作內(nèi)容,尤其在重復(fù)性地耗費(fèi)大量精力進(jìn)行聲畫同步的聲音編輯過程中,可以將其分解為畫面同步點(diǎn)的判斷、聲音素材時間線位置確定和聲音素材的放置三個環(huán)節(jié)。假如采用現(xiàn)有的圖像識別和神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)技術(shù)建立標(biāo)準(zhǔn)模型,實(shí)現(xiàn)素材的自動調(diào)用,則有可能實(shí)現(xiàn)整個過程或者過程中某些重要環(huán)節(jié)的智能化輔助。
鑒于此,筆者以影視作品中最常見的腳步聲編輯作為研究對象,在過程中利用開源的Openpose(人體關(guān)鍵點(diǎn)實(shí)時檢測)框架對畫面人物的動作進(jìn)行識別,將結(jié)果數(shù)據(jù)進(jìn)行必要的預(yù)處理后同時用SVM(支持向量機(jī))和MLP(多層感知器)進(jìn)行訓(xùn)練,觀察得到的訓(xùn)練模型的結(jié)果,并生成標(biāo)準(zhǔn)的時間線XML,導(dǎo)入工作站進(jìn)行素材鏈接,從而實(shí)現(xiàn)基本的聲音編輯過程中聲畫同步的自動化。
腳步聲的編輯過程,我們按照工作流程把它分為了四個步驟:(1)在畫面中找出人物的腳部并觀察鞋、地的材質(zhì)用以確定聲音素材的選擇;(2)在時間線上找到左右腳觸地的精確位置(時間點(diǎn));(3)從聲音資料庫中檢索符合要求的素材;(4)將聲音擺放到時間線上并做相應(yīng)的微調(diào)??梢园l(fā)現(xiàn)在整個過程中重復(fù)性勞動最多,耗費(fèi)時間最長的是在步驟2和步驟4上,同時,由于步驟1和步驟3目前還受制于相關(guān)基礎(chǔ)元數(shù)據(jù)的智能化標(biāo)記完善程度制約,所以,筆者暫時對這兩個步驟進(jìn)行簡化(將在后文說明),事先根據(jù)所訓(xùn)練的對象準(zhǔn)備好一套適合的腳步素材庫以備調(diào)用,而把主要精力放到通過機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)算法將畫面中腳步在時間線上的精確定位(步驟2)和聲音素材的自動套用上。
實(shí)驗(yàn)過程中首先借助開源框架Openpose來進(jìn)行畫面人物對象的識別和人物姿態(tài)推測。Openpose是一個由卡內(nèi)基梅隆大學(xué)維護(hù)的人體姿態(tài)識別開源庫,基于CAFFE框架開發(fā),以卷積神經(jīng)網(wǎng)絡(luò)和監(jiān)督學(xué)習(xí)為手段在不通過任何傳感器的幫助下,實(shí)現(xiàn)畫面中一個或多個人物的姿態(tài)識別。目前,可以完成:單人最多25個身體/腳部關(guān)節(jié)的關(guān)鍵點(diǎn)識別(本研究選取方案);或42個關(guān)鍵點(diǎn)的手部關(guān)節(jié)識別(左右手各21個);或70個面部關(guān)鍵點(diǎn)的識別,特別是身體關(guān)鍵點(diǎn)識別模式下,運(yùn)算時間與檢測出的人數(shù)無關(guān),這無疑為大規(guī)模的部署和真實(shí)應(yīng)用環(huán)境中復(fù)雜的畫面提供了非常強(qiáng)大的分析工具。
在得到關(guān)鍵點(diǎn)數(shù)據(jù)集之后,通過人工的方法對左右腳落地的時間進(jìn)行標(biāo)記和其他的預(yù)處理,構(gòu)成下一步模型訓(xùn)練的基礎(chǔ)。我們期望將原始數(shù)據(jù)和標(biāo)記后的數(shù)據(jù)通過機(jī)器學(xué)習(xí)對二者進(jìn)行擬合,最終訓(xùn)練得到一個可以通過每幀畫面人體關(guān)節(jié)點(diǎn)坐標(biāo)關(guān)系判定腳步落下的模型,用于實(shí)際工作中畫面的識別。在這個環(huán)節(jié)利用了目前比較常見的兩種神經(jīng)網(wǎng)絡(luò)算法:支持向量機(jī)(Support Vector Machines, SVM)和多層感知器(Multilayer Perceptron, MLP),我們在過程中觀察各自的表現(xiàn),比較它們的結(jié)果并評價其差異。
經(jīng)過訓(xùn)練和擬合后的模型可以識別畫面中的人物,檢測畫面中人物的腳步落下時刻,最終將結(jié)果通過腳本導(dǎo)出XML文件,利用非線性編輯工作站實(shí)現(xiàn)腳步聲音素材在時間線上的自動放置。
訓(xùn)練樣本的獲取使用了GH5相機(jī)以1080p/60fps的格式拍攝下幾種不同狀態(tài)的單個人物運(yùn)動視頻片段,包括了兩種機(jī)位方式以及四種維度的移動(表1),以保證人物運(yùn)動的多樣性。之所以拍攝單人而非多人,是考慮到在實(shí)驗(yàn)初期盡可能控制一些不必要的變量,實(shí)際上,Openpose對同一畫面中多人的姿態(tài)判定準(zhǔn)確程度與單人基本沒有差異,如果最終訓(xùn)練結(jié)果模型能適用,則多人畫面的處理僅僅為計(jì)算量的簡單放大而已。此外,最初考慮60fps的原因是與時分秒的進(jìn)制數(shù)一致,為某些環(huán)節(jié)中可能出現(xiàn)的人工修正減少一些誤差。但是,這些視頻測試數(shù)據(jù)量的提高在實(shí)驗(yàn)中對于模型準(zhǔn)確性反而造成了不必要的擾動。經(jīng)過觀察發(fā)現(xiàn)更低的幀率可以一定程度上解決上述兩個問題,不但提高精度,而且還降低計(jì)算成本,因此選擇將所拍攝畫面的幀率和分辨率等倍縮小成720p/30fps的數(shù)據(jù)。
表1 拍攝內(nèi)容
圖1 數(shù)據(jù)處理流程圖
使用Openpose對拍攝畫面進(jìn)行分析和姿勢判定,設(shè)定最大推斷人數(shù)為1。在過程中人物的骨架信息被嵌入到輸出畫面中(圖2),并以單幀的形式輸出人物骨架的關(guān)節(jié)點(diǎn)信息。推斷結(jié)束后,得到帶有骨架圖像的視頻和連串的json序列,每個json文件中中包含人數(shù)、身體部位等屬性以及關(guān)節(jié)數(shù)據(jù)的一維矩陣。這個一維矩陣包含了25個關(guān)節(jié)點(diǎn)的x,y值絕對坐標(biāo)值,以及推斷對應(yīng)關(guān)節(jié)點(diǎn)x,y值的權(quán)重系數(shù),共75個特征參數(shù)。
圖2 左邊為原始視頻的縮略圖,右邊為經(jīng)過Openpose推斷后視頻的縮略圖
Openpose輸出的數(shù)據(jù)是基于幀的單個json文件,在訓(xùn)練模型時,需要多次讀取數(shù)據(jù),這會耗費(fèi)不必要的時間,同時,當(dāng)把時序信息作為訓(xùn)練特征的一部分時,單幀輸入的數(shù)據(jù)會造成不利于模型訓(xùn)練的問題。因此在此次試驗(yàn)過程中,各個視頻導(dǎo)出的json序列里的一維都被逐個提取出來,各自存放在一個csv文件中,最終每個視頻得到的數(shù)據(jù)序列是一個二維數(shù)組,行是單幀的關(guān)節(jié)點(diǎn)信息,列為幀序列信息。
圖3 json文件序列轉(zhuǎn)換為單個csv文件
圖4 關(guān)節(jié)坐標(biāo)序號對應(yīng)圖
在得到數(shù)據(jù)之后,首先需要對原始數(shù)據(jù)進(jìn)行以幀為精度的標(biāo)注,神經(jīng)網(wǎng)絡(luò)才會根據(jù)標(biāo)注的值去“學(xué)習(xí)”當(dāng)前特征數(shù)據(jù)所處的狀態(tài),并通過前向傳遞與反向傳遞算法擬合這批特征數(shù)據(jù)形成模型。另外需要特別提及一點(diǎn),在此進(jìn)行數(shù)據(jù)標(biāo)注所選用作為標(biāo)注依據(jù)的關(guān)節(jié)點(diǎn),與模型訓(xùn)練過程中所選擇的關(guān)節(jié)點(diǎn)沒有直接的關(guān)系,模型擬合的趨勢是由特征值自己本身數(shù)據(jù)導(dǎo)向的。
實(shí)現(xiàn)思路如下:將人物的運(yùn)動抽象為左腳周期與右腳周期,左腳周期開始于左腳落到地面上的對應(yīng)幀f,左腳周期結(jié)束于右腳落到地面上的對應(yīng)幀f,并開始右腳周期,例如剛剛例子中左腳周期的幀數(shù)為n。圖4是骨架關(guān)節(jié)點(diǎn)的號碼對應(yīng)圖,本次研究中筆者使用[j~j]來表達(dá)0~24號(共25個)關(guān)節(jié)點(diǎn)。左腳參照的關(guān)節(jié)點(diǎn)選擇[j,j,j,j,j]作為標(biāo)注依據(jù),右腳參照的關(guān)節(jié)點(diǎn)選擇[j,j,j,j,j]為標(biāo)注依據(jù),當(dāng)左腳[j,j,j,j]關(guān)節(jié)點(diǎn)接觸地面時,開始右腳周期,[j,j,j,j]關(guān)節(jié)點(diǎn)接觸地面時,結(jié)束右腳周期,開始新的左腳周期。左腳周期中所包含的所有幀都用0作為標(biāo)注值,右腳周期中所包含的所有幀都用1作為標(biāo)注值,最終圖像腳步識別的問題就被簡化為二分類問題。
通過純圖像識別關(guān)節(jié)點(diǎn)的位置會有輕微波動,在標(biāo)注過程中,所用到的關(guān)節(jié)點(diǎn)都作等權(quán)重處理,所有關(guān)節(jié)點(diǎn)都會被用于狀態(tài)判別,這樣能縮小姿態(tài)推斷過程中骨架數(shù)據(jù)的輕微波動帶來的影響。
圖5 方框內(nèi)為手動標(biāo)注內(nèi)容,“1”代表這部分?jǐn)?shù)據(jù)正處于右周期
經(jīng)過Openpose獲得的原始數(shù)據(jù)能提供75個輸入特征,關(guān)節(jié)點(diǎn)的坐標(biāo)數(shù)值較大,各關(guān)節(jié)點(diǎn)x值的區(qū)間在[0,1280],y值區(qū)間在[0,720],推斷過程中的權(quán)重值c的區(qū)間在[0,1]之間,各點(diǎn)關(guān)系是離散的,這對模型擬合有極大影響(若不經(jīng)任何處理,直接將原始數(shù)據(jù)用于訓(xùn)練,模型在測試集上表現(xiàn)正確率為40%~60%)。為了提高模型的精確度,在數(shù)據(jù)輸入之前,需要提前做一些預(yù)備處理,此外,考慮到使用的機(jī)器學(xué)習(xí)模型包括SVM和MLP,這兩者對輸入特征的數(shù)據(jù)相對敏感,亦需要人為減少無用特征。
3.5.1特征提取
在訓(xùn)練開始前,需要預(yù)估某些特征值的作用,并將無用的特征值刪除。在本次研究中,對于人物腳步,由Openpose推斷所得的權(quán)重值c并無用處,經(jīng)過實(shí)驗(yàn)和觀察(可參考本文4.2),代表x值的特征以及頭部的特征對模型擬合沒有太大的意義,因此也將其刪除。
在本次研究中,筆者并沒有加入深度學(xué)習(xí)的算法,MLP或者SVM算法很難對畫面內(nèi)部信息進(jìn)行特征提取。每一個關(guān)節(jié)點(diǎn)都是絕對的坐標(biāo)值,意味著人物在畫面中從左向右移動,關(guān)節(jié)點(diǎn)的x值會逐漸增大,人物在畫面中上下移動時,y值會產(chǎn)生一些噪聲。通過下面的方法,可以將x,y的絕對坐標(biāo)值轉(zhuǎn)化為相對坐標(biāo)值:
x=x-x
y=y-y
x表示關(guān)節(jié)點(diǎn)1坐標(biāo)的x值,x表示關(guān)節(jié)點(diǎn)8坐標(biāo)的x值,y表示關(guān)節(jié)點(diǎn)1坐標(biāo)的y值,y表示關(guān)節(jié)點(diǎn)8坐標(biāo)的y值(圖4),x, y表示計(jì)算的出的參照點(diǎn)對應(yīng)的x,y值,y表示原始絕對坐標(biāo)值,y表示的是相對坐標(biāo)值。關(guān)節(jié)點(diǎn)1與關(guān)節(jié)點(diǎn)8的中間連線代表了人物骨架的軀干部分,處于整個骨架的中心位置,所以將軀干部分的中點(diǎn)設(shè)置為參照點(diǎn)。這種處理方式可以近似看作將人物從畫面中分割出來,并得到各關(guān)節(jié)點(diǎn)于參照點(diǎn)的相對位置(圖6)。
圖6 將人物從畫面中分割,獲得參照點(diǎn)
3.5.2算數(shù)插值
由于Openpose推斷出人物畫內(nèi)部分的姿態(tài),人物身體部分被遮擋或者超出畫面時,這部分關(guān)節(jié)點(diǎn)的數(shù)值會被0填充,導(dǎo)致這部分的數(shù)值變成離散值,亦會影響模型的擬合。故使用以下方法對缺失幀f進(jìn)行填充:
其中,f表示第n幀的數(shù)值,f表示第n-2幀的數(shù)值,f表示第n+2幀的數(shù)值。需要特別說明的是,在研究階段的初期,希望盡可能研究典型狀態(tài)得到收斂結(jié)果,對于在長時間段的關(guān)鍵點(diǎn)缺失問題暫時排除在本次研究范圍之外,因此采用了最簡單的插值算法,只補(bǔ)充2幀以內(nèi)的數(shù)據(jù)缺失。這對于目前的數(shù)據(jù)集是可行的,但是一旦出現(xiàn)3幀或以上的數(shù)據(jù)缺失,這種降噪方式范圍反而會給整個數(shù)據(jù)集加入更多的干擾噪聲。另外,插值算法即使補(bǔ)全了缺失的值,依舊會對模型的準(zhǔn)確度產(chǎn)生影響。
3.5.3歸一化
歸一化是一種線性變化,可以將樣本的特征值映射到[-1,1]或[0,1]的區(qū)間內(nèi)。這種變化對數(shù)據(jù)改變合并不會造成數(shù)據(jù)失真,還能提高數(shù)據(jù)在模型擬合中的效率,而且這種變換不會改變原始數(shù)據(jù)的數(shù)值排序。數(shù)值歸一化以后,能加快梯度下降的求解速度,而且避免了因?yàn)樘卣髦颠^大權(quán)重值偏移而導(dǎo)致過擬合。
骨架中的各個關(guān)節(jié)點(diǎn)對應(yīng)的坐標(biāo)所在的數(shù)值區(qū)間各不相同,在此研究中,經(jīng)過得到各個關(guān)節(jié)點(diǎn)與x, y的相對坐標(biāo)值,例如頭部的坐標(biāo)點(diǎn)和腳步的坐標(biāo)點(diǎn)的相對距離會更大,肩部坐標(biāo)點(diǎn)與胯部坐標(biāo)點(diǎn)的相對距離會比前者要小,手部的坐標(biāo)點(diǎn)與胸部坐標(biāo)點(diǎn)的相對距離甚至?xí)?。不同特征的?shù)值區(qū)間分離過大時,在模型訓(xùn)練的過程中每個參數(shù)學(xué)到的權(quán)重值很可能會偏移,所以需要通過歸一化將各個特征值歸一到一個相對數(shù)值比較小的區(qū)間中。
在本次研究中使用了均值歸一化:
方法(1)Mean Normalization
在實(shí)驗(yàn)的過程中還嘗試了另外兩種歸一化方法:
方法(2)Min-Max Scaler
方法(3)Robust Scaler
Robust Scaler用到了四分位數(shù)的思路,Q(m)等于該樣本中所有數(shù)值由小到大排列后排在1/4位置的數(shù)字,Q(m)等于該樣本中所有數(shù)值由小到大排列后排在3/4位置的數(shù)字。
當(dāng)前研究中輸入特征為稠密矩陣,各個輸入特征數(shù)值差距比較大,后兩種歸一化方法在原理上不太適合,且經(jīng)過多次對比測試后,發(fā)現(xiàn)使用均值歸一化處理過的數(shù)據(jù)做訓(xùn)練的模型,推斷結(jié)果的正確率平均高出2%~3%。
另一方面,在畫面中人物也會在畫面縱深方向移動,這意味著在同一段視頻內(nèi),如果人物在其中是縱深移動,點(diǎn)與點(diǎn)的絕對距離會根據(jù)近大遠(yuǎn)小的規(guī)則變化,這相當(dāng)于也在時序軸上加入了不可忽略的噪聲。在輸入數(shù)據(jù)之前,通過如下一種歸一化方法將這部分噪聲去除:
|jj|表示關(guān)節(jié)點(diǎn)1、8之間的距離,也就是軀干部分的長度。在畫面內(nèi)人物遠(yuǎn)近移動時,身體各部分可視作在同一焦平面上,即各個部分點(diǎn)與點(diǎn)之間的距離比值幾乎是一致的,因此可將|jj|用作縮放系數(shù)。每一幀各個點(diǎn)與參考點(diǎn)的距離經(jīng)過除法運(yùn)算以后,由于遠(yuǎn)近而帶來的數(shù)值波動能較好消除。
本次試驗(yàn)中,筆者選擇scikit-learn這個機(jī)器學(xué)習(xí)庫。scikit-learn是一個python的機(jī)器學(xué)習(xí)庫(以下簡稱為sk-learn),提供了多種機(jī)器學(xué)習(xí)模型以及數(shù)據(jù)處理方法。在訓(xùn)練中我們從sk-learn庫中選取了兩種機(jī)器學(xué)習(xí)任務(wù)中較為常用的模型:支持向量機(jī)(SVM)和多層感知器(MLP)。此外,筆者借助numpy庫的numpy.array作為數(shù)據(jù)在訓(xùn)練過程中的承載方式,所有的操作都以numpy.array的形式操作。
訓(xùn)練過程中以一幀作為一個單位樣本,目的在于通過每一幀的關(guān)節(jié)坐標(biāo)信息來判定畫中人物腳步所在的運(yùn)動周期是左還是右。在訓(xùn)練過程中將人物的運(yùn)動方式分為以下幾類分別進(jìn)行訓(xùn)練:
(1)固定機(jī)位,四向人物位置固定的腳步運(yùn)動;
(2)固定機(jī)位,人物向縱深位置的腳步運(yùn)動;
(3)固定機(jī)位,人物在畫面中從左向右/從右向左移動;
(4)機(jī)器跟隨人物,人物正面向前移動;
(5)機(jī)器跟隨人物,人物背面向前移動;
(6)機(jī)器跟隨人物,人物側(cè)面向前移動。
4.1.1支持向量機(jī)(SVM)
SVM是在分類與回歸分析中分析數(shù)據(jù)的監(jiān)督式模型與學(xué)習(xí)的二元分類的廣義線性分類器,它的決策邊界是對學(xué)習(xí)的樣本求解最大邊距超平面。學(xué)習(xí)權(quán)重值分別選擇[0.1,1,10,100,200]。
4.1.2多層感知器(MLP)
MLP是人工神經(jīng)網(wǎng)絡(luò)的一種,使用計(jì)算機(jī)構(gòu)成一個一個的神經(jīng)元,多個單元組成單層的神經(jīng)層,再由多個神經(jīng)層連結(jié)起來組成多層的神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)思路來源于人的大腦皮層,以此模仿人腦的思考方式。
在全連接神經(jīng)網(wǎng)絡(luò)的實(shí)驗(yàn)中,共有20個輸入單元,3個隱藏層,各個隱藏層的神經(jīng)元個數(shù)分別為[20,20,10],輸出單元為1個,激活函數(shù)為ReLU,學(xué)習(xí)速率分別選擇a= [0.001,0.01,0.1,0.5]。由于樣本數(shù)量比較少,在訓(xùn)練過程中一次性將所有的樣本都用于模型的訓(xùn)練,不設(shè)置批次大小。
在訓(xùn)練開始前,所有的數(shù)據(jù)都會采用邏輯回歸模型用于基本二分類收斂測試,首先觀察通過邏輯回歸處理的數(shù)據(jù)集模型是否有收斂傾向,確認(rèn)有數(shù)據(jù)集有收斂傾向,再考慮進(jìn)行剩余模型的訓(xùn)練。由于實(shí)驗(yàn)是二分類問題,正確率高于50%+10%即視為有收斂傾向。
在訓(xùn)練開始時,先將csv文件導(dǎo)入到python項(xiàng)目中,使用numpy.array構(gòu)建一個矩陣承載數(shù)據(jù),矩陣的結(jié)構(gòu)與csv文件數(shù)據(jù)的結(jié)構(gòu)是一致的,行為單幀的關(guān)節(jié)點(diǎn)信息,列為幀序列信息。
sk-learn提供的MLP與SVM(在SVC類下)方法獲得訓(xùn)練數(shù)據(jù)的方式是一樣的,因此不需要單獨(dú)為這兩種模型重新構(gòu)建數(shù)據(jù)結(jié)構(gòu)。模型會將每一行視為單幀樣本,將每一行的各個元素視為一個輸入特征,當(dāng)?shù)谝粋€樣本擬合結(jié)束后,會自動跳入到下一個單幀樣本,讀取下一個樣本的元素。我們將已標(biāo)注的數(shù)據(jù)集分成兩類:一類叫做訓(xùn)練集,另一類叫做測試集。訓(xùn)練集用于MLP與SVM模型的訓(xùn)練,測試集用于評判模型擬合的效果,得出正確率的值可以作為預(yù)處理方法和模型魯棒性優(yōu)劣的參考。
在模型訓(xùn)練過程中,嘗試了組合不同預(yù)處理方法的訓(xùn)練集。各種組合對于訓(xùn)練結(jié)果的正確率影響不同,其中包括對x,y輸入特征和各個關(guān)節(jié)點(diǎn)選擇的取舍,取舍原因在文中3.5提及。根據(jù)觀察判斷,與下半身相關(guān)的關(guān)節(jié)點(diǎn)會對結(jié)果產(chǎn)生直接影響,而腳步運(yùn)動在畫面中也可以抽象為垂直運(yùn)動,亦可以預(yù)測y值會比x值重要。根據(jù)多次實(shí)驗(yàn)得到的結(jié)果確實(shí)可觀察得出,經(jīng)過降噪與歸一化后的數(shù)據(jù)用于處理有利于模型擬合。
在實(shí)驗(yàn)中所用的數(shù)據(jù)表示見表2。
表2 縮寫及對應(yīng)輸入特征關(guān)節(jié)點(diǎn)
下文列舉出幾個數(shù)據(jù)選擇和處理的典型:
4.3.1不經(jīng)過任何預(yù)處理,特征提取
圖7
不經(jīng)過任何數(shù)據(jù)預(yù)處理,輸入特征為[x,y],[heel joints]/[x,y],[ankle joints],在固定機(jī)位的所有組的測試集表現(xiàn)上正確率平均在92%,但是在跟隨機(jī)位的所有組的測試集表現(xiàn)上正確率平均只有65%。這意味著這個模型對于任何運(yùn)動場景的泛化能力都比較差,而且如果一旦所選的這兩個關(guān)節(jié)點(diǎn)信息因?yàn)檎趽跤写蠖稳笔r,模型就失去了推斷的能力。
4.3.2只進(jìn)行歸一化,特征提取
表3 不同關(guān)節(jié)點(diǎn)的準(zhǔn)確率
輸入特征為[x,y], [10 joints]/[8 joints]/[left/right joints]/[ankle/heel joints],采取均值歸一化策略,訓(xùn)練出來的模型,雖然在固定機(jī)位所有組訓(xùn)練得到的平均正確率區(qū)間在[79%-91%],但是在跟隨機(jī)位所有組的表現(xiàn)能力不佳,平均正確率見表3。
其正確率甚至低于邏輯回歸的分類正確率,故舍棄這個方法。
4.3.3部分降噪,歸一化、特征提取、刪除x值
輸入特征為[x,y]/[y], [20 joints],插值補(bǔ)全空值,采取均值歸一化策略,訓(xùn)練出來的兩個模型中,包含[x,y]的兩個值的模型在人物出現(xiàn)畫面左右移動的模型里,正確率只有40%,即使是在固定機(jī)位縱深運(yùn)動中人物也會有左右偏移,模型的精確率相比之前降低了20%。但是這些問題都伴隨[x]值被刪除得以改善,那些正確率只有40%模型,在刪除[x]輸入后重新訓(xùn)練,正確率回到了75%,而固定機(jī)位縱深運(yùn)動中由于人物帶來20%下降也被消除。故在本階段研究中將[x]值刪除。
4.3.4完全降噪,歸一化、特征提取、刪除x值
考慮到之前所有的訓(xùn)練測試都沒有去除人物在畫面中所在位置對數(shù)據(jù)帶來的影響,因此才加入了新的降噪方法(見3.5.2的第二個降噪方法)。輸入特征為[y], [20 joints],插值補(bǔ)全空值,采取均值歸一化策略,訓(xùn)練出來的模型對于模型的正確率提高了10%左右。
圖7展示了經(jīng)過各步數(shù)據(jù)預(yù)處理方法數(shù)據(jù)精度提高的變化過程,順序?yàn)閺淖笾劣?,從上至下,每個圖標(biāo)縱坐標(biāo)為進(jìn)經(jīng)過每一步精度收斂后的值,橫坐標(biāo)為時間(幀)。各圖中不同顏色的曲線代表不同特征值的變化波動范圍。
最終方案(參照上文4.3.4)在不同的學(xué)習(xí)速率/學(xué)習(xí)權(quán)重值下,訓(xùn)練得到的結(jié)果除去人物沿縱深位置人物運(yùn)動的情況正確率只有70%~80%以外,在別的典型案例中,模型檢測到正確的腳步運(yùn)動周期準(zhǔn)確率都在90%左右。
筆者將已標(biāo)注的數(shù)據(jù)集分成兩類:一類叫做訓(xùn)練集,另一類叫做測試集。訓(xùn)練集用于MLP與SVM模型的訓(xùn)練,測試集被用于評判模型擬合的效果,得出正確率的值可以作為預(yù)處理方法和模型魯棒性優(yōu)劣的參考。其結(jié)果如圖8所示:
圖8
可以發(fā)現(xiàn),不同的學(xué)習(xí)權(quán)重值c(SVM)和不同的學(xué)習(xí)速率a(MLP)訓(xùn)練出的模型會對結(jié)果造成比較大的影響。SVM模型在學(xué)習(xí)權(quán)重值c為100時訓(xùn)練完成的模型,對于不同狀態(tài)運(yùn)動的綜合表現(xiàn)最好。MLP模型在學(xué)習(xí)權(quán)重值a為0.1時訓(xùn)練完成的模型,對于不同狀態(tài)運(yùn)動的綜合表現(xiàn)最好。
在本次研究中,尚未嘗試使用自動的方法獲得腳步素材的片段,所以需要人工先從素材庫中找出與畫面中地面材質(zhì)、鞋子材質(zhì)符合的腳步素材,并將其切片分割為左、右兩類的素材,對素材文件進(jìn)行一致性命名,同種材質(zhì)單只腳保留20個樣本。
模型推斷得出的數(shù)據(jù)結(jié)果分別為0和1,分別代表左腳周期與右腳周期,通過編寫一個腳本,使得在左右周期切換時標(biāo)注并記錄對應(yīng)的幀序列幀數(shù),這可以得到左右腳對應(yīng)落下時的對應(yīng)幀。將幀數(shù)序列轉(zhuǎn)換為以nn(frame) /30(frame) s的格式,這樣就可以得到一個包含左右腳交替落下的時間序列,將時間序列編碼成XML序列,同時XML序列中還包含了腳步素材的路徑,以及素材本身的部分元數(shù)據(jù)。
程序選擇腳步素材的過程是隨機(jī)過程,將單只腳素材映射為0到19的序列,當(dāng)程序檢測到需要左腳素材時,程序會使用random方法去從0-19中挑選出一個數(shù)值,數(shù)值對應(yīng)的腳步素材的名字與各腳步起始時間點(diǎn)會被添加到XML文件中,往后右腳素材同理重復(fù)一遍次流程,如此往復(fù)。
將XML序列導(dǎo)入到支持XML導(dǎo)入的工作站中,以DaVinci Resovle這個軟件為例,軟件會自動將XML中的元數(shù)據(jù)信息,從對應(yīng)文件夾中找出對應(yīng)的聲音素材文件,自動排布在時間線上,完成后再利用DaVinci的媒體文件導(dǎo)出功能,將時間線導(dǎo)出為aaf、omf交換文件格式,就可以進(jìn)入正常的工業(yè)流程了。
本次實(shí)驗(yàn)的不足主要體現(xiàn)在以下三個方面:
首先,在判定的過程中,需要事先采用人工的方式,考慮人物不同運(yùn)動狀態(tài)以及攝影機(jī)運(yùn)動的狀態(tài),分別進(jìn)行模型的訓(xùn)練才能保證模型用于預(yù)測時的精度,自動化和智能化程度尚待進(jìn)一步提高。
其二,由于聲音素材的現(xiàn)狀,智能化元數(shù)據(jù)標(biāo)注還非常不完善,所以在實(shí)際應(yīng)用環(huán)節(jié)上還需要通過手動指派素材類型的XML文件,很大程度上失去了大規(guī)模工業(yè)化的實(shí)用性。
第三,由于目前使用的神經(jīng)網(wǎng)絡(luò)相對比較簡單,自發(fā)提取骨架特征難以實(shí)現(xiàn),也從一定程度上影響了這個方法的大規(guī)模部署。
因此,在后續(xù)的研究中,可能會考慮在以下幾個方面進(jìn)行優(yōu)化和改進(jìn):
首先,更換神經(jīng)網(wǎng)絡(luò)模型,大幅度提升性能,如使用GCN網(wǎng)絡(luò)使得計(jì)算機(jī)能“讀懂”骨架每一部分的含義,以及各部分對腳步落下影響大小的權(quán)重值,這樣能大幅提升模型的魯棒性以及精確度,當(dāng)骨架某些部分被遮蔽時,計(jì)算機(jī)也可以依靠別的部分去推斷腳步落下的狀態(tài)。另一方面,GCN網(wǎng)絡(luò)還能根據(jù)骨架進(jìn)行別的動作的判定。
第二,對于畫面中識別對象長時間消失(如某一只腳)而造成的數(shù)據(jù)缺失,因人的步伐頻率相對固定,除了采用前一個方法外,其實(shí)還可以嘗試只使用一只腳作為依據(jù),直接機(jī)算另一周期所包含的幀。
注釋
①ImageNet: A large-scale hierarchical image database. ImageNet: 一個大規(guī)模層級的圖像數(shù)據(jù)庫 Jia DengSocher, Li Fei-Fei, Wei Dong, Kai Li and Li-Jia LiR. Miami, FL, USA: IEEE Computer Society, 2009.[C]2009 IEEE Conference on Computer Vision and Pattern Recognition(CVPR). pp. 248-255.
②Scikit-learn: Machine Learning in Python. Pedregosaand Varoquaux, 開源項(xiàng)目G. and Gramfort, A. and Michel, V. and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P. and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.F. 2011, Journal of Machine Learning Research, pp.2825-2830.
③nn代表在整個序列的所在幀數(shù),30代表視頻的幀速率,s為單位(秒)。