本發(fā)明屬于視頻壓縮編碼
技術領域:
,特別涉及一種運動估計加速方法,可用于在CPU+GPU平臺下的高效視頻編碼HEVC。
背景技術:
:視頻領域應用中有一項關鍵技術是視頻編碼,也稱視頻壓縮,其目的是盡可能去除視頻數(shù)據(jù)中的冗余成分,減少表征視頻的數(shù)據(jù)量。從20世紀80年代起,國際組織開始對視頻編解碼建立國際標準。隨著技術的不斷改進,新一代視頻編解碼標準——H.265/HEVC于2013年11月25日發(fā)布。與以往的視頻編解碼標準相比,H.265/HEVC的編碼性能有了很大的提升,這是由于新增了許多技術,例如基于四叉樹的靈活塊分割結構、不同角度的幀內(nèi)預測模式、幀間預測中自適應的高級運動向量預測技術AMVP、合并技術Merge、可變尺寸的離散余弦變換、性能更好的CABAC,以及新的樣點自適應補償濾波器等。幀間預測主要用于去除圖像間的時間相關性,通過將已經(jīng)編碼的圖像作為當前幀的參考圖像,來獲取各個塊的運動信息,從而去除時間冗余,提高壓縮效率。在H.265/HEVC中引入了新的幀間預測技術,包括Merge、AMVP及基于Merge的Skip模式。Merge技術利用空域相關性和時域相關性來減少相鄰塊之間的運動參數(shù)冗余,具體就是取相鄰PU的運動參數(shù)作為當前PU的運動參數(shù)。AMVP技術的作用與Merge技術類似,AMVP技術得到的運動矢量一方面為運動估計提供搜索起點,另一方面作為預測運動矢量使用。在運動搜索方面,快速搜索使用了TZSearch算法。分像素插值及運動搜索是為了克服由運動的連貫性導致的運動以半像素、1/4像素為單位的情況,對圖像信息進行濾波處理,并搜索出亞像素情況下的運動信息?,F(xiàn)有標準H.264/AVC以及H.265/HEVC都使用1/4像素精度運動估計。率失真是同時衡量壓縮性能和失真情況的一個量度。率失真優(yōu)化方法是最主要的編碼參數(shù)選擇優(yōu)化技術。在H.265/HEVC中,率失真函數(shù)如下:J=D+λ×Rrate其中D表示失真,Rrate表示編碼所消耗的比特數(shù),λ為拉格朗日乘子。在視頻編碼中常采用平方誤差和SSE、絕對誤差和SAD、均方誤差MSE等客觀評價方法作為率失真函數(shù)中的失真D。然而,優(yōu)異的性能是通過高度的算法復雜度換取的,相比于H.264/AVC,H.265/HEVC編碼速度大大降低,這導致了H.265/HEVC無法通過軟件的方法得到實時編解碼傳輸,所以提高編碼速度的是亟待解決的問題。提高編碼速度的方法有很多種,目前常見的有改變編碼策略、硬件加速和利用并行計算等。其中在并行計算方法中CUDA是一種通用的GPU計算產(chǎn)品,能夠非常有效的利用GPU強大的并行計算能力以及充足的存儲器帶寬。相比一般的CPU而言,CUDA在各個領域取得了顯著的成績,尤其在圖像處理方面中獲得的加速倍數(shù)已經(jīng)達到一到兩個數(shù)量級。2015年,王濤在其申請的專利“HEVC并行運動補償方法及裝置”中提出了圖像分塊并行運動補償和樹形收斂的方法,201510647960.1[P].2016,01,13。該方法運用了小塊合并為大塊思想,但該方法的并行粒度只達到了tiles級別和CTU級別,沒有充分發(fā)揮GPU的大規(guī)模運算能力。2013年,徐榮飛在其發(fā)表的論文“HEVC編解碼算法的CUDA優(yōu)化”中公開了一種基于整幀并行運動搜索和分像素插值的方法,北京郵電大學,2013,該方法利用合并SAD的方式避免了重復計算,同時利用重組參考幀的方式避免了數(shù)據(jù)的重復傳輸和重復的插值濾波。但為了易于實現(xiàn)并行化,該方法刪除了AMVP模塊,導致編碼遇到快速運動物體時無法及時捕捉,編碼后期圖像幀的編碼質(zhì)量下降。2016年,張維龍在其發(fā)表的論文“HEVC關鍵模塊并行算法的設計與基于GPU的實現(xiàn)”中公開了一種梯狀并行執(zhí)行運動估計的策略,大連理工大學,2016,該方法在保留了原始數(shù)據(jù)依賴性的同時保留了AMVP算法,但由于梯形編碼的并行程度只能達到多個編碼單元CU同時編碼,降低了并行效率。技術實現(xiàn)要素:本發(fā)明的目的在于針對上述已有技術的不足,提出一種高效視頻編碼中的運動估計加速方法,以避免編碼后期的編碼質(zhì)量下降,實現(xiàn)對整幅圖像級的并行計算,提高并行效率。為實現(xiàn)上述目的,本發(fā)明的技術方案包括如下:(1)利用主處理器CPU將圖像數(shù)據(jù)傳輸至協(xié)處理器GPU進行存儲,其中圖像數(shù)據(jù)包括:編碼圖像、參考圖像和參考幀運動向量信息表;(2)GPU利用圖像數(shù)據(jù)執(zhí)行分層高級運動向量預測和整像素運動搜索,得出各層的整像素運動向量:(2a)對64×64圖像塊的高級運動向量預測和整像素運動搜索:(2a1)將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將(0,0)向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成第一候選列表;(2a2)利用率失真準則選出第一候選列表中最優(yōu)項,作為64×64圖像塊的運動搜索起始點;(2a3)根據(jù)(2a2)確定的搜索起始點在參考圖像上對大小為64×64圖像塊執(zhí)行整像素運動搜索,得出64×64圖像塊的整像素運動向量;(2b)分別對32×32圖像塊、32×64圖像塊和64×32圖像塊的高級運動向量預測和整像素運動搜索:(2b1)將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將由步驟(2a3)得出的64×64圖像塊的整像素運動向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成第二候選列表;(2b2)利用率失真準則選出第二候選列表中最優(yōu)項,作為32×32圖像塊、32×64圖像塊和64×32圖像塊的運動搜索起始點;(2b3)根據(jù)(2b2)確定的搜索起始點在參考圖像上分別對32×32圖像塊、32×64圖像塊和64×32圖像塊執(zhí)行運動搜索,分別得出32×32圖像塊、32×64圖像塊和64×32圖像塊的整像素運動向量;(2c)分別對16×16圖像塊、16×32圖像塊、32×16圖像塊的高級運動向量預測和整像素運動搜索:(2c1)將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將由步驟(2b3)得出的32×32圖像塊的整像素運動向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成第三候選列表;(2c2)利用率失真準則選出第三候選列表中最優(yōu)項,作為16×16圖像塊、16×32圖像塊和32×16圖像塊的運動搜索起始點;(2c3)根據(jù)(2c2)確定的搜索起始點在參考圖像上分別對16×16圖像塊、16×32圖像塊和32×16圖像塊執(zhí)行運動搜索,分別得出16×16圖像塊、16×32圖像塊和32×16圖像塊的整像素運動向量;(2d)分別對8×8圖像塊、8×16圖像塊和16×8圖像塊的高級運動向量預測和整像素運動搜索:(2d1)將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將由步驟(2c3)得出的16×16圖像塊的整像素運動向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成第四候選列表;(2d2)利用率失真準則選出第四候選列表中最優(yōu)項,作為8×8圖像塊、8×16圖像塊和16×8圖像的運動搜索起始點;(2d3)根據(jù)(2d2)確定的搜索起始點在參考圖像上分別對8×8圖像塊、8×16圖像塊和16×8圖像塊執(zhí)行運動搜索,分別得出8×8圖像塊、8×16圖像塊和16×8圖像塊整像素運動向量;(3)GPU對參考圖像進行分像素插值濾波,得出不同精度的插值圖像;(4)以各層的整像素運動向量為起點,在不同精度的插值圖像上分別執(zhí)行分像素運動搜索過程,得出各個塊的分像素運動向量;(5)GPU將各個塊的整像素運動向量和分像素運動向量傳輸至CPU,CPU對這倆這些運動向量進行誤差修正,消除GPU計算帶來的偏移誤差,得出準確的運動向量,完成運動估計。本發(fā)明與現(xiàn)有技術相比,具有如下優(yōu)點:首先,本發(fā)明根據(jù)GPU的特點改進了高級運動向量預測技術,設計出完備的候選列表選取方案,使得選取出了更加準確的運動搜索起始點,為后續(xù)的整像素運動搜索提供了良好的基礎。其次,本發(fā)明根據(jù)GPU特點改進了整像素運動搜索技術,以整幅圖片為并行單位,大大加快了搜索的速度。再次,本發(fā)明由于簡化了分像素運動搜索,免去了復雜的邏輯判斷,提高了搜索效率。仿真結果表明,本發(fā)明在不影響編碼質(zhì)量的情況下,大幅提升了運動估計過程的速度,對于部分測試用例,在加速的同時能獲得更好的編碼質(zhì)量。附圖說明圖1是本發(fā)明的實現(xiàn)總框架示意圖;圖2是本發(fā)明中分層高級運動向量預測和整像素運動搜索的子流程圖;圖3是本發(fā)明中高級運動向量預測的時域候選向量分布圖;圖4是本發(fā)明中整像素運動搜索模板分布圖;圖5是本發(fā)明中分像素運動搜索示意圖。具體實施方式下面結合附圖和實施例,對本發(fā)明的具體實施方式做進一步的詳細說明。實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。參照圖1,本發(fā)明的實現(xiàn)步驟如下:步驟1,數(shù)據(jù)傳輸。利用主處理器CPU將圖像數(shù)據(jù)傳輸至協(xié)處理器GPU中,這些圖像數(shù)據(jù)包括:編碼圖像、參考圖像和參考幀運動向量信息表;GPU將這些圖像數(shù)據(jù)分別進行存儲,即將編碼圖像和參考圖像保存至GPU的紋理存儲器中,將參考幀運動向量信息表保存至GPU的全局內(nèi)存中。步驟2,GPU利用存儲的圖像數(shù)據(jù)進行分層高級運動向量預測和整像素運動搜索,得出各層的整像素運動向量。分層高級運動向量預測和整像素運動是基于不同尺寸的圖像塊進行的,不同尺寸的圖像塊中的任意一個尺寸的圖像塊是由整幅編碼圖像均勻劃分得出的若干個圖像塊。不同尺寸的圖像塊按一定的順序執(zhí)行不同的操作,劃分圖像塊的順序依次為:先劃分為64×64圖像塊、再劃分為32×32圖像塊、32×64圖像塊和64×32圖像塊,再次劃分為16×16圖像塊、16×32圖像塊和32×16圖像塊,最后劃分為8×8圖像塊、8×16圖像塊和16×8圖像塊。對于同一尺寸的圖像塊,并行度為整幀圖像。參照圖2,本步驟對不同圖像塊進行分層高級運動向量預測和整像素運動搜索具體步驟如下:2a)對64×64圖像塊進行高級運動向量預測和整像素運動搜索:2a1)對每個64×64圖像塊,將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將(0,0)向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成每個64×64圖像塊的第一候選列表;這里所說的對應位置,是指編碼圖像塊的坐標位置對應于參考幀運動向量信息表中相同坐標的位置,其包含圖像塊左上方、圖像塊上方、圖像塊右上方、圖像塊左方、圖像塊右方、圖像塊左下方、圖像塊下方、圖像塊右下方以及圖像塊心點左上角這9個位置,如圖3所示;2a2)利用率失真準則選出第一候選列表中最優(yōu)項,將最優(yōu)項保存至GPU的共享內(nèi)存,并將最優(yōu)項作為64×64圖像塊的運動搜索起始點;2a3)從GPU的全局內(nèi)存里讀取第一候選列表中最優(yōu)項,將最優(yōu)項作為搜索起始點,在參考圖像上對64×64圖像塊執(zhí)行整像素運動搜索,得出64×64圖像塊的整像素運動向量,存儲至全局內(nèi)存;所述整像素運動搜索的實現(xiàn)步驟如下:首先,以整幅圖像為并行單位,以運動搜索起始點為起點,以85個點的鉆石型搜索模板指定的位置為搜索位置進行搜索,如圖4所示,圖中白點組成的模板即為85個點的鉆石型搜索模板,求出每個搜索位置的絕對誤差和SAD,并通過計算選出絕對誤差和SAD最小的搜索位置,再將該搜索位置的運動向量設為次優(yōu)的運動向量;然后,以整幅圖像為并行單位,以次優(yōu)運動向量為起點,以21個點的加強模板型搜索模板指定的位置為搜索位置進行搜索,如圖4所示,圖中陰影點組成的模板即為21個點的加強模板型搜索模板,求出每個搜索位置的絕對誤差和SAD,通過計算選出絕對誤差和SAD最小的搜索位置,將該搜索位置的運動向量設為最優(yōu)的運動向量,該優(yōu)運動向量即為整像素運動向量。最后,將整像素運動向量保存至GPU的全局內(nèi)存中。2b)分別對32×32圖像塊、32×64圖像塊和64×32圖像塊的高級運動向量預測和整像素運動搜索:2b1)對以上32×32圖像塊、32×64圖像塊和64×32圖像塊的每個圖像塊,分別將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將從GPU的全局內(nèi)存中讀取的64×64圖像塊的整像素運動向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成這些塊各自的第二候選列表;2b2)利用率失真準則選出第二候選列表中最優(yōu)項,將最優(yōu)項保存至GPU的全局內(nèi)存,并將最優(yōu)項作為32×32圖像塊、32×64圖像塊和64×32圖像塊的運動搜索起始點;2b3)從GPU的全局內(nèi)存中讀取第二候選列表中最優(yōu)項,將最優(yōu)項作為搜索起始點,在參考圖像上分別對32×32圖像塊、32×64圖像塊和64×32圖像塊執(zhí)行整像素運動搜索,分別得出32×32圖像塊、32×64圖像塊和64×32圖像塊的整像素運動向量,存儲至全局內(nèi)存,其中整像素運動搜索的實現(xiàn)與步驟2a3)中的描述一致;2c)分別對16×16圖像塊、16×32圖像塊、32×16圖像塊的高級運動向量預測和整像素運動搜索:2c1)對以上16×16圖像塊、16×32圖像塊、32×16圖像塊的每個圖像塊,分別將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將從GPU的全局內(nèi)存中讀取的32×32圖像塊的整像素運動向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成第三候選列表;2c2)利用率失真準則選出第三候選列表中最優(yōu)項,將最優(yōu)項保存至GPU的全局內(nèi)存,并將最優(yōu)項作為16×16圖像塊、16×32圖像塊和32×16圖像塊的運動搜索起始點;2c3)從GPU的全局內(nèi)存中讀取第三候選列表中最優(yōu)項,將最優(yōu)項作為搜索起始點,在參考圖像上分別對16×16圖像塊、16×32圖像塊和32×16圖像塊執(zhí)行整像素運動搜索,分別得出16×16圖像塊、16×32圖像塊和32×16圖像塊的整像素運動向量,存儲至全局內(nèi)存,其中整像素運動搜索的實現(xiàn)與步驟2a3)中描述一致;2d)分別對8×8圖像塊、8×16圖像塊和16×8圖像塊的高級運動向量預測和整像素運動搜索:2d1)分別對以上8×8圖像塊、8×16圖像塊和16×8圖像塊的每個圖像塊,分別將參考幀運動向量信息表中對應位置的運動向量作為時域候選,將從GPU的全局內(nèi)存中讀取的的16×16圖像塊的整像素運動向量設為空域候選,并對該時域候選和空域候選進行合并,剔除重復項,生成第四候選列表;2d2)利用率失真準則選出第四候選列表中最優(yōu)項,將最優(yōu)項保存至GPU的全局內(nèi)存,并將最優(yōu)項作為8×8圖像塊、8×16圖像塊和16×8圖像的運動搜索起始點;2d3)從GPU的全局內(nèi)存中讀取第三候選列表中最優(yōu)項,將最優(yōu)項作為搜索起始點,在參考圖像上分別對8×8圖像塊、8×16圖像塊和16×8圖像塊執(zhí)行整像素運動搜索,分別得出8×8圖像塊、8×16圖像塊和16×8圖像塊整像素運動向量,存儲至全局內(nèi)存,其中整像素運動搜索的實現(xiàn)與步驟2a3)中描述一致。步驟3,分像素插值濾波。GPU對參考圖像進行分像素插值濾波,得出若干個不同精度的插值圖像。分像素插值濾波插值濾波是指將整幅圖像利用插值濾波系數(shù)做類加權平均計算,所用的插值濾波系數(shù)如下表:位置插值濾波系數(shù)1/4{-1,4,-10,58,17,-5,1}2/4{-1,4,-11,40,40,-11,4,-1}3/4{1,-5,17,58,-10,4,-1}經(jīng)過插值濾波得出3幅1/2精度插值圖像和12幅1/4精度插值圖像;由于數(shù)據(jù)依賴關系,分像素插值濾波計算的具體執(zhí)行順序如下:3a)求出整像素所在行的1/2像素點和1/4像素點;3b)求出整像素所在列的1/2像素點和1/4像素點;3c)根據(jù)整像素所在行的1/2像素點和1/4像素點求出整像素右下角處的1/2像素點和1/4像素點;步驟4,分像素運動搜索。從GPU的全局內(nèi)存中讀取各層的整像素運動向量,以各層的整像素運動向量為起點,在不同精度的插值圖像上分別執(zhí)行分像素運動搜索過程,得出各個塊的分像素運動向量,保存至GPU的全局內(nèi)存中。分像素運動搜索的實現(xiàn)步驟如下:4a)將分像素插值濾波所得的15個插值圖像映射為49個不同相位的圖像,并從49個不同相位的圖像中選出靠近整像素位置的25個不同相位的圖像,如圖5所示,灰色位置為15個插值圖像,黑色直線方框內(nèi)的圖像為49個不同相位的圖像,黑色虛線方框內(nèi)的圖像為25個不同相位的圖像;4b)在選出的25個不同相位圖像中,利用率失真準則搜索出最優(yōu)的運動向量作為分像素運動向量,將得出的分像素運動向量保存至全局內(nèi)存。步驟5,運動向量誤差修正。GPU將各個塊的整像素運動向量和分像素運動向量傳輸至CPU,CPU對像素運動向量和分像素運動向量進行如下誤差修正:5a)將GPU所得運動向量轉(zhuǎn)化為絕對坐標基準下的運動向量;5b)用轉(zhuǎn)化為絕對坐標的運動向量減去CPU在前期編碼產(chǎn)生的偏移量,得出CPU相對坐標基準下的運動向量,即運動估計最終結果;通過誤差修正,消除GPU計算帶來的偏移誤差,得出準確的運動向量,完成運動估計。本發(fā)明的效果可以通過下述仿真實驗進行進一步的說明:1.仿真條件硬件環(huán)境為:GeForceGTX960顯卡,其擁有8個流多處理器SM,總共8192個流處理器SP,Intel四核CPUi3-3200,4G內(nèi)存;軟件環(huán)境為MicrosoftVisualStudio2010,NVIDIACUDAToolkit7.5,設測試模型HM的運行模式為low_delay_P。2.仿真內(nèi)容在上述仿真條件下,用本發(fā)明方法對通用測試視頻序列中的部分視頻序列進行測試,測試結果如表一。表一通用測試視頻序列中的部分視頻序列測試結果根據(jù)表一測試得到的數(shù)據(jù)可見:測試模型HM編碼增速比平均約為1.8,碼率變化不超過5%,峰值信噪比PSNR降低不超過0.15,對部分測試序列峰值信噪比有0.01~0.02的提高。由此可以得出結論:本發(fā)明在不影響編碼質(zhì)量的情況下,大幅提升了運動估計過程的速度,對于部分測試用例,在加速的同時能獲得更好的編碼質(zhì)量。當前第1頁1 2 3