魏家聰,范益波,曾曉洋
(復(fù)旦大學(xué) 微電子學(xué)院,上海 201203)
近年來,隨著超高清(Ultra High Definition, UHD)視頻的普及,主流的視頻分辨率逐漸從720p(1280×720)、1080p(1920×1080)等較低分辨率向4k(3840×2160)等更高分辨率靠攏.而高分辨率視頻給視頻的傳輸與存儲(chǔ)帶來了極大的壓力,為了解決這一問題,在2013年,視頻編碼聯(lián)合工作組(Joint Collaborative Team on Video Coding, JCT-VC)發(fā)布了高效率視頻編碼(High Efficiency Video Coding, HEVC)標(biāo)準(zhǔn),這代編碼標(biāo)準(zhǔn)相比于上一代高級(jí)視頻編碼(Advanced Video Coding, AVC)標(biāo)準(zhǔn),綜合編碼效率提升了大約50%[1].
HEVC編碼器通常需要支持較高分辨率的視頻,因此目前HEVC整像素運(yùn)動(dòng)搜索模塊的實(shí)現(xiàn)一般需要較大的搜索范圍來滿足高分辨率編碼的需求.在高性能HEVC整像素運(yùn)動(dòng)搜索模塊實(shí)現(xiàn)方面,文獻(xiàn)[2]提出的方案使用了最高[-512,+511]的搜索范圍,文獻(xiàn)[3]提出的方案使用了最高[-3847.75,+3847.75]的搜索范圍;而在硬件開銷較小的HEVC整像素運(yùn)動(dòng)搜索模塊實(shí)現(xiàn)方面,文獻(xiàn)[4]提出的方案也需要[-64,+64]的搜索范圍.對(duì)于硬件視頻編碼器來講,由于從外部存儲(chǔ)器中讀取數(shù)據(jù)的時(shí)間代價(jià)較高,通常會(huì)將運(yùn)動(dòng)搜索所需要的像素點(diǎn)緩存在片上.在硬件開銷限制較為嚴(yán)格的情況下,上述方案中較大的搜索范圍會(huì)帶來非常大的片上存儲(chǔ)器開銷.
針對(duì)上述問題,本文提出了一種以編碼樹單元為單位確定搜索起點(diǎn)的方法,這種方法使得低延時(shí)硬件編碼器可以在使用較小搜索范圍的情況下,得到較優(yōu)的幀間預(yù)測結(jié)果,從而大幅降低片上存儲(chǔ)器的開銷.
在HEVC幀間編碼中,整像素運(yùn)動(dòng)搜索通常取當(dāng)前編碼塊,在參考幀中相同位置附近,進(jìn)行塊匹配計(jì)算,并將參考幀中最佳匹配塊與當(dāng)前編碼塊的相對(duì)位置記為運(yùn)動(dòng)向量.運(yùn)動(dòng)搜索的過程如圖1所示.考慮到塊匹配的時(shí)間復(fù)雜度,在編碼器當(dāng)中,通常設(shè)有搜索范圍的上限.另外,在搜索范圍內(nèi),通常并不會(huì)搜索所有可能的搜索點(diǎn),僅會(huì)搜索部分更有可能出現(xiàn)最佳匹配塊的搜索點(diǎn).
圖1 HEVC中整像素運(yùn)動(dòng)搜索的例子Fig.1 Sample of motion search in HEVC
在早期,由于視頻尺寸通常較小,故運(yùn)動(dòng)搜索通常使用全搜索算法,即在指定區(qū)域內(nèi),對(duì)區(qū)域內(nèi)的所有搜索點(diǎn)進(jìn)行搜索.隨著視頻尺寸越來越大,需要搜索的范圍也變得越來越大.由于全搜索算法需要搜索的搜索點(diǎn)的數(shù)量與搜索區(qū)域的面積成正比,全搜索算法的搜索代價(jià)迅速擴(kuò)大到難以接受的程度,故在整像素運(yùn)動(dòng)搜索的領(lǐng)域,大量簡化搜索的方案被提出.
最早的快速搜索算法是文獻(xiàn)[5]中所提出的3步搜索策略.這種方法假設(shè)搜索點(diǎn)的誤差值是沿梯度下降的.在3步搜索中,首先在(0,0)點(diǎn)及其周圍進(jìn)行一次搜索,從這些點(diǎn)中找到1個(gè)最優(yōu)點(diǎn),在最優(yōu)點(diǎn)的周圍再進(jìn)行一次搜索,之后在上一步中的最優(yōu)點(diǎn)附近進(jìn)行第3步搜索.這種方法認(rèn)為: 搜索點(diǎn)的誤差與當(dāng)前搜索點(diǎn)和最優(yōu)搜索點(diǎn)的距離呈正相關(guān),每一步的最優(yōu)點(diǎn)會(huì)沿著誤差下降的梯度前進(jìn),并且可以找到一個(gè)局部最優(yōu).誤差沿梯度下降的假設(shè)以及這種多步搜索的策略非常有效,多年來一直被業(yè)界追捧.文獻(xiàn)[6]提出了一種對(duì)3步搜索進(jìn)行優(yōu)化的方法,這種方法認(rèn)為在(0,0)點(diǎn)附近更可能存在最優(yōu)點(diǎn),并依據(jù)此種假設(shè),調(diào)整了3步搜索需要搜索的搜索點(diǎn);文獻(xiàn)[7]在3步搜索算法的基礎(chǔ)上,提出了一種4步搜索算法,相比3步搜索,在較大尺度上能夠搜索到更好的結(jié)果;文獻(xiàn)[8]提出了一種菱形搜索算法,這種搜索算法在每一步中,每個(gè)搜索點(diǎn)距離搜索中心點(diǎn)的距離相等,相比3步搜索以及4步搜索,搜索效率得到了進(jìn)一步的提升;文獻(xiàn)[9]提出了一種六邊形的搜索方法,這種搜索方法相比菱形搜索算法,能夠降低搜索的復(fù)雜度,同時(shí)僅略微降低編碼效率;而在高效率視頻編碼測試模型(HEVC test Model, HM)參考編碼軟件中,使用的搜索方法是TZ-Search策略,這種方法一般基于菱形搜索或六邊形搜索,可以靈活調(diào)整搜索步長以及搜索起始點(diǎn),此搜索方法的搜索效率非常接近全搜索.
雖然TZ-Search的搜索效率較好,但由于其設(shè)計(jì)是基于軟件算法考慮,每步搜索中不同搜索點(diǎn)距離較遠(yuǎn),難以實(shí)現(xiàn)相鄰搜索點(diǎn)中參考像素的復(fù)用,帶來了很大的讀取硬件存儲(chǔ)器的開銷.為了解決在硬件上實(shí)現(xiàn)高效率整像素搜索的問題,很多在整像素搜索中優(yōu)化存儲(chǔ)器讀取的方法被提出: 文獻(xiàn)[10]提出了一種搜索方法,該方法在水平方向依次搜索水平距離為1的點(diǎn),在每次搜索中僅需要讀取一列像素,但缺點(diǎn)是不同搜索點(diǎn)之間的距離過近導(dǎo)致搜索范圍難以擴(kuò)大;文獻(xiàn)[11]提出了一種單向搜索的算法,這種算法基于搜索誤差沿梯度下降的假設(shè),搜索時(shí)在上下左右4個(gè)方向中的3個(gè)方向(除去搜索前進(jìn)方向的反方向)選取最佳方向前進(jìn),這種方法每次僅需讀取一行或一列像素,但搜索方向受限較大.
而文獻(xiàn)[4]提出了一種新的方法,這種方法使用了支持二維復(fù)用的存儲(chǔ)器,可以快速沿垂直、水平、對(duì)角線3個(gè)方向進(jìn)行搜索框的移動(dòng),利用這種特性,本方法中使用了改良的菱形TZ-Search搜索方法,如圖2(見第196頁)所示,這種搜索方法假設(shè)在(0,0)點(diǎn)附近更有可能出現(xiàn)最佳的搜索點(diǎn),故在(0,0)點(diǎn)附近設(shè)置了更密集的菱形搜索圖案.此方法相比HM中的TZ-Search,除了菱形搜索框更密集之外,每個(gè)菱形搜索框上的搜索點(diǎn)也更加密集,這使得此方法相較HM中的TZ-Search,編碼效率更高.但這種方法以64×64的編碼樹單元為單位進(jìn)行搜索,并且搜索范圍為[-64,+64],這導(dǎo)致需要在片上緩存至少(64+64+64)×(64+64+64)×8bits,即192×192×8bits的參考像素矩陣;除此之外,片上還需緩存原始圖像像素(64×64×8)bits以及預(yù)測圖像像素(64×64×8)bits,這又是相當(dāng)大的一筆片上存儲(chǔ)器開銷.本文將在此方法的基礎(chǔ)上進(jìn)行改進(jìn),在保證運(yùn)動(dòng)整像素搜索準(zhǔn)確性的前提下,實(shí)現(xiàn)降低存儲(chǔ)器開銷的目的.
圖2 一種高效的硬件整像素運(yùn)動(dòng)搜索算法Fig.2 A high efficiency integral motion search algorithm for hardware
在HEVC中,編碼塊的大小通常較小,在多數(shù)情況下,一個(gè)單獨(dú)的編碼塊并不能完整包含整個(gè)運(yùn)動(dòng)物體;相反地,通常情況下運(yùn)動(dòng)物體會(huì)被分解為多個(gè)編碼塊,如圖3(見第196頁)所示.這意味著同一個(gè)運(yùn)動(dòng)物體中,相鄰的編碼塊的運(yùn)動(dòng)向量應(yīng)該是相近的.基于這種假設(shè),HEVC中使用了先進(jìn)運(yùn)動(dòng)向量預(yù)測(Advanced Motion Vector Prediction, AMVP)方式[12].AMVP使用的相鄰的運(yùn)動(dòng)向量如圖4所示,預(yù)測單元(Prediction Unit, PU)為HEVC存儲(chǔ)運(yùn)動(dòng)向量的基本單位.在AMVP中,分為A和B 2個(gè)列表,其中列表A有2個(gè)候選運(yùn)動(dòng)向量,分別為左側(cè)運(yùn)動(dòng)向量(A1)和左下運(yùn)動(dòng)向量(A0),列表B有3個(gè)候選運(yùn)動(dòng)向量,分別為右上運(yùn)動(dòng)向量(B0)、上方運(yùn)動(dòng)向量(B1)、左上運(yùn)動(dòng)向量(B2).AMVP模式會(huì)在A、B列表中各選出1個(gè)候選運(yùn)動(dòng)向量.A列表中選出候選運(yùn)動(dòng)向量的方法是: 若A0運(yùn)動(dòng)向量存在,則選擇A0;若A0不存在,A1存在,則選擇A1;若均不存在,則列表A的候選運(yùn)動(dòng)向量為空.列表B的選擇方式類似,順序?yàn)锽0→B1→B2.若A、B列表均為空,則運(yùn)動(dòng)向量的預(yù)測值為(0,0).
圖3 運(yùn)動(dòng)物體編碼塊劃分的例子Fig.3 An example of partitions for coding blocks in moving object
圖4 AMVP中使用的鄰近運(yùn)動(dòng)向量Fig.4 Neighboring motion vectors used in AMVP
AMVP方法原本是用作降低編碼運(yùn)動(dòng)向量時(shí)的冗余信息,若此方法有效,實(shí)際運(yùn)動(dòng)向量不應(yīng)偏離AMVP中預(yù)測得到的運(yùn)動(dòng)向量預(yù)測值較多.圖5(a)中展示了在HM16.20當(dāng)中,使用僅參考前一幀的低延遲模式,并且僅使用AMVP模式時(shí),以8×8為單位,統(tǒng)計(jì)實(shí)際運(yùn)動(dòng)向量(Motion Vector, MV)長度的絕對(duì)值,與預(yù)測運(yùn)動(dòng)向量(Motion Vector Prediction, MVP)和實(shí)際運(yùn)動(dòng)向量作差得到的運(yùn)動(dòng)向量差(Motion Vector Difference, MVD)的長度絕對(duì)值之間的關(guān)系.圖中所使用的Class A~F為JCT-VC推薦的不同分辨率的視頻測試集[1].可以看到,在1920×1080以及2560×1600分辨率下,運(yùn)動(dòng)向量絕對(duì)長度的平均值已經(jīng)超過50,而此時(shí)運(yùn)動(dòng)向量差的絕對(duì)長度僅略大于10.而在圖5(b)中,展示了在1920×1080分辨率下,AMVP預(yù)測得到的運(yùn)動(dòng)向量在實(shí)際運(yùn)動(dòng)向量[-12,+12]范圍內(nèi)的比例.
圖5 實(shí)際編碼中運(yùn)動(dòng)向量的統(tǒng)計(jì)分布Fig.5 Statistical distribution of motion vectors in actual coding
從上面的2組統(tǒng)計(jì)中可以看出,若可以在AMVP預(yù)測得到的運(yùn)動(dòng)向量周圍展開搜索,僅需[-12,+12]的搜索范圍便可以在大多數(shù)情況下搜索到一個(gè)非常好的運(yùn)動(dòng)向量,遠(yuǎn)遠(yuǎn)小于文獻(xiàn)[4]中所需的[-64,+64]的搜索范圍.但這個(gè)方法在硬件編碼器中是不現(xiàn)實(shí)的,原因如下:
第一,AMVP中的預(yù)測運(yùn)動(dòng)向量需要得到準(zhǔn)確的鄰近運(yùn)動(dòng)向量,而這是不切實(shí)際的;這是因?yàn)樵谶M(jìn)行整數(shù)運(yùn)動(dòng)搜索時(shí),相鄰塊通常尚未決定最終的運(yùn)動(dòng)向量以及劃分,以及整數(shù)運(yùn)動(dòng)搜索通常在分像素運(yùn)動(dòng)搜索之前進(jìn)行,這意味著在整數(shù)運(yùn)動(dòng)預(yù)測階段,預(yù)測器不能夠拿到準(zhǔn)確的鄰近運(yùn)動(dòng)向量,從而導(dǎo)致當(dāng)前編碼塊不能得到準(zhǔn)確的運(yùn)動(dòng)向量預(yù)測值.
第二,在硬件編碼器中,為了充分利用硬件的并行優(yōu)勢,通常會(huì)以較大的塊為基本單位,對(duì)其中的小塊進(jìn)行并行的搜索,如文獻(xiàn)[4]提出的方法是以64×64為單位進(jìn)行整像素運(yùn)動(dòng)搜索;而由于訪問主存儲(chǔ)器抓取參考幀像素的代價(jià)是非常高昂的,硬件編碼器通常是以同樣的較大塊為單位抓取參考幀像素,而非為每一個(gè)小編碼塊單獨(dú)抓取所需的參考像素.由于每個(gè)編碼塊的預(yù)測運(yùn)動(dòng)向量均不盡相同,故難以在編碼開始之前便確定需要抓取的參考像素的范圍.
基于以上兩點(diǎn)考慮,直接使用AMVP的預(yù)測運(yùn)動(dòng)向量作為搜索起點(diǎn)的做法是不現(xiàn)實(shí)的.在第2章中,將提出一種新的利用相鄰運(yùn)動(dòng)向量確定搜索起點(diǎn)的方法,來降低整數(shù)運(yùn)動(dòng)搜索中需要搜索的范圍,并降低硬件整數(shù)運(yùn)動(dòng)搜索模塊中所需的存儲(chǔ)器開銷.
在1.2節(jié)中提到,若能夠利用相鄰的運(yùn)動(dòng)向量信息來確定當(dāng)前編碼塊的搜索起點(diǎn),可以大大降低所需的運(yùn)動(dòng)搜索范圍.在本章中,2.1節(jié)將提出一種利用當(dāng)前幀鄰近運(yùn)動(dòng)向量優(yōu)化搜索起點(diǎn)的方法;2.2節(jié)中會(huì)將這種方法擴(kuò)展至?xí)r域來進(jìn)一步增加搜索起點(diǎn)的準(zhǔn)確性.
圖6 編碼樹單元的編碼順序Fig.6 Encoding order of coding tree units
在1.2節(jié)中曾提到,硬件編碼器中通常以較大的塊為單位抓取參考幀中的參考像素,一般來說,以編碼樹單元為基本單位抓取參考像素是一個(gè)較好的選擇,這是因?yàn)樵趫D像中編碼樹單元是按照簡單的光柵順序進(jìn)行掃描,而編碼樹單元內(nèi)的編碼塊是按照更為復(fù)雜的z掃描方式進(jìn)行掃描,以編碼樹單元為單位抓取參考像素可以降低復(fù)雜度.
由于圖像中運(yùn)動(dòng)物體通常是連續(xù)的,距離當(dāng)前編碼塊較近的運(yùn)動(dòng)信息,通常與當(dāng)前編碼塊中的運(yùn)動(dòng)信息相近,而距離較遠(yuǎn)的塊通常難以保證運(yùn)動(dòng)信息的相似性.故在確定當(dāng)前編碼樹單元的搜索起點(diǎn)時(shí),應(yīng)增加近距離運(yùn)動(dòng)信息的權(quán)重,并降低距離較遠(yuǎn)運(yùn)動(dòng)信息的權(quán)重.
另外,如圖6所示,對(duì)于當(dāng)前編碼樹單元來說,左邊和上邊以及右上方的單元的編碼已經(jīng)結(jié)束,可以用作參考,而其他方向上的編碼尚未開始,故不能用作參考.
圖7 空域中使用的相鄰參考?jí)KFig.7 Neighboring reference blocks used in spatial
結(jié)合以上幾點(diǎn),圖7(見第198頁)中展示了一種利用相鄰編碼塊中的運(yùn)動(dòng)信息來為當(dāng)前編碼樹單元確定運(yùn)動(dòng)搜索起點(diǎn)的方法.在圖中可以看到,相鄰的參考?jí)K分為2類: 第1類是近距離參考?jí)K,這部分參考?jí)K包括上方和左方已編碼的參考?jí)K,第2類是遠(yuǎn)距離參考?jí)K,包括左上方和右上方已編碼的參考?jí)K,參考?jí)K以8×8為單位,表示當(dāng)前位置運(yùn)動(dòng)向量,若該8×8塊中包含2個(gè)運(yùn)動(dòng)向量,則當(dāng)前參考?jí)K中的運(yùn)動(dòng)向量的水平和垂直分量分別表示為2個(gè)運(yùn)動(dòng)向量的算術(shù)平均值.在此方法中,為了簡化計(jì)算,將每個(gè)區(qū)域至當(dāng)前塊的距離簡化為當(dāng)前區(qū)域中心至編碼樹單元中心的距離,假設(shè)編碼樹單元每一邊至中心的距離為1.00,則近距離參考?jí)K區(qū)域至編碼樹單元中心的距離為1.00,遠(yuǎn)距離參考?jí)K區(qū)域距離編碼樹單元中心的距離設(shè)為1.75,則近距離和遠(yuǎn)距離參考?jí)K的權(quán)重可分別記為1.75和1.00.另外,若某參考?jí)K不包含任何運(yùn)動(dòng)信息,則該塊的運(yùn)動(dòng)向量記為不存在.
空域中搜索起始點(diǎn)在水平和垂直2個(gè)方向可分別表示為式(1)和(2):
(1)
(2)
其中:MVSpatial,x和MVSpatial,y分別為搜索起始點(diǎn)在水平和垂直2個(gè)方向上的分量;MVNear,x和MVNear,y分別表示近距離參考?jí)K在水平和垂直2個(gè)方向上的分量;MVFar,x和MVFar,y分別表示遠(yuǎn)距離參考?jí)K在水平和垂直2個(gè)方向上的分量;NNear和NFar分別表示近距離和遠(yuǎn)距離上所有的包含有效運(yùn)動(dòng)信息的參考?jí)K的數(shù)量.
當(dāng)畫面中不同部分的運(yùn)動(dòng)反差較大時(shí),若當(dāng)前搜索范圍較小,則須經(jīng)過多個(gè)編碼樹單元的搜索范圍疊加之后,才能將搜索起點(diǎn)從前一運(yùn)動(dòng)物體遷移至另外一個(gè)運(yùn)動(dòng)物體上.而在文獻(xiàn)[1]中的數(shù)據(jù)顯示,將編碼樹單元的大小從64×64降低至32×32之后,在相同的圖像質(zhì)量下,娛樂場景和交互場景中的碼率僅分別平均增加2.2%與3.7%;另外,將編碼樹單元的大小降低為32×32之后,由于使用的相鄰運(yùn)動(dòng)信息距離當(dāng)前編碼樹單元中心更近,運(yùn)動(dòng)搜索起始點(diǎn)的準(zhǔn)確性將會(huì)上升.并且,在編碼樹單元的尺寸縮減至32×32之后,參考像素緩存、當(dāng)前幀像素緩存、預(yù)測像素緩存的大小都可以得到不同程度地降低.
圖8中展示了在Basketball Drive(1920×1080)序列中,使用以編碼樹為單位確定搜索起點(diǎn)的方法之后,在使用[-12,+12]的搜索范圍時(shí),圖像左上角256×256區(qū)域的運(yùn)動(dòng)向量相比最佳運(yùn)動(dòng)向量的偏差.這里假設(shè)HM16.20中的TZ-Search計(jì)算得到的運(yùn)動(dòng)向量為最佳的運(yùn)動(dòng)向量.圖8中展示的數(shù)據(jù)為運(yùn)動(dòng)向量誤差的絕對(duì)長度,以編碼樹單元為單位進(jìn)行統(tǒng)計(jì).由于在1幀的左上角沒有任何可以參考的相鄰運(yùn)動(dòng)信息,這導(dǎo)致左上角的編碼樹單元只能從(0,0)位置開始搜索.在圖8(b)中可以看到,誤差降低的速度要遠(yuǎn)遠(yuǎn)快于圖8(a) 中64×64的編碼樹單元.這說明在以編碼樹單元為基本單位確定搜索起點(diǎn)時(shí),使用32×32的編碼樹單元可以有效抑制運(yùn)動(dòng)突變導(dǎo)致的運(yùn)動(dòng)搜索誤差.
圖8 不同編碼樹單元尺寸下運(yùn)動(dòng)向量的誤差Fig.8 Error of motion vectors in different size of coding tree unit
除了在空域之外,在時(shí)域中也有物體運(yùn)動(dòng)信息的相似性.在參考幀中,相同位置的編碼塊的運(yùn)動(dòng)信息很可能是相似的,這是由于在時(shí)域上相鄰的2幀一般是連貫的,在相同位置下,很可能是同一個(gè)運(yùn)動(dòng)物體,而同一個(gè)運(yùn)動(dòng)物體在較短時(shí)間內(nèi),運(yùn)動(dòng)信息不太可能發(fā)生突變.另外,由于2.1節(jié)中提出的基于空域相鄰運(yùn)動(dòng)向量確定搜索起點(diǎn)的方法僅能使用當(dāng)前編碼樹單元之外的運(yùn)動(dòng)信息,而前一幀中相同位置的運(yùn)動(dòng)信息可以作為當(dāng)前幀相鄰運(yùn)動(dòng)信息的補(bǔ)充.除此之外,在當(dāng)前圖像的上邊界和左邊界的塊,特別是左上角的塊,由于缺少部分或者全部的相鄰運(yùn)動(dòng)信息,導(dǎo)致搜索起始點(diǎn)出現(xiàn)偏差,利用時(shí)域上相同位置編碼樹單元中的運(yùn)動(dòng)信息可以緩解這種偏差.
圖9 預(yù)測搜索起始點(diǎn)使用的時(shí)域相鄰塊Fig.9 Temporal neighboring blocks used in search starting point prediction
在圖9中,展示了確定時(shí)域搜索起始點(diǎn)所使用的相鄰運(yùn)動(dòng)信息.在當(dāng)前幀的整像素運(yùn)動(dòng)搜索開始之前,首先以4×4為單位,計(jì)算前一幀中相同位置的編碼樹單元的平均運(yùn)動(dòng)向量,該運(yùn)動(dòng)向量即為時(shí)域上相同位置的運(yùn)動(dòng)向量預(yù)測值.若某塊不存在運(yùn)動(dòng)信息,則將該塊記為無效.式(3)和(4)中展示了時(shí)域搜索起始點(diǎn)的計(jì)算方法:
(3)
(4)
式中:MVTemporal,x和MVTemporal,y分別為搜索起點(diǎn)預(yù)測值在水平和垂直方向的分量;NTemporal為相同位置的編碼樹單元中所有有效的運(yùn)動(dòng)信息參考?jí)K;而MVframe-1,x和MVframe-1,y分別為該編碼樹單元中每個(gè)有效運(yùn)動(dòng)信息參考?jí)K的水平及垂直運(yùn)動(dòng)向量分量.
在前2節(jié)中,分別提出了使用空域以及時(shí)域來預(yù)測搜索起始點(diǎn)的方法.由于在同一幀中,不同位置的編碼樹單元能夠使用的運(yùn)動(dòng)信息不同,這里將當(dāng)前幀中不同位置的編碼樹單元分為3類,分別確定其搜索起點(diǎn):
(1) 左上角的編碼樹單元
由于該位置的編碼樹單元是每幀當(dāng)中首先被編碼的編碼樹單元,故在空域中沒有任何可以用來參考的運(yùn)動(dòng)信息.此塊僅使用時(shí)域中相鄰的運(yùn)動(dòng)信息,如式(5)和(6)所示:
(5)
(6)
式中:MVTemporal,(0,0)為前一幀中相同位置的時(shí)域搜索起始點(diǎn)預(yù)測值,權(quán)重為1.0;MVTemporal,(0,1)為前一幀中當(dāng)前位置右側(cè)的時(shí)域搜索起始點(diǎn)預(yù)測值,權(quán)重為0.5;MVTemporal,(1,0)為前一幀中當(dāng)前位置下方的時(shí)域搜索起始點(diǎn)預(yù)測值,權(quán)重為0.5.這樣便可在左上角編碼樹預(yù)測塊沒有任何可以使用的相鄰運(yùn)動(dòng)信息的情況下,提供搜索起點(diǎn)預(yù)測值.
(2) 頂部及左側(cè)第1列編碼樹單元(除左上角編碼樹單元)
這部分編碼樹單元中,頂部第1列編碼樹單元在空域中,僅有左側(cè)以及左上方的運(yùn)動(dòng)信息可以使用,左側(cè)第1列僅有上方以及右上方的運(yùn)動(dòng)信息可以使用,故在此種情況下,應(yīng)降低當(dāng)前幀中運(yùn)動(dòng)信息的權(quán)重,如式(7)和(8)中所示:
MVx=0.3MVSpatial,x+0.7MVTemporal,x,
(7)
MVy=0.3MVSpatial,y+0.7MVTemporal,y.
(8)
(3) 其余位置的編碼樹單元
在其余位置中,所有的空域相鄰運(yùn)動(dòng)信息均存在,故可以提升空域相鄰運(yùn)動(dòng)信息的權(quán)重;另外,由于當(dāng)前幀中運(yùn)動(dòng)信息的相似性通常大于相鄰幀中的相似性,故應(yīng)適當(dāng)降低時(shí)域相鄰運(yùn)動(dòng)信息的權(quán)重,如式(9)和(10)中所示:
MVx=0.8MVSpatial,x+0.2MVTemporal,x,
(9)
MVy=0.8MVSpatial,y+0.2MVTemporal,y.
(10)
本節(jié)中將對(duì)2.3節(jié)中提出的搜索起點(diǎn)確定方法的編碼效率進(jìn)行分析.本文所使用的測試方法為JCT-VC中推薦的Bj?ntegaard-Delta Bit-Rate,即BDBR方法[13],來確定在同樣的圖像質(zhì)量下,圖像比特率的變化百分比.本文在BDBR中所使用的PSNR(Peak Signal-to-Noise Ratio)為JCT-VC推薦的計(jì)算方法,如式(11)中所示.
(11)
表1 本文方法的編碼效率
其中,PSNRY指亮度分量的PSNR,PSNRU和PSNRV分別指U和V 2個(gè)色度分量的PSNR.這樣做的原因: 一方面是由于人眼對(duì)亮度更敏感;另一方面是由于U、V 2分量的像素?cái)?shù)均只有亮度分量的1/2,此外,在HEVC中,U、V分量的預(yù)測精度要高于亮度分量,故需要進(jìn)一步降低這2個(gè)分量的權(quán)重值.
在表1中展示了本文方法與HM 16.20默認(rèn)搜索方法的BDBR,本文方法中使用32×32的編碼樹單元,搜索范圍為[-12,+12],HM的設(shè)置為低延遲模式,且僅參考前一幀,其余均為默認(rèn)設(shè)置.從表中可以看到,本文提出的方法在搜索范圍僅有[-12,+12]的情況下,相比HM中[-64,+64]的搜索范圍,編碼效率平均僅下降1.6%,即在相同客觀圖像質(zhì)量下,視頻的碼率上升1.6%.值得注意的是,在高分辨率,且運(yùn)動(dòng)較為劇烈的視頻中,特別是People On Street、Kimono和Basketball Drive這3個(gè)視頻序列,本文提出的方法會(huì)導(dǎo)致較大的編碼效率下降,這是由于每個(gè)編碼樹單元的搜索范圍僅有[-12,+12],在不同運(yùn)動(dòng)物體的邊界,容易使編碼塊不能迅速響應(yīng)運(yùn)動(dòng)的變化,在這種場景下,本方法在今后可以被進(jìn)一步優(yōu)化.
本文所提出的方法主要目標(biāo)有兩個(gè): 第一是降低片上像素緩存存儲(chǔ)器的開銷;第二是在第一點(diǎn)的基礎(chǔ)上,將編碼效率維持在一個(gè)較為合理的水平.在3.1節(jié)的分析中可以看到,本文提出的方法僅犧牲1.6%的編碼效率,這表明此方法順利完成了第二個(gè)目標(biāo).在表2中展示了本文方法與文獻(xiàn)[4]中編碼特性及像素存儲(chǔ)器綜合結(jié)果的對(duì)比.值得指出的是,表格中的BDBR增量均是與HM16.20默認(rèn)搜索方法相比較得出的結(jié)果.
表2 本文方法的電路的綜合結(jié)果與對(duì)比
由表2可以看到,相比文獻(xiàn)[4]中的設(shè)計(jì),本文提出的方法將參考像素的存儲(chǔ)器開銷從189.3千門降至了16.1千門,相當(dāng)于將參考像素存儲(chǔ)器的大小降低了91.5%.另外,由于編碼樹單元的尺寸從64×64降至了32×32,故原始像素和預(yù)測像素的存儲(chǔ)器開銷均降低了75%.本方法中,參考像素、原始像素、預(yù)測像素的開銷總計(jì)降低了84.9%.從電路綜合的結(jié)果可以看出,本方法很好的完成了降低整像素搜索中存儲(chǔ)器開銷的目標(biāo).
另外,由于本方法將文獻(xiàn)[4]設(shè)計(jì)中的[-64,+64]搜索窗范圍縮減至[-12,+12],并且不需要搜索邊長為64的搜索塊,這使得在粗搜階段需要搜索的搜索點(diǎn)大大降低,粗搜所需的周期數(shù)也從6180周期降低至了365周期.從這點(diǎn)來看,本文提出的方法在今后可以充分利用節(jié)約出的周期數(shù)進(jìn)行更加精細(xì)的精搜來提升編碼效率.
在高分辨率視頻中,通常需要更大的搜索范圍來保證幀間預(yù)測的效率,這導(dǎo)致在硬件視頻編碼器中,整像素搜索單元的參考像素存儲(chǔ)器開銷越來越大.實(shí)際上,由于相鄰預(yù)測塊的運(yùn)動(dòng)信息相似性,大量起點(diǎn)較遠(yuǎn)的搜索點(diǎn)實(shí)際上并不需要進(jìn)行搜索.因此本文提出了一種適用于HEVC硬件編碼器確定整像素搜索起點(diǎn)的方法,這種方法利用空域以及時(shí)域鄰近的運(yùn)動(dòng)信息來確定當(dāng)前編碼樹單元的搜索起始點(diǎn),在編碼效率僅下降1.6%的條件下,將參考像素所需的存儲(chǔ)器大幅縮減至參考設(shè)計(jì)的8.5%.
復(fù)旦學(xué)報(bào)(自然科學(xué)版)2020年2期