SHVC——HEVC的可分級視頻編碼研究(上)

SHVC——HEVC的可分級視頻編碼研究(上)

3 人贊了文章

1. 概述

可分級視頻編碼(Scalable Video Coding)來源於H.264標準的一個擴展,最初由Vidyo與Polycom牽頭制定,該技術旨在解決面對不同網路條件、不同終端處理能力以及不同用戶質量需求,編碼端需要多次編碼或伺服器需要二次編解碼的問題,通過SVC技術的使用,可實現時域可分級(Temporal scalability)、空間可分級(Spatial scalability)以及質量可分級(Quality scalability),即一次編碼可產生不同幀率、解析度、圖像質量的視頻壓縮碼流解碼端進行自適應調整,減輕了編碼端與伺服器額外的運算負擔。SVC於2007年納入H.264標準附錄G,SHVC(SVC for HEVC)也於2014年10月納入H.265標準附錄H。下文將可分級視頻編碼簡稱為分級編碼,包括SVC與SHVC。

1.1 應用領域

分級編碼可在如下三個領域有所應用:

(1). 視頻會議領域:視頻會議終端直接利用分級編碼編出多解析度,多分層質量,無需傳統MCU在中心進行二次編解碼,MCU僅實現視頻路由分發功能即可(即SFU Selective Forwarding Unit),也可在網路丟包環境下利用時域可分級,拋棄部分時域級實現網路適應性。很多做基於互聯網的視頻融合產品或視訊雲平台的廠商也都為了更進一步減輕伺服器計算壓力、更好的終端適配能力與更強的網路適應性,使用私有信令+SVC視頻編碼+RFC6190封裝來作為視頻系統內視頻協商編碼傳輸的基本手段。

(2). 視頻監控領域:IPC或其他視頻監控源通常產生3路視頻,1路解析度高、幀率高、質量好的用於存儲(如HD1080P@60fps),1路解析度中、幀率中、質量一般的的用於在帶寬充足的網路上傳輸至後端NVR進行預覽或實時視頻分析(如HD720P@30fps),1路解析度低、幀率低、質量差的用於在帶寬不充足的網路上傳輸至手機進行預覽(如CIF或QVGA@15fps)。用SVC編碼器可以直接產生3層的分級碼流,基本層用於手機遠程預覽,增強1層用於NVR預覽,增強2層用於存儲。目前很多主流的IPC晶元,其分級編碼演算法已集成在ASIC中。

(3). 互聯網視頻應用:分級編碼的終端適配與網路適應性可以更好的服務於互聯網尤其是移動互聯網的視頻應用,無論是點播還是直播,伺服器可以根據不同的網路情況丟棄質量層,保證視頻的流暢,終端也可以根據自身的處理性能來解碼不同的分層,但由於點播、直播網站的核心技術與關注點在於高效率分發傳輸而非視頻編解碼,故應用範圍不如前兩個領域廣闊。

1.2 分級編碼優缺點

分級編碼的優缺點如下:

優點:分級編碼實現一次分層編碼比用AVC、HEVC編多次更高效,降低了編碼器或二次編解碼的伺服器的計算負擔,利用分級也可以更好的針對不同網路環境與解碼終端計算能力進行策略上的差異化優化。

缺點:分級編碼限制了編碼的一些模式,壓縮效率要比單層碼流低10%(H.264的SVC與AVC對比),且隨著分級層數越多,效率下降越多;其次,分級編碼增加了解碼複雜度。最後,雖然分級編碼已經成為正式標準,但廠商支持力度有限,且支持分級編碼的廠商之間兼容性和互通性遠沒有單層編碼的好。

1.3 實現方式

主流分級編碼的實現方式如下:

基於ASIC和GPU的AVC、HEVC還沒有將分級編碼SVC、SHVC納入其中,目前僅有基於CPU運算的分級編碼;

其中SVC開源工程有兩個:JSVM,類似於JM代碼,C++實現,未經過任何彙編級優化,想要研究並優化SVC演算法可在此基礎上開展;openh264,類似於x264代碼,C實現,有基於Intel x86和ARM Neon的彙編級優化(主要在變換、量化和環路濾波上),可商用,且已經集成在WebRTC中,所以自稱有SVC技術的視頻產品如雨後春筍般在市場上大量湧現,SVC也成為視頻雲廠商的主流技術賣點。

SHVC開源工程有一個:SHM,就是直接在HM代碼上修改的,C++實現,未經過任何彙編級優化,想要研究並優化SHVC演算法可在此基礎上開展。

最後,為了避免協議和論文中對英文翻譯辭彙差異出現的理解偏差,對英文術語進行一個統一,本文中Scalable譯為分級而不譯為伸縮,Hierarchical譯為分層而不譯為分級,Inter-layer prediction譯為層間預測,Inter prediction譯為幀間預測。

2.技術實現分析

2.1 SVC技術實現

SVC由於技術較為成熟,不詳細展開,僅僅將它作為SHVC各項技術產生的援引進行說明。SVC引入了BL(Base Layer 基本層)、EL(Enhance Layer 增強層)、RL(Reference Layer 參考層)、ILP(Inter Layer Prediction層間參考預測)、ILR Picture(Inter Layer Reference Picture層間參考圖像)、接入單元(Access Unit)這些概念,並沿用至SHVC。

2.1.1 SVC的架構

SVC的編碼部分架構如下圖所示:

圖1 SVC編碼架構

2.1.2 時域可分級

時域可分級較簡單,直接丟棄非關鍵幀即可,但要求編碼時有一定分層結構,下圖中分別是基於B幀的分層預測結構,非二分法的基於B幀的分層預測結構和基於P幀的分層預測結構。

圖2 SVC時域可分級

2.1.3 空域可分級

空域可分級複雜得多,要考慮BL的I幀、P幀如何給EL進行參考,即如何使用BL的幀內預測、幀間預測的參數與殘差來被EL所使用,如下圖所示。

圖3 SVC空間域可分級

由此引入了層間預測技術以及幾項子技術:

層間預測:由於SVC的設計目標即是盡量多的使用BL編碼信息作為EL編碼的參考,從而提升編碼效率。故對於EL來說有三種方式可供選擇:使用本層的參考圖像進行預測,或使用下一層重構圖像上採樣後的參考圖像進行預測,或直接使用下一層非重構圖像(殘差及MV)進行預測,上圖的(1)(2)(3)三處,(1)使用方法一,(2)使用方法二,(3)可使用方法二或方法三,對於高空間解析度,低運動的視頻場景(如視頻會議)來說方法三比方法二更優。

層間幀內預測(Inter-layer intra prediction):利用EL圖像幀內預測和BL圖像幀內預測的相關性,利用BL宏塊幀內預測方式來生成RL,繼而對EL宏塊進行預測。EL引入新的標記位base_model_flag,首先EL先看是否有對應的BL,且BL是否宏塊使用幀內預測,如果是則BL宏塊上採樣(即差值)生成RL宏塊作為EL宏塊的預測塊,對應同位置的宏塊幀內編碼模式保持一致。在實現上亮度採樣使用一維4抽頭FIR,色度採樣使用雙線性濾波器,最終EL只需要傳原始圖像和層間幀內預測的殘差即可。

層間運動預測(Inter-layer motion prediction):利用EL圖像幀間預測和BL圖像幀間預測的相關性,利用BL宏塊幀間預測方式來生成RL,繼而對EL宏塊進行預測。RL list中引入新的標記位 motion_prediction_flag,來標識宏塊分割是否啟用運動矢量層間預測。EL的運動矢量和宏塊劃分方式由BL提供,對應同位置的宏塊幀間編碼模式保持一致,對於MV要做適當倍數縮放。同理EL只需要傳輸殘差信號就可以,無需傳輸幀間預測模式、運動參數。

層間殘差預測(Inter-layer residual prediction):利用EL圖像殘差和BL圖像殘差的相關性,直接利用BL生成RL,繼而預測EL的殘差。EL引入新的標記位residual_prediction_flag,來標識宏塊是否啟用殘差預測。其中RL通過BL使用基於block雙線性上採樣濾波來生成,且為了避免濾波器超過變換塊邊界是在變換塊上進行的。

2.1.4 質量可分級

質量可分級可看成是空間可分級的一種特例,BL和EL具有相同尺寸,但有不同質量。具體包括粗粒度質量分級(CGS coarse-grain quality scalable coding)、中等粒度質量分級(MGS medium-grain quality scalable coding)和細粒度質量分級(FGS fine-grain quality scalable coding)。CGS實現方式是BL層DCT變換係數使用粗糙量化器得到,其它層包含原始圖像以及BL和原始圖像間差值用更精細的量化器生成EL碼流。FGS實現方式是BL採用傳統非可分級編碼,EL使用了位平面編碼技術,由於計算複雜,後未納入標準。MGS是兩者的折中。質量可分級面臨著一個新的問題就是漂移效應,產生原因是運動補償預測在編碼端和解碼端不同步,比如質量精細化的包丟失了,所以要權衡EL編碼效率與漂移效應,故MGS引入了關鍵幀作為重同步點,EL的關鍵幀必須由BL重構實現,進而將漂移控制在一個GoP中。

圖4 SVC質量可分級

2.1.5 SVC的不足

SVC在設計上有幾處不足,首先,SVC EL宏塊語法和解碼過程與AVC完全不一樣,無法在AVC解碼器不經過更改的情況下直接解碼SVC,甚至連BL都解碼不了;其次,為了權衡計算負載與內存佔用,SVC解碼端有一個單循環約束(single-loop decoding constraint),好處是無需解碼所有層或重建所有RL就可以解碼最高層圖像,所帶來的問題是它可以包含所有層幀內預測的編碼宏塊,但是不能包含所有層幀間預測的編碼宏塊,所以一旦EL某宏塊使用了IntraBL,層間預測也必須從RL對應的幀內預測編碼宏塊進行,受約束的鎮內預測用於RL的所有蹭,RL的空間幀內預測只能在幀內預測編碼空間的相鄰塊去尋找,不能從幀間預測編碼空間的相關位置宏塊中尋找;最後,不能在傳輸過程中任意時刻進行向下層級的轉換,如果解碼器一直在EL解碼,那麼在BL解碼是不充分的,如果網路適應性優化策略在帶寬不足的情況下把EL給丟棄了,那麼BL也無法解碼了,因為BL的時域參考沒有了。

2.2 SHVC技術實現

針對於SVC的不足,SHVC提出了新的思路,個人感覺有兩個指導原則:一是BL盡量做的通用,盡量在高層語法上而不是底層實現上做修改調整;二是繼續高效發掘ILP來提升EL編碼效率。

2.2.1 SHVC架構

目前JCT-VC文檔中僅有解碼器的架構,但可以根據協議反推出編碼器結構

圖5 SHVC解碼器架構

由上圖可見,BL有帶內帶外兩種傳輸手段,前者需要解碼器解復用,但解碼本身就是標準的HEVC解碼器;EL層解碼器和標準的HEVC解碼器差距僅僅是片頭級或更高層語法的不同,塊級邏輯都是相同的,這就滿足了第一個原則。層間處理主要關注點在於如何用BL的DPB生成EL的DPB之間,這就使層間處理與每一層的編碼解耦,此外和SVC的one-loop解碼不同,SHVC使用multi-loop解碼,允許了層間預測使用RL參考區域的所有像素點,為第二個原則奠定好了架構基礎。

這種設計的優勢有三點:首先,由於HEVC引入了PU(預測單元)的概念,層間預測就直接在PU級實現,並且RL的重構圖像可以用作長期參考幀,連同其他時域參考幀都會被賦上ref_idx語法元素值,對塊級是完全透明的,保證了EL所有塊邏輯過程(語法元素解析解釋、解碼重構、環路濾波等)和標準的HEVC解碼器完全一致,SHVC代碼實現上能夠最大限度重用HEVC編碼工具。其次,EL僅需要BL的DPB重構圖像和運動信息,把BL完全當成黑盒使用,且標準HEVC解碼器本身就會提供這樣的介面(為了支持TMVP),所以BL編解碼器幾乎沒有改動,甚至BL可以使用H.264、MPEG-2,可見SHVC擁有更強的後向兼容能力,實現了混合編碼可分級。最後,JCT-VC力圖將MV-HEVC與SHVC架構進行統一,實現視角與空間的可分級。

2.2.2 SHVC新功能

SHVC相對於SVC新擴展了三個可分級功能,分別是混合編碼可分級、位深度可分級與色域可分級

圖6 SHVC分級功能

其中,時間可分級較簡單,SHVC繼承了SVC的方法;空間可分級新增了任意縮放比例的支持和靈活重採樣相位調整;其他可分級功能的實現都是依賴於SHVC新的層間參考圖像處理來完成。

2.2.3 SHVC新技術

SHVC層間參考圖像處理是空間域、位深度、色域三者可分級的核心技術,具體包括紋理重採樣、運動區域重採樣和顏色映射三項技術。

2.2.3.1 紋理重採樣

當RL和EL解析度、位深不同時,通過對紋理進行重採樣獲取層間參考圖像使其與EL圖像具有相同的解析度和位深。其中通過空間縮放比、裁剪參數(參考區域偏移與縮放參考層偏移)以及重採樣相位參數,可從EL的像素位置計算出參考層像素位置,單位為1/16像素。其重採樣插值濾波器設計與HEVC的MC插值濾波器相同。

圖7 SHVC紋理重採樣

2.2.3.2 運動區域重採樣

HEVC採用了兩種新的MV預測方案merge和AMVP(先進的運動向量預測,包括TMVP時域運動向量預測),從中找到最合適的MV預測值來做當前塊的MV預測值使用。恰好層間參考圖像可以被選作同位置圖像來獲取TMVP,所以拋棄了SVC的MV預測,不需要對塊級編碼做任何更改就能實現層間運動向量預測。稍微複雜的一種情形就是EL和RL解析度不同或發生了剪裁,需要對MV進行適當的縮放,SHVC引入層間運動趨於映射(MFM)方法來實現細節。

2.2.3.3 顏色映射

色域可分級指RL和EL具有不同色域,一般EL比RL色域更寬,SHVC使用3D查詢表顏色映射,將RL圖像中的像點顏色空間由RL轉到EL,其3D表如下圖所示。

圖8 SHVC顏色映射

2.2.3 SHVC與SVC技術對比圖

SHVC與SVC技術對比如下圖所示,不再贅述。

圖9 SHVC與SVC技術實現對比

(下一部分將從SHM代碼角度對具體演算法實現進行分析)

SHVC——HEVC的可分級視頻編碼研究(下)


推薦閱讀:

加班上榜,華為員工:我們不叫加班,叫延鍾!
互聯網時代流量的本質
iOS11藍牙升級了嗎?
有趣的機器學習第二章:用機器學習製作超級馬里奧的關卡
互聯網時代為什麼免費才是根本趨勢?

TAG:科技 | 計算機科學 |