賀 詞
(中國科學(xué)技術(shù)大學(xué) 電子工程與信息科學(xué)系,安徽 合肥 230027)
可伸縮視頻編碼,也可說是分層視頻編碼,是從視頻服務(wù)器中一段視頻流里提取出不同的子碼流,從而滿足在不同終端用戶、不同網(wǎng)絡(luò)框架和不同服務(wù)質(zhì)量(QoS)下的各種不同的用戶需求。編碼有多個層,包括一個基本層和多個增強層。增強層通過提高幀率、空間分辨率和圖像質(zhì)量等方式來提高用戶的體驗感覺。這些方式分別被稱為時間、空間和信噪比SNR的可伸縮性,同時它們也可以組合起來使用?;跀?shù)據(jù)包的視頻傳輸方式正得到越來越廣泛的應(yīng)用,其中一個固有問題就是信道錯誤。網(wǎng)絡(luò)擁塞使得路由丟棄了部分數(shù)據(jù)包,或是包經(jīng)過了太長的時間才到達目的地,還可能傳輸鏈路上的物理干擾導(dǎo)致的比特錯誤。很多視頻傳輸系統(tǒng)采用的都是UDP協(xié)議,任何比特錯誤都將導(dǎo)致整個包被丟棄,導(dǎo)致一部分圖像區(qū)域甚至整個圖像被破壞。加上目前為提高壓縮效率采用了復(fù)雜的視頻預(yù)測編碼,使得錯誤在空間上和時間上都會傳播,從而視頻序列的主客觀質(zhì)量在出現(xiàn)一個 IDR(Instant Decoder Refresh)幀把錯誤截斷前可能受到很大損害。在信源層面的錯誤彈性編碼和錯誤隱藏兩種方法是對抗這一問題的方法。錯誤彈性編碼指的是信源在碼流中加入特定的冗余信息來檢測數(shù)據(jù)丟失、阻止錯誤傳播、指導(dǎo)錯誤隱藏以幫助解碼端恢復(fù)或者隱藏由信道出錯造成的錯誤,在某一特定的信道情況下達到最小的端到端失真。錯誤隱藏則是在已知正確解碼的區(qū)域和任何有幫助的信息的基礎(chǔ)上對出錯丟失的圖像區(qū)域進行估計修復(fù)。錯誤隱藏只在解碼端進行,它不像其它差錯控制方法那樣需要編碼端參與。
SVC繼承了H.264/AVC中幾乎所有的標準錯誤彈性和錯誤隱藏編碼工具,針對自身特點,利用層之間的相關(guān)性 SVC還提出幾種新的方法,提高了性能。
錯誤彈性除了早期視頻編碼的幀內(nèi)編碼宏塊/幀刷新、條帶編碼、參考幀確認、參考幀選擇、數(shù)據(jù)分割、頭信息擴展碼和頭信息重復(fù)、冗余幀技術(shù)外,H.264/AVC還增加了新的標準工具:參數(shù)集,可變宏塊順序 FMO(Flexible MB Order),漸進解碼刷新GDR(Gradual Decoding Refresh),場景信息標識, SP/SI幀,受限幀內(nèi)預(yù)測和參考幀標記重復(fù)。這些都在SVC中得到了繼承。
可伸縮視頻編碼種提出了新的錯誤彈性工具:
① 質(zhì)量層完整性校驗:質(zhì)量層完整性的校驗補充增強信息(SEI)包含了由所有同一依賴層中(dependency_id)的質(zhì)量增強層中的網(wǎng)絡(luò)抽象層單元(NAL)計算得到的 CRC碼。此信息用來檢驗解碼端是否接收到了某個依賴層中所有增強層NAL單元。當檢測到丟失,可以通知編碼端,讓其用沒有丟失的質(zhì)量基本層作為參考來編后續(xù)單元,從而消除由于使用有錯質(zhì)量增強層做參考產(chǎn)生的錯誤傳播;
② 第0個時間層索引:第0個時間層索引SEI消息可以提供一種機制來檢測當傳輸有可能出錯時,是否需要第 0個時間層(最低的時間層)才能正確解碼當前單元。解碼端根據(jù)這一信息來決定當所依賴的最低時間層丟失時是否發(fā)送反饋信息要求編碼端重傳;
③ SVC中基于LA-RDO(Loss Aware – Rate Distortion Optimized Macroblock Mode Decision)的幀內(nèi)編碼宏塊刷新:與單層編碼時一樣,SVC中宏塊模式選擇也會影響碼流的錯誤彈性性能。在給定一個目標丟包率后,每幀都計算出基于4x4塊的錯誤傳播圖,作為后續(xù)幀編碼的模式選擇時的考量因素。遍歷所有的候選模式后對每個模式都估算出對應(yīng)編碼方法和一定丟包率下宏塊重建時的失真和所需的比特數(shù)。根據(jù)以下公式選擇代價最小的模式進行編碼:
其中C代表代價,D代表失真,R代表編碼碼率,λ代表拉格朗日系數(shù)。多層編碼時對基本層的模式選擇與單層時完全相同。對增強層,如果沒有層間預(yù)測,也直接使用單層的方法。如果使用了層間預(yù)測, 要考慮層間預(yù)測所依賴的上一層直到最低層的失真情況;
④ SVC中的冗余幀編碼(Redundant Picture):因為傳輸中對于基本層的非對稱保護,所以SVC標準是對增強層添加冗余幀,并且是針對每個 GOP(Group Of Pictures)中的關(guān)鍵幀(Key Picture)。即可以是簡單的完全復(fù)制原幀數(shù)據(jù),也可以是采用比原幀更大量化參數(shù)編碼得到,后者幀質(zhì)量較原幀低但是減小了冗余幀帶來的碼率增加。冗余幀可以使用與原幀參考幀不同的多個參考幀,阻止時間上的錯誤傳播。原幀和冗余幀是同時通過冗余幀補充增強信息(Redundant Picture SEI)來指示一個冗余層表達和其對應(yīng)的主層表達之間的相關(guān)性:在一個主幀丟失后,冗余表達是否可以完全代替主表達中的幀間預(yù)測,或者層間模式、運動、殘差以及紋理預(yù)測。
當原幀丟失時如果存在冗余幀,可以對冗余幀進行解碼。如果原幀沒有丟失而是正常解碼,冗余幀會被丟棄而不被解碼。冗余幀可以大大減小丟幀的影響,假設(shè)原幀有一個冗余幀,并且是原幀的簡單重復(fù),那么原幀和冗余幀都丟失的概率則是原丟失率的平方。對標準測試序列 foreman和football的相關(guān)統(tǒng)計實驗結(jié)果顯示,試驗中基本層為 QCIF大小,還有一個CIF大小的增強層,冗余幀是原幀的簡單復(fù)制,相比沒有冗余幀時有很明顯的性能 提升。
錯誤隱藏是只在解碼端使用的技術(shù),如果一幀圖像分成了多個條帶,只有一部分丟失,可以采用空間的錯誤隱藏方法。對于一幀圖像通常只用一個包來傳輸?shù)牡痛a率情況,只能根據(jù)已經(jīng)解碼的相鄰幀來恢復(fù)實際上已經(jīng)整個丟失的幀。較簡單的方法是直接拷貝前一幀,在運動平滑的情況下也可采用運動拷貝的方法。
SVC中提出了幾種基于層間預(yù)測的錯誤隱藏算法。通過組合使用這些錯誤隱藏方法,取得了比單層編碼錯誤隱藏算法明顯PSNR的增益:
① 丟失幀的參考幀管理:當檢測到關(guān)鍵幀丟失后,將會把它當成 P幀來做錯誤隱藏,所需的參考幀列表重排序(RPLR)命令將保證當前幀用前一個關(guān)鍵幀來預(yù)測而內(nèi)存管理控制操作(MMCO)命令將標記上一個GOP中不需要用到的幀,使得丟幀之后依然保證最小的解碼圖像緩沖 DPB(Decoded Picture Buffer)。如果丟失的不是關(guān)鍵幀,RPLR命令將根據(jù)前一個GOP中的幀的情況來構(gòu)造,或者當丟失的幀在增強層時用基本層的幀來構(gòu)造;
② 層內(nèi)錯誤隱藏算法:指的是只用于丟失幀處于同一個空間或質(zhì)量層的幀來做錯誤隱藏,幀拷貝FC(Frame Copy):待恢復(fù)的幀的每個像素都直接用參考幀列表中的第一幀同位置像素拷貝而來。基本層和增強層都可以使用此算法。B幀的時間直接TD(Temporal Direct)模式:宏塊的運動矢量直接從其相鄰的參考幀推導(dǎo)而來。例如,當參考幀列表1(后向列表)中的參考幀的同位置塊使用其參考幀列表0(前向列表)中的一幀做參考,而這一幀也處在當前B幀的列表0中,那么這兩幀將被用來對當前 B幀的該宏塊進行雙向預(yù)測。運動矢量將直接用列表 1中的參考幀的運動矢量根據(jù)幀的顯示順序的差值進行縮放得到。SVC中,空間和質(zhì)量增強層不能使用TD模式進行編碼,不過我們可以在對B幀做錯誤隱藏的時候使用上述算法。用上述算法得到的運動矢量來進行運動補償預(yù)測出丟失的幀中的宏塊,只不過此時假設(shè)殘差為0。SVC框架設(shè)計中,每一層中需要用到的運動矢量都被保存了下來,因此使用 TD算法不需要增加額外的內(nèi)存空間。運動拷貝 MC(Motion Copy):不論關(guān)鍵幀原本是I幀還是P幀,都將被當做P幀進行錯誤隱藏。因此TD算法無法使用,而兩個關(guān)鍵幀之間的距離一般比較大,幀拷貝算法的性能會比較差。為了更準確的恢復(fù)出當前幀,前一個關(guān)鍵幀的運動矢量將被拷貝過來作為當前幀的運動矢量來進行運動補償。
③ 層間錯誤隱藏算法:下面會介紹兩種算法,一種用于單回路解碼,另一種用于多回路解碼。
基本層跳過模式 BLSkip(Base Layer Skip):對于增強層中丟失的幀的每個宏塊,如果其在基本層中的對應(yīng)宏塊是幀內(nèi)編碼,則使用紋理預(yù)測;如果基本層中的對應(yīng)宏塊是幀間編碼的,則使用運動預(yù)測和殘差預(yù)測,運動補償使用上采樣后的運動矢量進行。如果基本層沒有丟失,這一算法可以直接使用。如果基本層中的幀也丟了,則基本層的幀首先使用TD算法生成運動矢量,然后再恢復(fù)增強層,即BLSkip與TD結(jié)合使用。
基本層重建及上采樣(RU):用此方法時,要先把基本層的幀重建出來,然后根據(jù)其與增強層的分辨率比例進行上采樣。由于需要把基本層完全解碼,這就需要多回路解碼。這一方法在只有增強層發(fā)生連續(xù)丟幀時會比較有效,并且對于低運動量的視頻序列其性能有可能與BLSkip不相上下。
改進的錯誤隱藏算法:一種改進的錯誤隱藏方法是將BLSkip與MC算法結(jié)合使用。用MC算法修復(fù)基本層中丟失的關(guān)鍵幀或者是對應(yīng)的基本層幀丟失了的增強層中的關(guān)鍵幀。然后用BLSkip算法恢復(fù)出其它丟失的幀。
上述方法FC算法可以用于所有的幀;TD算法可用于所有非關(guān)鍵幀;BLSkip算法和RU算法只可用于增強層中的幀;MC算法用于關(guān)鍵幀。RU算法只在解碼端采用多回路解碼時才可使用。
本文介紹了可伸縮視頻編碼標準(SVC)中用于的錯誤彈性編碼和錯誤隱藏技術(shù)以及他們各自的特點,并且給出了其中一些方法相關(guān)的實驗結(jié)果和推導(dǎo)。在現(xiàn)有的很多方法不斷擴展和提升的同時,更多更有效的方法工具還在不斷被提出來。如何提高對抗信道傳輸中衰減、誤碼和數(shù)據(jù)丟失的魯棒性是視頻編解碼研究中一個重要和富有挑戰(zhàn)性的工作。
[1]Wang Y, Zhu Q.Error Control and Concealment for Video Communication: A Review[J].Proc.of the IEEE, 1998(86):974-997.
[2]Wang Y, Ostermann J, Zhang Y Q.Video Processing and Communications[M].USA: Prentice Hall, 2002.
[3]Wiegand T,Sullivan G, Reichel J, et al.Joint Draft 11 of SVC Amendment[M].USA:[s.n.],2007.
[4]Schwarz H, Marpe D, Wiegand T.Overview of Scalable Video Coding Extension of H.264/AVC Standard[J].IEEE Trans.on Circuits and Syst.for Video Technol., 2007(17):1103-1120.
[5]He C, Liu H, Li H Q,et al.Redundant Picture for SVC[M].USA:[s.n.],2007.
[6]Guo Y, Wang Y K, Li H Q.Error Resilience Mode Decision in Scalable Video Coding[C].USA:[s.n.],2006:2225-2228.
[7]Chen Y, Xie K, Zhang F, et al.Frame Loss Error Concealment for SVC[C].China:Zhejiang University Press,2006:1862-1775.
[8]Wang Y K, Zhu C, Li H Q.Error Resilient Video Coding Using Flexible Reference Frames[C].USA:[s.n.],2005:691-702.