程小蘭,蔣從鋒,歐東陽,任永堅,張紀林,萬 健
(1.杭州電子科技大學(xué)計算機學(xué)院,浙江 杭州 310018;2.復(fù)雜系統(tǒng)建模與仿真教育部重點實驗室,浙江 杭州 310018;3.浙江科技學(xué)院信息與電子工程學(xué)院,浙江 杭州 310023)
基于云端的視頻處理[1,2]降低了用戶的建設(shè)維護成本,同時集中式計算和存儲模式降低了視頻數(shù)據(jù)處理的難度。但是,由于爆炸式增長的邊緣視頻數(shù)據(jù)[3],基于云計算模型的視頻處理技術(shù)存在網(wǎng)絡(luò)帶寬需求高、實時性差和安全性差等問題。萬物互聯(lián)應(yīng)用需求的發(fā)展催生了邊緣式大數(shù)據(jù)處理模式,即邊緣計算模型[4 - 7]。邊緣視頻處理是將全部或者部分視頻處理工作放在邊緣節(jié)點端,邊緣節(jié)點包括智能手機、智能手表、智能攝像頭和邊緣服務(wù)器等。邊緣視頻處理具有顯著的優(yōu)點:數(shù)據(jù)傳輸?shù)拈_銷小、延遲小。這些優(yōu)點體現(xiàn)在生活的諸多應(yīng)用中,比如對于實時交通路況的監(jiān)控視頻,邊緣視頻分析可以避免在網(wǎng)絡(luò)資源緊張的情況下進行大量視頻數(shù)據(jù)傳輸;智能攝像頭捕獲的實時視頻數(shù)據(jù),可以在邊緣端進行適當處理再傳輸至云端,不僅可以減小視頻處理時延,還可以提高視頻數(shù)據(jù)的安全性。同時,針對不同的應(yīng)用[8],很多原始視頻流將由多個視頻分析系統(tǒng)進行分析。來自不同視頻源的視頻流也會被同一個系統(tǒng)處理,來自多個視頻源的視頻參數(shù)具有多樣性。不同視頻參數(shù)對視頻處理性能有不同影響,所以視頻參數(shù)的多樣性會加劇視頻處理的難度。比如,同一個人臉識別系統(tǒng)中,在系統(tǒng)性能滿足的前提下,很難保障所有分辨率和幀率的視頻都能在保持較高的幀接收率的同時具有較小的視頻處理時間。此外,視頻是一種復(fù)雜的數(shù)據(jù)類型,視頻傳輸消耗大量的網(wǎng)絡(luò)資源,視頻處理會消耗大量的系統(tǒng)資源。然而邊緣服務(wù)器的系統(tǒng)資源有限,給邊緣實時視頻處理帶來很大的困難。綜合這些因素,在邊緣實時處理視頻仍舊面臨很多挑戰(zhàn),邊緣服務(wù)器需要在滿足自身性能的前提下最大化視頻處理性能。
本文針對視頻處理的幀堆積問題提出了在幀接收和幀處理間加入緩沖區(qū)即幀緩沖隊列的方法,來并行處理緩沖幀,以解決幀接收時延問題,加速視頻處理。本文搭建以樹莓派作為邊緣節(jié)點,臺式機作為邊緣服務(wù)器的邊緣視頻處理平臺。邊緣服務(wù)器可以同時處理來自多個邊緣節(jié)點的視頻數(shù)據(jù),即視頻參數(shù)不是單一的,而是多樣化的。邊緣服務(wù)器的視頻處理程序是基于OpenCV[9,10]的人臉檢測。視頻傳輸是實時流式傳輸,包括采集、編碼、打包和網(wǎng)絡(luò)傳輸?shù)冗^程,邊緣服務(wù)器端的視頻處理也是實時流式處理,包括解碼和視頻處理。本文的工作目標是對于邊緣節(jié)點傳輸來的任何參數(shù)的視頻數(shù)據(jù),資源有限的邊緣服務(wù)器在滿足自身系統(tǒng)性能的前提下,盡可能提高視頻處理的性能指標。具體工作如下所示:
(1)首先,經(jīng)實驗發(fā)現(xiàn)高幀率和高分辨率的視頻數(shù)據(jù)容易導(dǎo)致系統(tǒng)丟幀,提出基于幀緩沖隊列的流視頻處理加速方法解決丟幀問題。在這部分,首先進行數(shù)據(jù)分析探究系統(tǒng)丟幀的原因,結(jié)果發(fā)現(xiàn)視頻數(shù)據(jù)量的增加導(dǎo)致視頻處理速度變慢,形成幀接收時延,造成幀堆積,從而導(dǎo)致解碼出錯和丟幀。隨后提出利用幀緩沖隊列解決丟幀問題,本文提出的解決方案是在幀接收和幀處理之間加上緩沖隊列,即幀緩沖隊列FBQ(Frame Buffer Queue)。幀緩沖隊列的作用有2點:一是解決幀接收速度和幀處理速度的不匹配問題,將暫時未及時處理的幀緩沖下來,避免幀堆積,從而避免丟幀;二是可以借助幀緩沖隊列的分流作用,充分利用系統(tǒng)的多核資源,將一路視頻流多路分流處理,從而提高視頻的處理速度,滿足視頻處理的實時性。本文將添加幀緩沖隊列的系統(tǒng)標記為“有FBQ系統(tǒng)”,否則為“無FBQ系統(tǒng)”。
(2)其次,分別在有FBQ系統(tǒng)和無FBQ系統(tǒng)中通過性能對比探究視頻參數(shù)(分辨率、幀率)對視頻處理性能和系統(tǒng)性能的影響。視頻處理性能指標包括幀接收率、人臉檢測率和視頻處理時長,系統(tǒng)性能指標包括邊緣服務(wù)器端系統(tǒng)內(nèi)存使用率和系統(tǒng)功耗。具體實驗發(fā)現(xiàn),人臉檢測率與分辨率的大小有關(guān),而與幀率無關(guān);同時,在無FBQ系統(tǒng)中,處理高分辨率視頻會加劇系統(tǒng)丟幀;分辨率高于720×405時,高幀率視頻數(shù)據(jù)的處理也會加劇丟幀;但分辨率低于720×405時,幀率對幀接收率沒有影響;隨著分辨率和幀率的增加,系統(tǒng)的功耗都呈上升趨勢;而分辨率和幀率對系統(tǒng)內(nèi)存使用率和視頻處理時間影響不大。另外,相較于無FBQ系統(tǒng),有FBQ系統(tǒng)不僅不存在丟幀,而且降低了系統(tǒng)功耗;僅有一個視頻處理線程時,由于需要處理緩沖幀,隨著分辨率和幀率的增加,視頻處理時間和內(nèi)存使用率均會呈現(xiàn)明顯的遞增趨勢。
本文的實驗結(jié)果表明,如果邊緣服務(wù)器的CPU資源與任務(wù)量匹配,有FBQ系統(tǒng)在保證視頻實時處理的前提下,降低了系統(tǒng)丟幀率和功耗。
為了提高邊緣節(jié)點實時處理視頻流的性能,學(xué)者們提出了不同的視頻分析方法,如通過使用邊緣節(jié)點之間的協(xié)作來實現(xiàn)實時視頻分析。Zhang等人[11]基于Firework[12]的擴展版本實現(xiàn)了AMBER(America’s Missing Broadcast Emergency Response)警報助手(A3)。A3可以通過實時高效地分析城市攝像機的數(shù)據(jù)來定位和跟蹤車輛。A3主要通過多個邊緣設(shè)備之間的協(xié)作來實現(xiàn)實時視頻分析,并且通過巧妙地選擇候選攝像機來有效地控制用于車輛跟蹤的搜索區(qū)域,提出了與位置方向有關(guān)的擴散策略。Long 等人[13]提出了一種邊緣計算框架,可以在資源豐富的移動設(shè)備上實現(xiàn)對延遲敏感的多媒體物聯(lián)網(wǎng)任務(wù)的協(xié)同處理。該框架的主要挑戰(zhàn)是將移動設(shè)備組成最佳的視頻處理組,并將視頻塊分配給適當?shù)慕M。Cao等人[14]給出了一種基于輕量級虛擬化技術(shù)的在邊緣計算平臺上實現(xiàn)協(xié)作視頻處理的方法。
有一些學(xué)者考慮了邊緣與云之間的協(xié)作工作。EVAPS(Edge Video Analysis for Public Satety)[15]以優(yōu)化的方式在邊緣節(jié)點和云之間分配計算工作負載,并消除了不必要的數(shù)據(jù)傳輸,從而為邊緣設(shè)備節(jié)省了能源。 為了解決將大量數(shù)據(jù)從物聯(lián)網(wǎng)設(shè)備傳輸?shù)绞褂脵C器學(xué)習(xí)模型進行處理的云中心時,連接數(shù)據(jù)源端和云平臺的網(wǎng)絡(luò)可能成為瓶頸,Ali等人[16]提出為數(shù)據(jù)處理分配跨越邊緣資源和云/霧資源的深度學(xué)習(xí)管道的方法,數(shù)據(jù)的基本處理階段和訓(xùn)練模型在網(wǎng)絡(luò)邊緣進行。此外,還有學(xué)者使用機器學(xué)習(xí)來加速視頻的實時處理。為了獲得更高的總體應(yīng)用質(zhì)量,Mainstream[8]可以自適應(yīng)地在共享邊緣設(shè)備上并發(fā)進行視頻處理的應(yīng)用之間協(xié)調(diào)DNN詞干共享。
一些學(xué)者為不同的應(yīng)用程序構(gòu)建了完整的實時視頻分析系統(tǒng)。Wang等人[17]引入了一種新型人臉識別系統(tǒng)OpenFace,該系統(tǒng)可以與幀間跟蹤相結(jié)合,生成用于實時隱私保護的RTFace,作者以城市交通監(jiān)控為例詳細介紹了該系統(tǒng)。Chen等人[18]提出了一種動態(tài)視頻流處理方案,以滿足實時信息處理和決策的要求。Dautov等人[19]將諸如物聯(lián)網(wǎng)、云計算、邊緣計算和大數(shù)據(jù)之類的各種方法和技術(shù)結(jié)合到一個通用框架中,能夠采用統(tǒng)一的方法在城市范圍內(nèi)實施智能監(jiān)控,從而為大都市智能監(jiān)控鋪平了道路。
Xu等人[20]引入的VideoChef是一種近似優(yōu)化視頻流水線的系統(tǒng),并且是首個使用Canary輸入[21]的復(fù)雜流應(yīng)用程序的系統(tǒng)。VideoChef根據(jù)Canary輸入的概念在系統(tǒng)運行時找到近似濾波器的最佳配置,該概念使用較小的輸入來調(diào)整計算的準確性并將近似配置傳輸?shù)剿休斎?。為了實現(xiàn)實時不間斷的移動人體跟蹤,Xu等人[22]提出了基于定向直方圖(HOG)和線性支持向量機(SVM)的移動人體檢測方法,并提出了一種有效的基于核相關(guān)濾波器的目標跟蹤算法。
為提高邊緣環(huán)境中的視頻處理性能,上述工作針對特殊的邊緣節(jié)點和應(yīng)用場景提出了相應(yīng)的優(yōu)化方案,而本文則是考慮同一個邊緣服務(wù)器會處理來自不同邊緣節(jié)點的視頻流,以邊緣節(jié)點視頻參數(shù)多樣性作為出發(fā)點,探究不同視頻參數(shù)的組合對視頻處理性能和系統(tǒng)性能的影響,從而提出性能優(yōu)化方案,提升視頻處理的綜合性能。
本節(jié)探究視頻參數(shù)的多樣性對視頻處理綜合性能的影響,涉及的視頻參數(shù)有分辨率和幀率。本文發(fā)現(xiàn)邊緣服務(wù)器端處理高分辨率和高幀率視頻數(shù)據(jù)時,會產(chǎn)生丟幀等性能問題;而且,對于系統(tǒng)丟幀的問題,經(jīng)分析發(fā)現(xiàn)幀的接收時延是導(dǎo)致丟幀的根本原因。隨后提出在邊緣服務(wù)器端通過添加幀緩沖隊列來解決丟幀問題。
幀接收率FRR(Frame Reception Rate)是實時視頻處理的重要性能指標,當系統(tǒng)處理不同分辨率和幀率的視頻數(shù)據(jù)時,系統(tǒng)的丟幀情況也不相同。首先,網(wǎng)絡(luò)環(huán)境對幀接收率影響很大,本文發(fā)現(xiàn)無線網(wǎng)絡(luò)環(huán)境會導(dǎo)致系統(tǒng)丟幀。此外,當系統(tǒng)處理高分辨率和高幀率的視頻時,系統(tǒng)也會丟幀。圖1表示在有線網(wǎng)和無線網(wǎng)環(huán)境中,幀率是25 fps時系統(tǒng)幀接收率隨著視頻分辨率增加的變化情況。
Figure 1 Frame reception rate under different resolution configurations (frame rate=25 fps)圖1 不同分辨率配置下的幀接收率(幀率為25 fps)
經(jīng)分析可知,2種網(wǎng)絡(luò)環(huán)境中,隨著視頻分辨率的增大,系統(tǒng)均出現(xiàn)丟幀,但是無線網(wǎng)環(huán)境中的幀接收率總體低于有線網(wǎng)環(huán)境中的幀接收率。此外,當視頻分辨率較低時,有線網(wǎng)絡(luò)環(huán)境系統(tǒng)不會丟幀,但是無線絡(luò)網(wǎng)環(huán)境卻會丟幀。由實驗結(jié)果可知,除了網(wǎng)絡(luò)環(huán)境因素,還有其它因素導(dǎo)致系統(tǒng)丟幀,因為在有線網(wǎng)絡(luò)環(huán)境中隨著視頻分辨率的增加,系統(tǒng)也出現(xiàn)了丟幀。
有線網(wǎng)絡(luò)和無線網(wǎng)絡(luò)的區(qū)別在于數(shù)據(jù)的傳輸方式,在沒有信號干擾的前提下,有線視頻傳輸和無線視頻傳輸并沒有實質(zhì)區(qū)別。在實際的應(yīng)用場景中,有線網(wǎng)絡(luò)抗干擾能力強,但是會受到器材限制,比如線路的長短,而無線網(wǎng)絡(luò)雖然方便快捷,但是抗干擾能力弱,導(dǎo)致傳輸速度慢。排除網(wǎng)絡(luò)環(huán)境,本文發(fā)現(xiàn)丟幀的直接原因是幀的解碼問題,幀堆積是造成解碼錯誤的主要原因。而視頻數(shù)據(jù)量的增加導(dǎo)致視頻處理速度跟不上視頻幀的傳輸速度,從而導(dǎo)致幀堆積。
本文進行了如下實驗和數(shù)據(jù)分析來探究丟幀原因。
視頻處理一般是計算密集型任務(wù),以包含人臉檢測任務(wù)的視頻處理過程為例,視頻處理過程可分為如下幾個具體階段[11]:
(1)視頻解碼:首先將視頻數(shù)據(jù)解碼成不同參數(shù)的幀,常見的幀參數(shù)包括分辨率和幀率,常見的視頻編碼格式有H.264、MPEG和H.265等。
(2)圖像預(yù)處理:為了提高圖像質(zhì)量,需要對解碼得到的圖像進行一系列的處理,包括圖像增強、降噪、改變尺寸和鏡頭校正等圖像編輯操作。
(3)圖像處理:常見的圖像處理操作是圖像分割,其結(jié)果是將圖像分割成多個部分,方便后續(xù)操作。
(4)目標檢測:將圖像中感興趣的部分檢測出來,劃分成固定類,常見的目標檢測對象包括人臉、汽車和建筑等。
(5)目標識別:將檢測到的對象進行語義分類,人臉識別將檢測到的人臉與某個具體人關(guān)聯(lián)起來。
(6)目標跟蹤:在視頻中定位一個或者多個對象的過程。
(7)數(shù)據(jù)融合:整合來自多個視頻的視頻處理結(jié)果。
在一次實時視頻傳輸?shù)倪^程中,本文根據(jù)視頻分析的一般過程將幀生命周期分為5個階段,如圖2所示。5個階段分配在邊緣節(jié)點、網(wǎng)絡(luò)和邊緣服務(wù)器3個物理空間。t1之前的階段在邊緣節(jié)點空間,網(wǎng)絡(luò)傳輸階段在網(wǎng)絡(luò)空間,t2之后的階段在邊緣服務(wù)器空間。在同一個時刻,每個空間的任務(wù)都獨立運行,并且操作的對象不同。然而,前后任務(wù)的執(zhí)行速度之間存在制約關(guān)系,如果執(zhí)行速度相差很大,會造成視頻處理性能問題。例如,等待解碼時間會隨著視頻處理時間的增加而增加。因為空間的獨立性,在邊緣服務(wù)器空間,雖然較長的視頻處理時間導(dǎo)致大量的幀處在等待解碼階段,但是網(wǎng)絡(luò)空間仍然會源源不斷地向邊緣服務(wù)器傳輸幀,導(dǎo)致更多幀處在等待解碼階段,后繼幀便會有更長的等待解碼時間。
Figure 2 Various stages in the frame life cycle圖2 幀生命周期中的各個階段
由圖3可知,幀的平均處理時間隨著分辨率的提高而增長。將VideoCapture類的read()函數(shù)(如果有幀傳入,read()對幀解碼然后返回,如果在其設(shè)置的超時節(jié)點前沒有幀傳入,就返回空)返回一幀的時間稱作幀接收時間。如果幀接收時間越長,幀的等待解碼時間越短,最短為0,如果幀接收時間越短,幀的等待解碼時間越長。
Figure 3 Average frame processing time under different resolution configurations (frame rate=25 fps)圖3 不同分辨率配置下的幀平均處理時間(幀率為25 fps)
圖4a和圖4b分別表示分辨率為320×180(未出現(xiàn)丟幀)和1024×576(未出現(xiàn)丟幀)時,一次實驗中幀接收時間的分布情況。經(jīng)分析可知,幀接收時間可以被分成2類,小于或等于20 ms的標記為小幀接收時間,大于20 ms的標記為大幀接收時間;就整體趨勢而言,1024×576的大幀接收時間小于320×180的大幀接收時間,而小幀接收時間大于320×180的小幀接收時間;數(shù)據(jù)顯示1024×576的小幀接收時間分布在2 ms和3 ms,320×180的小幀接收時間分布在0 ms和1 ms。本文又取連續(xù)100幀進行分析,圖5表示100幀的幀接收時間的折線圖。經(jīng)分析可知,2種分辨率都是連續(xù)出現(xiàn)一個小幀接收時間,再出現(xiàn)一個大幀接收時間,依次循環(huán)下去。
Figure 4 Distribution of frame reception time (instantaneous value) of all frames in an experiment圖4 一次實驗中所有幀的幀接收時間(瞬時值)分布情況
H.264協(xié)議定義了3種幀,完整編碼的幀為I幀,參考前面I幀編碼生成的只包含差異部分的幀叫P幀,還有一種參考前后幀編碼的幀叫B幀。H.264采用的核心算法是幀內(nèi)壓縮和幀間壓縮,幀內(nèi)壓縮是生成I幀的算法,幀間壓縮是生成B幀和P幀的算法。在H.264協(xié)議中,圖像以序列為單位進行組織,一個序列是一段圖像編碼后的數(shù)據(jù)流,以I幀開始,到下一個I幀結(jié)束,并且一個序列中的幀數(shù)不是固定的,且只有一個I幀。
結(jié)合H.264的編解碼原理,對圖4和圖5做出以下解釋。圖5中一個循環(huán)包含的幀是一個幀序列,大幀接收時間對應(yīng)的幀是I幀,小幀接收時間對應(yīng)的幀是B幀和P幀。所以,小幀接收時間僅僅包含解碼時間,而大幀接收時間則包含邊緣服務(wù)器等待幀到達的時間和幀的解碼時間,上述情況下,read()函數(shù)需要等待幀到達,說明幀到達后能夠立即被解碼,它的等待解碼時間幾乎為0,只有一個序列中的B幀和P幀有少許等待解碼時間,所以上述情況不存在丟幀。由于空間的獨立性,在同一時間段,3個空間的任務(wù)都在同時執(zhí)行,但是處理的對象不同。前面幀被處理的時間越長,覆蓋后繼幀在前面2個空間的時間也就越長,read()函數(shù)等待幀到達的時間也就越短,即隨著分辨率的提高,大幀接收時間在縮短。圖6表示分辨率為1280×720(出現(xiàn)丟幀)和1920×1080(出現(xiàn)丟幀)時,一次實驗中幀接收時間的分布情況(因為存在丟幀,所以幀數(shù)小于500)。
Figure 5 Distribution of frame reception time (instantaneous value) for 100 consecutive frames圖5 連續(xù)100幀的幀接收時間(瞬時值)的分布情況
Figure 6 Distribution of frame reception time (instantaneous value) of all frames in one experiment圖6 所有幀的幀接收時間(瞬時值)分布情況
經(jīng)分析可知,存在丟幀時,幾乎沒有大幀接收時間,小幀接收時間比320×180和1024×576的小幀接收時間長。即如果幀的處理時間足夠長,read()函數(shù)不需要等待幀到達,即使到達的幀也不能被實時處理。到達的幀長時間等待解碼導(dǎo)致大量幀堆積在邊緣服務(wù)器端,所以會出現(xiàn)解碼錯誤和丟幀。
經(jīng)上述分析可知,幀的解碼時間隨著分辨率的提高而增長,幀的等待處理時間也隨著分辨率的提高而增長,較長的等待解碼時間會導(dǎo)致系統(tǒng)丟幀。
由3.1節(jié)分析可知,系統(tǒng)出現(xiàn)丟幀的原因如圖7所示,即邊緣服務(wù)器端處理器性能不足和視頻數(shù)據(jù)量大導(dǎo)致當前幀(圖像)處理時間較長,從而導(dǎo)致下一幀的接收時間短(意味著幀的等待解碼時間長),造成幀堆積,因此解碼出錯、丟幀。下文是本文為解決丟幀提出的方案。
Figure 7 Reasons for frame loss in the system圖7 系統(tǒng)出現(xiàn)丟幀的原因
處理器的性能不是本文優(yōu)化的重點。此外,由于視頻參數(shù)存在多樣性,在邊緣實時視頻處理系統(tǒng)中,視頻數(shù)據(jù)量大也是難以避免的。因此,解決丟幀的核心問題是縮短幀的等待解碼時間??紤]到計算機系統(tǒng)軟件結(jié)構(gòu)采用的是一種層的結(jié)構(gòu),計算機科學(xué)領(lǐng)域的任何問題都可以通過增加一個間接的中間層來解決。為了解決幀的等待解碼時間過長問題,本文在幀接收和幀處理之間加上緩沖,即將未及時處理的幀緩沖下來,避免幀堆積。緩沖的介質(zhì)是內(nèi)存,代碼層面的實現(xiàn)是隊列,記作“幀緩沖隊列”??紤]到多線程訪問問題,本文系統(tǒng)中的隊列是C++語言封裝的線程安全隊列。
由計算機體系結(jié)構(gòu)基礎(chǔ)知識可知,因為CPU頻率發(fā)展受阻,SMP和多核的時代到來了。單個CPU頻率有限,因此應(yīng)用程序的設(shè)計應(yīng)該充分挖掘計算機硬件能力,提高計算機執(zhí)行效率。特別是對于實時視頻處理這樣對系統(tǒng)性能要求極高的應(yīng)用程序,需要充分挖掘計算機系統(tǒng)資源,從而最優(yōu)化視頻處理性能。由上述得到啟發(fā),可以通過多核處理由一個邊緣節(jié)點傳入的視頻數(shù)據(jù),從而縮短視頻處理時間。需要解決的是一個一對多的問題,即一路視頻流多路處理。直接在邊緣服務(wù)器端的幀接收處進行視頻分流達到多路處理的目的是可行的,但是考慮到多路處理也會存在CPU成為性能瓶頸的問題,本文利用FBQ進行分流。FBQ從2個層面解決丟幀問題,如圖8所示。一方面緩沖幀,縮短幀的等待解碼時間,從而減少幀堆積;另一方面充分利用多核資源,實現(xiàn)一路視頻流多路處理,從而加快視頻處理速度。實驗結(jié)果表明,F(xiàn)BQ不僅可以解決系統(tǒng)丟幀問題,還可以降低其它系統(tǒng)資源的消耗,比如電能。
Figure 8 FBQ solves the problem of frame loss圖8 FBQ解決丟幀問題
算法1表示FBQ分流后的視頻處理流程,主要包含2個函數(shù)。函數(shù)pushFrame被生產(chǎn)者線程執(zhí)行(只有一個生產(chǎn)者線程),執(zhí)行的任務(wù)是打開視頻流地址,解碼獲取視頻幀,進行圖像預(yù)處理,將處理后的幀放入幀緩沖隊列。本文中的圖像預(yù)處理(圖像縮放),將縮小后的幀放入幀緩沖隊列,可以降低系統(tǒng)內(nèi)存消耗。函數(shù)popFrame被消費者線程執(zhí)行(有多個消費者線程),執(zhí)行的任務(wù)是從幀緩沖隊列中取出幀,進行后續(xù)圖像處理(本文是人臉檢測)。
算法1FBQ分流后的視頻處理算法
Input:videoAddress,queue。/*視頻流地址,幀緩沖隊列*/
Output:NULL。
1:FunctionpushFrame(videoAddress,queue)
2:capture←VideoCapture(videoAddress) /*打開視頻流地址*/
3:while(capture>>imagOriginal&& !queue.full())do
4:imag←imgPreprocessing(imagOriginal) /*包括圖像縮放*/
5:queue.push(imag);/*預(yù)處理后的幀放入幀緩沖隊列,降低內(nèi)存消耗*/
6:endwhile
7:endFunction
8:FunctionpopFrame(queue)
9:while(!queue.empty())do
10:imag←queue.top();
11:queue.pop();
12:imageProcessing(imag);/*圖像處理*/
13:endwhile
14:endFunction
圖9是有FBQ系統(tǒng)的一路視頻流多路處理的模型圖,F(xiàn)BQ起到緩沖和分流的作用。緩沖解決幀的接收時延問題,避免幀堆積;分流可以使一路視頻多路處理,加速視頻處理速度。整個程序模型是經(jīng)典的生產(chǎn)者消費者模型,生產(chǎn)者線程的任務(wù)是將收到的幀解碼存入FBQ,消費者線程的任務(wù)是從FBQ中取出幀,然后進行處理。實驗結(jié)果表明,僅需要一個生產(chǎn)者線程就可以解決幀的實時接收問題,為了解決幀的實時處理問題,消費者線程數(shù)需要根據(jù)視頻流參數(shù)而定。
Figure 9 Program running model diagram with FBQ system圖9 有FBQ系統(tǒng)的程序運行模型圖
該組實驗是為了探究視頻分辨率和幀率對視頻處理性能和邊緣服務(wù)器性能的影響,在有FBQ系統(tǒng)(With FBQ)和無FBQ系統(tǒng)(No FBQ)中探究不同參數(shù)的視頻數(shù)據(jù)對視頻處理的性能影響。視頻處理性能指標有幀接收率FRR、人臉檢測率FDR(Face Detection Rate)和總視頻處理時間TPT(Total Processing Time)。幀接收率和人臉檢測率的計算方式分別如式(1)和式(2)所示:
FRR=邊緣節(jié)點發(fā)送的視頻幀數(shù)/
邊緣服務(wù)器接收的視頻幀數(shù)
(1)
FDR=檢測出人臉的視頻幀數(shù)/
邊緣服務(wù)器接收的視頻幀數(shù)
(2)
總視頻處理時間指邊緣節(jié)點與邊緣服務(wù)器建立連接到邊緣服務(wù)器處理完最后一幀之間的時間。服務(wù)器性能指標有內(nèi)存使用率(Memused)和系統(tǒng)功耗(Power)。
本文搭建實時視頻處理的邊緣計算平臺,平臺包括邊緣節(jié)點(樹莓派)和邊緣服務(wù)器(臺式機),邊緣服務(wù)器的應(yīng)用程序是基于OpenCV的人臉檢測。實時視頻流的傳輸機制為:Raspivid視頻捕獲工具把從攝像機傳出的視頻流傳輸?shù)絍LC(Video LAN Client)轉(zhuǎn)碼成H.264網(wǎng)絡(luò)視頻流;再以TS(Transport Stream,一種碼流格式)的形式把幀封裝后輸出到指定端口;臺式機通過訪問視頻地址接收實時視頻流。
視頻流傳輸示意圖如圖10所示,整個過程包括邊緣節(jié)點端的視頻流編碼、網(wǎng)絡(luò)傳輸和邊緣服務(wù)器端的解碼和處理。
Figure 10 Schematic diagram of video stream transmission圖10 視頻流傳輸示意圖
各個節(jié)點之間的實物連接圖如圖11所示。邊緣服務(wù)器可以同時為多路邊緣節(jié)點服務(wù),邊緣服務(wù)器架構(gòu)是基于Linux環(huán)境的高并發(fā)服務(wù)器模型,應(yīng)用程序是基于OpenCV的人臉檢測。邊緣節(jié)點主動與邊緣服務(wù)器建立連接,連接成功后,邊緣節(jié)點向邊緣服務(wù)器發(fā)送視頻流地址;邊緣服務(wù)器通過流媒體地址接收視頻數(shù)據(jù),并進行實時處理,直到邊緣節(jié)點終止發(fā)送。
Figure 11 Connection topology diagram between nodes圖11 節(jié)點之間的連接拓撲圖
實驗硬件配置如表1所示。軟件配置如下:OpenCV的版本是3.1.0;圖像預(yù)處理階段將所有的幀縮小為原來的1/2;目標區(qū)域像素值的下限為30×30,沒有設(shè)置上限;人臉檢測模型是haarcascade_frontalface_default.xml。實驗環(huán)境:僅考慮一個邊緣節(jié)點與邊緣服務(wù)器相連;網(wǎng)絡(luò)環(huán)境采用有線網(wǎng)絡(luò);目標物距離攝像頭正前方1 m;實驗室光線不變。
該組實驗以分辨率作為實驗變量,探究視頻分辨率對邊緣實時視頻處理的影響。視頻時長設(shè)置為20 s,幀率為25 fps(即一次實驗傳輸?shù)膸瑪?shù)是500)。本文使用11種分辨率(1920×1080,1600×900,1366×768,1280×720,1024×576,960×540,854×480,720×405,640×360,480×270,320×180)進行實驗,探究5個性能指標隨著分辨率提高的變化情況。為了對比性能,功耗實驗系統(tǒng)使用多個消費者線程,其它性能指標系統(tǒng)使用單個消費者線程。圖12
表示不同分辨率配置下,幀接收率、視頻處理時間、邊緣服務(wù)器的內(nèi)存使用率和功耗的分布情況。
Table 1 Hardware configuration
由實驗結(jié)果可知,低分辨率會導(dǎo)致人臉識別率降低,其原因是低分辨率圖像中出現(xiàn)的人臉像素點數(shù)不在實驗設(shè)置的目標檢測區(qū)域像素大小范圍內(nèi)。對于其它量變比較明顯的性能指標,后文將使用可視化圖形表示,并進行性能分析。
由圖12a可知,隨著分辨率的提高,無FBQ系統(tǒng)的幀接收率呈現(xiàn)明顯遞減趨勢,而有FBQ系統(tǒng)的幀接收率則保持不變,即不存在丟幀。由圖12b可知,隨著分辨率的提高,無FBQ系統(tǒng)的總視頻處理時間呈現(xiàn)緩慢遞增趨勢,最大值相較于最小值僅增加了8.73%;而有FBQ系統(tǒng)的總視頻處理時間呈現(xiàn)迅速遞增趨勢,最大值相較于最小值增加了96.91%。
由圖12c可知,隨著分辨率的提高,無FBQ系統(tǒng)的內(nèi)存使用率呈現(xiàn)緩慢遞增趨勢,最大值相較于最小值僅增加了6.5%;而有FBQ系統(tǒng)的內(nèi)存使用率呈現(xiàn)迅速遞增趨勢,最大值相較于最小值增加了130.68%。由圖12d可知,隨著分辨率的提高,2種系統(tǒng)的邊緣服務(wù)器端功耗都是呈遞增趨勢,但是對于每一種分辨率的視頻,有FBQ系統(tǒng)的邊緣服務(wù)器端功耗都要低于無FBQ系統(tǒng)的。
Figure 12 Performance indicators under different resolution configurations圖12 不同分辨率配置下的性能指標
圖13表示了對于有FBQ系統(tǒng),當使用不同的線程進行視頻處理時,邊緣服務(wù)器端系統(tǒng)內(nèi)存使用率的變化趨勢。分析可知,多線程可以縮短視頻的處理時間,并且降低了系統(tǒng)的最大內(nèi)存使用率。
Figure 13 Memory usage under different thread count configurations圖13 不同線程數(shù)分配下的內(nèi)存使用率
無FBQ系統(tǒng)由于處理器處理能力弱導(dǎo)致幀堆積,從而導(dǎo)致解碼出錯丟幀。幀緩沖隊列的加入不僅可以緩沖未及時處理的幀,還可以利用多核處理器并行處理緩沖幀,從而加速視頻處理。由上述實驗結(jié)果可知,幀緩沖隊列并沒有從本質(zhì)解決系統(tǒng)丟幀(處理器性能不足導(dǎo)致丟幀)。在有FBQ系統(tǒng)中,如果處理器能力不夠,由于大量緩沖幀,系統(tǒng)會因為內(nèi)存成為瓶頸導(dǎo)致丟幀,并且由于處理緩沖幀,也很難保證視頻處理的實時性。但是,如果系統(tǒng)的CPU資源與處理任務(wù)量匹配,當幀率是25 fps時,隨著分辨率的增加,有FBQ系統(tǒng)在保障最佳的幀接收率和低功耗的同時,還可以保障視頻的實時處理。
該部分實驗以幀率作為實驗變量,探究視頻幀率對邊緣實時視頻處理性能的影響。一共包含2組實驗,一組將分辨率設(shè)置為640×360(低分辨率代表),另一組將分辨率設(shè)置為1280×720(高分辨率代表)。本文使用12種幀率(10 fps,15 fps,20 fps,25 fps,30 fps,35 fps,40 fps,45 fps,50 fps,55 fps,60 fps,65 fps)進行實驗,探究5個性能指標隨著幀率提高的變化情況。視頻時長設(shè)置為20 s,為了進行對比,對于功耗指標,實驗中視頻處理的方式采用多個消費者線程,而其它的性能指標則采用單個消費者線程。分辨率設(shè)置為640×360時,有FBQ系統(tǒng)和無FBQ系統(tǒng)中,人臉檢測率不受幀率的影響。
由圖14可知,2種系統(tǒng)的幀接收率的變化趨勢一致,均是當幀率低于25 fps和高于55 fps時出現(xiàn)丟幀。這種丟幀是由于邊緣節(jié)點的編碼出錯而導(dǎo)致的,與邊緣服務(wù)器的性能無關(guān)。為了進一步探索丟幀原因,統(tǒng)計了幀率是65 fps時一次實驗中幀接收時間的分布情況,如圖15所示。經(jīng)分析可知,當分辨率是640×360,幀率是65 fps時,一次實驗中所有幀的幀接收時間包含小幀接收時間,也包含大幀接收時間,所以不存在由于幀的接收時延而導(dǎo)致丟幀的情況。
Figure 14 Frame reception rate under different frame rate configurations (resolution=640 × 360)圖14 不同幀率配置下的幀接收率(分辨率為640×360)
Figure 15 Distribution of the frame reception time (instantaneous value) of all frames in one experiment (resolution=640 × 360,frame rate=65 fps)圖15 一次實驗中所有幀的幀接收時間(瞬時值)分布情況(分辨率為640×360,幀率為65 fps)
圖16中的圖16a~圖16c分別表示分辨率是640×360時,視頻處理時間和邊緣服務(wù)器端內(nèi)存使用率和功耗3個性能指標隨著幀率提高的變化情況。
Figure 16 Performance indicators under different frame rate configurations (resolution=640 × 360)圖16 不同幀率配置下的性能指標(分辨率為640×360)
由圖16可知,2種系統(tǒng)中視頻處理時間和內(nèi)存使用率變化趨勢基本一致,均不受幀率影響;邊緣服務(wù)器端功耗均隨著幀率的提高而增加,但是對于所有幀率而言,有FBQ系統(tǒng)的邊緣服務(wù)器端功耗都要低于無FBQ系統(tǒng)的。由上一組實驗得知,小于25 fps和大于55 fps的幀率會導(dǎo)致邊緣節(jié)點丟幀,所以分辨率是1280×720時,本組實驗只取中間7種幀率。同樣,分辨率是1280×720時,隨著幀率的提高,人臉檢測率沒有變化,保持較好的狀態(tài)。圖17表示分辨率為1280×720時,幀接收率、視頻處理時間、內(nèi)存使用率和邊緣服務(wù)器端系統(tǒng)功耗4個性能指標隨著幀率提高的變化情況。
Figure 17 Performance indicators under different frame rate configurations (resolution=1280 × 720)圖17 不同幀率配置下的性能指標(分辨率為1280×720)
由圖17a可知,無FBQ系統(tǒng)的幀接收率呈下降趨勢,而有FBQ系統(tǒng)的幀接收率一直是100%。由圖17b可知,無FBQ系統(tǒng)的視頻處理時間隨分辨率的提高呈小范圍的波動,而有FBQ系統(tǒng)的視頻處理時間呈明顯遞增趨勢。由圖17c可知,無FBQ系統(tǒng)的內(nèi)存使用率也隨著分辨率的提高呈小范圍波動,而有FBQ系統(tǒng)的內(nèi)存使用率呈明顯遞增趨勢。由圖17d可知,無FBQ系統(tǒng)的邊緣服務(wù)器端系統(tǒng)功耗呈先上升后下降的趨勢,這種趨勢是因為隨著幀率的提高系統(tǒng)出現(xiàn)丟幀,導(dǎo)致數(shù)據(jù)量減?。欢蠪BQ系統(tǒng)的邊緣服務(wù)器端系統(tǒng)功耗一直呈上升趨勢;從低幀率部分的圖像趨勢可知,有FBQ系統(tǒng)的邊緣服務(wù)器端系統(tǒng)功耗依舊低于無FBQ系統(tǒng)的。
綜合本節(jié)上述分析可知,幀率對人臉檢測率沒有影響;如果分辨率較低,幀率對系統(tǒng)性能和視頻處理性能幾乎沒有影響,如果分辨率較高,高幀率會加劇系統(tǒng)負擔,無FBQ系統(tǒng)會出現(xiàn)丟幀,而有FBQ系統(tǒng)也需要消耗更多的系統(tǒng)資源來保證幀接收率和視頻的實時處理。
從實驗結(jié)果可以得出以下結(jié)論:視頻參數(shù)的多樣性給邊緣視頻處理帶來了很多難題,本文實驗中不同視頻分辨率和幀率的視頻處理效果并不相同。本文發(fā)現(xiàn),由于邊緣節(jié)點處理能力較弱,高分辨率和高幀率的視頻數(shù)據(jù)容易增加系統(tǒng)負擔,將導(dǎo)致視頻處理性能較差??梢詮囊韵路矫鎳L試解決該問題:如果實時視頻監(jiān)控場景需要高分辨率,邊緣節(jié)點端可以在保證監(jiān)控信息不丟失的前提下,盡可能地降低視頻幀率,這樣不僅可以節(jié)約網(wǎng)絡(luò)帶寬,還可以減少邊緣服務(wù)器的負擔,提高視頻處理的性能;對于低分辨率就能滿足的監(jiān)控場景,可以提高視頻幀率來提高監(jiān)控質(zhì)量,避免信息遺漏,以捕獲到更多實時信息,這樣既不會給邊緣服務(wù)器帶來太大的系統(tǒng)性能損失,也不會降低視頻處理性能。
本文通過實驗發(fā)現(xiàn)高分辨率和高幀率視頻會導(dǎo)致系統(tǒng)丟幀,其原因是數(shù)據(jù)量的增加加劇了系統(tǒng)處理器負擔,導(dǎo)致幀的接收時延增加,從而產(chǎn)生丟幀。因此,本文提出利用幀緩沖隊列(FBQ)來解決上述丟幀問題,并以分辨率和幀率為實驗變量,分析有FBQ系統(tǒng)和無FBQ系統(tǒng)的5個性能指標的差異。通過實驗發(fā)現(xiàn),人臉檢測率與分辨率的大小有關(guān),而與幀率無關(guān)。無FBQ系統(tǒng)中,高分辨率加劇系統(tǒng)丟幀;分辨率大于720×405時,高幀率也會加劇丟幀,但分辨率小于720×405時,幀率對幀接收率沒有影響;隨著分辨率和幀率的提高,系統(tǒng)的功耗都呈上升趨勢;而分辨率和幀率對系統(tǒng)內(nèi)存使用率和視頻處理時間影響不大。相較于無FBQ系統(tǒng),有FBQ系統(tǒng)中,不僅不存在丟幀,而且還減少了系統(tǒng)功耗;僅有一個視頻處理線程時,由于需要處理FBQ中的緩沖幀,隨著分辨率和幀率的提高,視頻處理時間和內(nèi)存使用率都會呈現(xiàn)明顯遞增趨勢。