本發(fā)明屬于多媒體編碼領域,具體涉及一種基于編碼時間預測模型的負載均衡方法。
背景技術:
隨著新一代視頻編碼標準hevc(highefficiencyvideocoding)的發(fā)布,視頻的編碼效率進一步提升。相比于以前的視頻編碼標準h.264/avc,在相同編碼質量的情況下,hevc可以節(jié)省近一半的碼率,然而這是以犧牲編碼復雜度為代價的。如何在不改變碼流結構和保持原有碼率的前提下,最大程度的降低算法復雜度,顯著提高編碼速度,是hevc大規(guī)模推廣與應用的關鍵所在。
為了降低hevc的計算復雜度,并將其應用于實時應用,很多學者都致力于這個方向。降低計算復雜度的優(yōu)化方法主要分為兩種:串行優(yōu)化和并行優(yōu)化。
串行優(yōu)化主要是針對于編碼流程的優(yōu)化,主要分為兩類,一類是通過編碼單元的快速劃分和編碼模式的快速選擇來降低計算復雜度,一類是通過減少運動估計的時間來降低計算復雜度。這兩類優(yōu)化的效果是明顯的,通過這些編碼流程的優(yōu)化,大約可以降低hevc接近一半的計算復雜度。但是,隨著社會的進步,人們對于視頻的清晰度有了更高的要求。僅僅降低一半的計算復雜度依然滿足不了人們對于超高清視頻的需求。于是就出現(xiàn)了關于并行優(yōu)化的研究。
并行優(yōu)化也分為很多類,從小到大主要包括圖像組級的并行、幀級的并行、條帶或tile級的并行,以及編碼樹單元級的并行。圖像組級和幀級的并行由于需要緩存大量的視頻數(shù)據(jù),時延大,不適應于實時應用;編碼樹單元級的并行由于相鄰編碼樹單元間的相關性較強,并行編碼存在很大的限制,并行效率不高。條帶和tile都是一幀中的編碼樹單元的集合,沒有時延和制約,且相關性限制不大。但是條帶的劃分較tile更加的靈活,且具有更好的并行性能。因此,本專利主要是針對條帶級別的并行。
目前有關條帶并行優(yōu)化的方法主要有兩種,一種是根據(jù)相鄰已編碼幀的編碼時間來預測當前幀的編碼時間,一種是建立一種歸一化的計算復雜度來確定當前幀的編碼復雜度。第一種方案僅僅使用了相鄰已編碼幀的信息,而忽略了分層時間編碼結構,第二種方案建立的歸一化的計算復雜度則由于圖像的紋理特性和運動特性不相似而預測精度較差,不能適應于所有的視頻序列。因此我們亟需找到一種能夠同時使用分層時間編碼結構和相鄰已編碼幀的方法,來更好的預測當前幀中每一個編碼樹單元的計算復雜度。
技術實現(xiàn)要素:
為了找到一種更加有效的條帶級并行的負載均衡方法,本發(fā)明提出了一種基于編碼時間預測模型的負載均衡方法,設計合理,克服了現(xiàn)有技術的不足,具有良好的效果。
為了實現(xiàn)上述目的,本發(fā)明采用如下技術方案:
一種基于編碼時間預測模型的負載均衡方法,包括如下步驟:
步驟1:進入一幀視頻流;
步驟2:平均劃分當前幀中每一個條帶所具有的的編碼樹單元數(shù)目;
步驟3:判斷當前幀是否是幀內編碼幀;
若:判斷結果是當前幀是幀內編碼幀,則執(zhí)行步驟10;
或判斷結果是當前幀不是幀內編碼幀,則執(zhí)行步驟4;
步驟4:判斷當前幀是否有同一時間層的已編碼非幀內編碼幀;
若:判斷結果是當前幀有同一時間層的已編碼非幀內編碼幀,則執(zhí)行步驟5;
或判斷結果是當前幀沒有同一時間層的已編碼非幀內編碼幀,則執(zhí)行步驟7;
步驟5:通過編碼時間預測模型將位置相鄰已編碼幀的編碼時間同步到與同一時間層的相鄰已編碼幀相同的水平上;
步驟6:通過同步后的兩個幀的編碼時間共同預測當前幀的編碼時間,然后執(zhí)行步驟8;
步驟7:根據(jù)位置相鄰已編碼幀的編碼時間來預測當前幀的編碼時間;
步驟8:以當前幀的預測編碼時間為基準來分配每一個條帶所擁有的編碼樹單元數(shù)目;
步驟9:根據(jù)條帶的分配結果進行微調,使每一個條帶獲得相同的計算負載;
步驟10:并行編碼當前幀的每一個條帶,結束一幀。
優(yōu)選地,在步驟5中,具體包括如下步驟:
步驟5.1:將位置上的相鄰已編碼幀做基于其在圖像組中位置的調整,使其同步到與同一時間層的相鄰已編碼幀相同的圖像組位置水平上;
步驟5.2:將位置上的相鄰已編碼幀的編碼時間做基于量化參數(shù)大小的調整,使其同步到與同一時間層的相鄰已編碼幀相同的量化參數(shù)水平上;
步驟5.3:將位置上的相鄰已編碼幀的編碼時間做基于參考幀數(shù)目的調整,使其同步到與同一時間層的相鄰已編碼幀相同的參考幀水平上。
優(yōu)選地,在步驟8中,具體包括如下步驟:
步驟8.1:計算當前幀的總預測編碼時間;
步驟8.2:根據(jù)每一個設備的cpu核心數(shù)分配條帶的數(shù)目;
步驟8.3:通過步驟8.1和步驟8.2的結果確定每一個條帶的平均負載;
步驟8.4:根據(jù)步驟8.3中的平均負載為每一個條帶分配一定數(shù)目的編碼樹單元。
優(yōu)選地,在步驟9中,具體包括如下步驟:步驟9.1:進入一幀視頻流;
步驟9.2:預測當前幀的總編碼時間和各個編碼樹單元的編碼時間;
步驟9.3:計算每一個條帶的平均負載并劃分每一個條帶的編碼樹單元數(shù)目;
步驟9.4:計算劃分后的各個條帶的負載并排序,
步驟9.5:記錄最大計算負載,并將其賦值給一個變量a;
步驟9.6:判斷a的負載值是否大于其前或后的計算負載;
若:判斷結果是a的負載值大于其前或后的計算負載,則執(zhí)行步驟9.7;
或判斷結果是a的負載值小于其前或后的計算負載,則執(zhí)行步驟9.11;
步驟9.7:將a的編碼樹單元數(shù)目減一,比其小的條帶的編碼樹單元數(shù)目加一;
步驟9.8:計算變化后的最大負載;
步驟9.9:判斷變化后的最大計算負載是否小于之前的最大負載;
若:判斷結果為變化后的最大計算負載小于之前的最大負載,則執(zhí)行步驟9.10;
或判斷結果為變化后的最大計算負載大于之前的最大負載,則執(zhí)行步驟9.11;
步驟9.10:重新排序各條帶的計算負載,然后執(zhí)行步驟9.5;
步驟9.11:判斷a是否是最小負載;
若:判斷結果是a是最小負載,則結束;
或判斷結果是a不是最小負載,則執(zhí)行步驟9.12;
步驟9.12:將a賦值為次小的計算負載,然后執(zhí)行步驟9.6;
優(yōu)選地,步驟5中編碼時間預測模型為:
tpred=a*ttemp+b*β*tpos*
式中,tpred是最終的預測時間,tpos是位置相鄰幀的編碼時間,qppos是位置相鄰幀的量化參數(shù),refpos是位置相鄰幀的參考幀數(shù)目,a是位置相鄰幀的權重;ttemp是時間層相鄰幀的編碼時間,qptemp是時間層相鄰幀的量化參數(shù),reftemp是時間層相鄰幀的參考幀數(shù)目,b是時間層相鄰幀的權重;α是我們從統(tǒng)計數(shù)據(jù)計算得到的變化因子,β是基于圖像組之中編碼幀的位置計算得到的比率。
本發(fā)明所帶來的有益技術效果:本發(fā)明從編碼配置出發(fā),通過研究三種編碼配置參數(shù)對于編碼時間的影響程度,提出了三種基于編碼參數(shù)的調整方案,并將其綜合成為一種編碼時間預測模型。
本發(fā)明根據(jù)上述編碼時間預測模型,將位置上的相鄰已編碼幀與同一時間層上的相鄰已編碼幀結合起來考慮,利用這兩種已編碼幀共同預測當前幀的編碼時間,建立了一種基于編碼時間預測模型的負載均衡方法,本方法能夠在保證編碼質量的前提下,很好的適應高清、超高清視頻的實時壓縮應用,大大提高了編碼速度。
附圖說明
圖1為基于編碼時間預測模型的條帶并行hevc編碼器的負載均衡方法的流程圖。
圖2為基于編碼參數(shù)的編碼時間預測方法的流程圖。
圖3為負載均衡方法的具體流程圖。
具體實施方式
下面結合附圖和具體實施方式對本發(fā)明作進一步的說明。
為了滿足高清、超高清視頻圖像的實時壓縮應用需求,提高hevc視頻編碼器的編碼速度,本發(fā)明提出了一種基于編碼預測模型的條帶并行hevc編碼器的負載均衡方法。該方法主要包括兩部分:基于編碼參數(shù)的編碼時間調整方法和基于編碼時間預測模型的負載均衡方法,基于編碼參數(shù)的編碼時間調整方法涉及發(fā)明內容中的步驟(5)和步驟(6),基于編碼時間預測模型的負載均衡方法涉及發(fā)明內容中的步驟(8)和步驟(9)。
該發(fā)明的主要流程如圖1所示,首先判斷當前視頻流是不是幀內編碼幀,是否具有同一時間層的相鄰已編碼幀,當滿足不是幀內編碼幀,且具有同一時間層的相鄰已編碼幀的時候,根據(jù)同一時間層的相鄰已編碼幀(簡稱為時間層相鄰幀)的配置參數(shù),將位置上的相鄰已編碼幀(簡稱為位置相鄰幀)分別做基于其在圖像組位置、量化參數(shù)大小和參考幀數(shù)目的調整;然后根據(jù)編碼時間預測模型,用時間層相鄰幀和經過調整后的位置相鄰幀共同預測當前幀每一個編碼樹單元的編碼時間和總編碼時間;再根據(jù)電腦配置確定條帶的個數(shù),并據(jù)此確定每一個條帶的平均負載;最后根據(jù)編碼樹單元的預測時間和每一個條帶的平均負載來確定每一個條帶的編碼樹單元數(shù)目,并在此基礎上進行微調,從而使得每一個條帶獲得相同的計算負載,以達到條帶并行的負載均衡。
下面展開具體說明:
1、基于編碼參數(shù)的編碼時間調整方法
新一代視頻編碼標準hevc中出現(xiàn)了固定的編碼配置模板,主要包括三種:全幀內編碼幀配置(ai)、低時延配置(lp)和隨機存取配置(ra)。每一種配置文件下都有相似的編碼配置,但是編碼配置中有很多值是可以改變的,這些變化的配置參數(shù)往往會對編碼的時間和編碼的效率產生影響。同時這些不同的配置參數(shù)也嚴重影響了將兩種不同類型的幀聯(lián)合起來用于實際預測的準確度。因此,為了同時使用兩種不同的已編碼幀,我們需要研究這些編碼參數(shù)對于編碼時間的影響。
1)圖像組中的位置
通過實驗統(tǒng)計發(fā)現(xiàn),在每一個圖像組中都會存在一個編碼時間明顯大于其余幀的幀,在改變了圖像組的大小之后,結果依然是這樣,這個幀就是每一個圖像組中的最后一幀。通過研究發(fā)現(xiàn),這一幀的編碼時間嚴重大于此圖像組中其余幀的編碼時間的原因是,這一幀的時間層id為0,λ較小。此外,研究表明在同一個視頻序列中,圖像組中的最后一幀的編碼時間與其余幀的編碼時間的比率在每一個圖像組中都是相似的。為此,我們定義了一個比率β,計算公式如下式(1)所示。
β=tother÷tgopsize(1)
式中,tgopsize是圖像組中最后一幀的編碼時間,tother是圖像組中其他幀的編碼時間。通過使用這個比率,可以將圖像組中不同位置水平的編碼幀同步到一個位置水平上。
2)量化參數(shù)大小
為了研究量化參數(shù)大小對于編碼時間的影響水平,在hevc的測試序列中選擇了六個測試序列作為訓練集,分別是b類測試序列中的parkscene和cactus、c類測試序列中的bqmall和partyscene以及d類測試序列中的basketballpass和racehorses。在參考幀數(shù)目為1,圖像組大小為4,其余配置參數(shù)為默認配置的條件下,通過改變量化參數(shù)(范圍為20-48,也就是視頻編碼中常用的量化參數(shù)范圍)的大小來記錄上述六個測試序列的編碼時間。每一種情況都測試了3次,最后通過取平均值來作為每一幀的編碼時間。
實驗數(shù)據(jù)表明:編碼時間與量化參數(shù)大小之間存在如下式(2)所示的規(guī)律。
式中,
3)參考幀數(shù)目
運動估計是hevc幀間預測中最耗時的操作,當增加一個參考幀的時候,相應的也就要多做一個幀的運動估計。為了研究參考幀數(shù)目對編碼時間的影響,我們依然選擇2)中所用到的6個測試序列作為訓練集,在保持所有配置參數(shù)都不改變的條件下,通過只改變每一幀的參考幀的數(shù)目來測試上述每一個測試序列,并記錄每一幀的編碼時間,其中,參考幀的數(shù)目分別被設定為1、2、3和4。在測試4次之后,取平均值作為最后的測試結果。
統(tǒng)計數(shù)據(jù)表明編碼時間與參考幀數(shù)目之間的關系可以用下式(3)來描述。
式中,i,j是參考幀的數(shù)目,
通過上述成果,我們提出了一種基于編碼參數(shù)的編碼時間預測模型,其公式如下式(4)所示。
式中,tpred是最終的預測時間,tpos是位置相鄰幀的編碼時間,其量化參數(shù)是qppos,參考幀數(shù)目是refpos,權重是a;ttemp是時間層相鄰幀的編碼時間,量化參數(shù)是qptemp,參考幀數(shù)目是reftemp,權重是b;α是3)中的變化因子,β是1)中的比率。
基于編碼參數(shù)的編碼時間調整方法的流程如圖2所示。對我們所獲取到的兩種編碼幀的編碼時間,首先將兩者同步到同一個圖像組的位置水平上。然后對調整后的位置相鄰幀的編碼時間分別進行基于量化參數(shù)的調整和基于參考幀的調整。從而我們可以得到兩個在統(tǒng)一編碼水平上的幀。調整的過程描述如下:
(1)對當前幀,我們可以獲得兩種已編碼幀,即時間層相鄰幀和位置相鄰幀。首先判斷這兩種幀是否在同一個圖像組位置水平上,如果在,則不需要調整;否則,將位置相鄰幀進行如式(1)所示的調整。
(2)若這兩種幀不在同一量化參數(shù)水平上,我們將位置相鄰幀進行如式(2)所示的調整;否則,不需要調整。
(3)若這兩種幀不在同一參考幀數(shù)目水平上,我們將位置相鄰幀進行如式(3)所示的調整;否則,不需要調整。
通過上述調整,我們可以得到在同一編碼參數(shù)水平的兩個不同類別的已編碼幀。通過使用這兩種已經同步到同一編碼參數(shù)水平上的已編碼幀的編碼時間信息,我們可以預測得到當前幀的編碼時間。
2.基于編碼時間預測模型的負載均衡方法
負載均衡是一種我們能獲得最高加速比的理想狀態(tài)。但是在實際的編碼中,由于自然圖像的隨機性和最優(yōu)編碼模式的選擇問題,一幀圖像的計算復雜度分布并不均勻。因此,當我們給每一個條帶均勻分配編碼單元數(shù)目的時候,會出現(xiàn)負載失衡。負載失衡是降低并行處理器系統(tǒng)性能的一個很重要的因素。為了實現(xiàn)條帶水平并行的負載均衡,我們需要找到一種能夠有效預測每一個編碼樹單元計算復雜度的方法。這樣,我們就可以平均劃分每一個條帶的計算負載,使得每一個編碼核心同時完成。通過這樣做,并行處理系統(tǒng)就不會存在空閑等待現(xiàn)象,我們也將獲得最高的加速比。
本發(fā)明利用前面的基于編碼參數(shù)的編碼時間預測方法來得到當前幀中每一個編碼單元的預測編碼時間,進而使用這些信息來實現(xiàn)條帶水平并行的負載均衡。負載分配和調整的流程如圖3所示,具體實施方式如下:
(1)首先根據(jù)上述編碼時間預測方法來得到當前幀的總編碼時間和每一個編碼單元的編碼時間。
(2)根據(jù)所用設備的配置自動確定條帶的數(shù)目。
(3)根據(jù)條帶的數(shù)目和總預測編碼時間計算出每一個條帶的平均負載。
(4)根據(jù)每一個條帶的平均負載和所預測出來的每一個編碼單元的預測編碼時間,來確定每一個條帶所應該具有的編碼單元的數(shù)目。
(5)根據(jù)每一個條帶劃分的編碼單元的數(shù)目,計算劃分后的各個條帶的計算負載并排序,記錄最大負載,將其賦值給一個變量a。
(6)將變量a與其前后相鄰的條帶的負載相比,且向比其小的條帶轉移一個編碼樹單元;
(7)若變化后的最大負載小于之前的最大計算負載,或變化后的最小負載大于之前的最小負載,則確定此新的劃分,并更新條帶計算負載的排序,將最大負載賦值給變量a;執(zhí)行步驟(6);否則保持原劃分;
(8)若負載a不為最小,則將其賦值為次大計算負載,繼續(xù)執(zhí)行步驟(6);否則開始編碼。
當然,上述說明并非是對本發(fā)明的限制,本發(fā)明也并不僅限于上述舉例,本技術領域的技術人員在本發(fā)明的實質范圍內所做出的變化、改型、添加或替換,也應屬于本發(fā)明的保護范圍。