Google 視訊壓縮核心演算法組工程師:詳解 AV1 編碼演算法

聲網Agora發表於2019-03-03

本文整理自 Google 視訊壓縮核心演算法組軟體工程師陳誠在 RTC 2018 實時網際網路大會編解碼技術專場上的演講分享。他在演講中主要分享了 AV1 的研發現狀,詳細分享了 AV1 的編碼演算法、編碼效果。如有任何問題,歡迎留言提問。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

根據思科公司今年釋出的報告稱,預計 2021 年,視訊將會成為網際網路產品的主要需求,超過80%的網際網路流量將會被視訊佔據。屆時,與視訊相關的服務與需求將提升約50%,而其中對超高清的需求將提升約30%。同時,網際網路對直播和其它實時視訊服務的需求將會是目前的15倍。

如此快速的發展和快速增長的需求,正是網際網路公司推動新一代視訊編解碼技術的動力。

一、AV1 與 AOM 的概況

新一代編解碼技術 AV1 已於2018年6月定稿,它有四個特點:

  1. AV1 是一個開源、免費的生態系統,開放媒體聯盟(AOM)的成員都將支援 AV1

  2. AOM 為 AV1 準備了資金進行法律方面的援助和專利保護

  3. AV1 相對於前一代產品使用了更前沿的編碼技術,並取得了較好的壓縮效率

  4. 在 AOM 的合作框架內為 AV1 提供了合作開放的環境

眾所周知,AV1 的前身是 Google 推出的 VP9。相對於 VP9,AV1 有三個特點:Performance、Platform、Potential。AOM 的框架使得 AV1 ,以及未來視訊的發展都更有活力。儘管 AV1 目前還處於研發和推廣初期,我們相信它在業界的廣大支援下,會獲得比 VP9 更廣泛的應用。

開源媒體聯盟 AOM 由 Google、亞馬遜、思科等公司聯合牽頭成立,致力於推廣和研發多媒體的視訊編解碼技術。除了當前與視訊行業緊密相連的網際網路公司外,該聯盟內還有硬體裝置廠商、內容供應商、主流瀏覽器廠商等。最近蘋果也加入了 AOM。業界的生態系統也都將支援 AV1。

AV1 工作組共有四個:軟體研發組、硬體研發組、Tapas 組、測試組。軟體和硬體研發組聯合進行 AV1 的研發,同時測試組會對 AV1 的一致性進行檢測。而 Tapas 組則進行專利稽核,並提供法律問題諮詢。

AV1 的研發組是個很有活力的社群。在整個 AV1 的研發過程中,已經發表超過15篇學術論文,約有 100 多個研發提案被 AV1 採用。目前大家可以在網上下載到參考程式碼,大約有30萬行程式碼,並且平均每天會有15個程式碼被提交上來。

AV1 從研發到推廣,將會分為四個階段:

  • 第一階段,標準的研發與制定

  • 第二階段,桌面瀏覽器對解碼的支援

  • 第三階段,推廣 AV1 在更多硬體與軟體的支援

  • 第四階段,在 AOM 生態系統中支援 AV1 的軟硬體編碼

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

從2015年的研發開始,到2018年6月的定稿,我們已經完成了第一階段的目標。目前,我們正處於第二階段,Google 的 Chrome 瀏覽器上已經實現了軟體解碼。在未來的第三、第四階段中,我們的主要任務就是硬體裝置與內容供應商對 AV1 的支援。預計2020年 AV1 將獲得更廣泛的應用。

二、AV1 的編碼與演算法

與其它視訊編碼軟體相似,AV1 的也分為一系列連續的模組,包括分割、預測、變換、量化、熵編碼、環內濾波等。在單元塊劃分上,AV1 支援更多的劃分模式和更大的劃分塊。其前身 VP9 支援最大劃分塊為 64x64,對每個方塊可以遞迴地進行四個子塊的劃分。AV1 支援最大劃分塊為 128x128,對方塊遞迴的劃分有10種型別,最小的劃分塊為 4x4。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

預測模式分為幀間預測和幀內預測。在幀內預測主要包含了四個主要工具:

  • 支援更多多種的預測模式

  • 支援從亮度值預測色度值

  • 調色盤模式

  • 幀內拷貝模式

AV1 支援56個方向的預測,利用當前塊的上邊界和左邊界,重建的影象,通過方向的差值來預測當前塊的畫素值。它的角度的表達方式是從8個主要的差值方向中,選擇其中之一,並用一個 Delta 值來確定精確的角度。

除了方向的預測之外,AV1還支援其它的方式對單個畫素或當前漸變塊生成預測。如下圖所示,有四種不同的差值方法對當前值進行預測,當前值P將會由深藍色模組的畫素差值獲得。值得一提的是,另外一種遞迴的方式對漸變塊進行預測,利用濾波的方式遞迴地對每個畫素值進行預測,在編解碼方面複雜度會有所提升。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

從亮度值預測色度值的工具,它利用了視訊影象當中亮度值通道與色度值通道具有高度相似性的特點,通過選擇適當的引數再以重建亮度值通道來預測色度值,這個工具對於遊戲視訊具有很好的壓縮效果。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

調色盤模式將塊內的元素當做幾種離散的顏色,不同於直接傳輸畫素本身的引數值,而是通過傳輸色塊的顏色編號實現壓縮的目的。AV1支援從8×8到64×64的塊,支援調色盤模式,編碼器會自動根據視訊內容選擇是否使用調色盤模式,如圖所示的例子,左邊是一個當前模組被劃分成了3種不同的顏色塊,根據波前的方式逐個編碼塊內的方塊,它的左側和上側的顏色訊號將作為資訊在熵編碼中被使用。調色盤模式對於當前塊有單一色調的場景十分有用,一般這種場景出現在螢幕內容的壓縮當中。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

另一個對於螢幕內容壓縮很重要的工具叫做幀內拷貝。它的工作原理就是,在預測當前塊時它會去搜尋當前幀已重建的影象部分,比如下圖1中第二個字母 A 和第三個字母 A,它將找到第一個已經被編碼的字母A預測塊,它的預測會非常準確,可以達到提高壓縮效率的目的。圖形中包含了非常多的字母,就會通過幀內拷貝的模式搜尋到非常好的預測效果,大大提高了視訊壓縮效率,僅這幅圖來說,壓縮效率就提升了 50%。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

幀間的壓縮工具比幀內的壓縮工具更豐富。AV1 比 VP9 在參考幀的數量和結構上有了進一步的優化,支援8個參考幀,並能夠使用其中的7個參考幀進行預測,而 VP9 只使用了其中三個。AV1 還支援分層結構進行雙向預測。

在現在的視訊壓縮標準中,運動估計在位元率中佔有很大一部分,運動的估計一般通過搜尋一個運動向量找到參考幀中對應的塊對當前塊進行預測。在 AV1 裡我們採用了一種方法叫做運動場投影的方法來獲取運動向量,它的工作原理是通過當前幀的兩個參考幀,並且找到參考幀的對應參考幀獲得一個運動軌跡,將運動軌跡投影到當前來幀獲得兩個運動向量。當物體是線性運動時,這兩個運動向量將能很好預測到物體的運動軌跡,並獲得更精準的預測,從而幫我們獲得更好的壓縮效果。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

在我們有了這些運動向量之後,我們還需要傳輸它們。而在現有視訊標準中,傳輸運動向量已經佔據了很大的比例。所以我們 AV1 中採取了一種叫做動態運動向量索引的方法,它不直接傳輸運動向量的具體座標值,而是傳輸它在運動列表中的序號,然後通過查詢得知所用的運動向量。運動向量通過運動場投影的方式獲得並加入到運動列表中。我們通過運動估計的測算將運動列表的向量值進行排序,再通過編碼器選擇對好的序號傳輸給解碼器。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

現在的視訊壓縮標準都支援雙向預測,當我們有了兩個參考幀之後如何把它們融合在一起生成預測塊是值得探討的問題。AV1 在這個方面支援了多種不同的方式來生成預測塊,包括平均值運動補償、加權運動補償、楔形分割預測等。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

運動塊補償早在 H.263 時代就被提出,在這裡被 AV1 採用。它的原理是利用平滑濾波的方式將兩個運動補償塊重疊在一起,特點是能夠消除運動的不連續性帶來的影響,以此提高預測準確率。雙向預測中,我們可以通過調整兩個預測快的權重來達到生成不同預測快的目的。AV1 除了支援平均運動補償,還會根據參考幀的距離來加權生成預測塊,特點是當一個參考幀距離現在幀非常近的時候它的預測準確度可能更會高,於是我們給予它更高的權重,當另一個參考幀距離比較遠的時候我們會給予遠處的參考幀一個更低的權重,權重並不直接通過位元流傳輸,會通過傳輸序號的方式在預設定的表格裡查詢對應的權重。

AV1 還支援楔形分割預測,可以彌補方塊運動補償中無法準確模擬物體邊界的缺點。楔形分割已經作為查表預存在編解碼器中,通過編碼器選擇合適的最佳的楔形分割方式傳輸位元流來告知解碼器。

方塊的運動補償有一個很大的問題,它無法模擬實際運動中的大量的捲曲和變換。AV1 採用了基於仿射變換的方塊補償來解決這個問題。AV1 支援從幀到幀的全域性變換,也支援塊到塊的區域性變換。

在變換處理方面,AV1 除了支援傳統的 DCT,還支援 ADST、fADST、IDT ,由於他們都是二維可分割的,所以 AV1 共支援16種組合。同時,AV1還支援多種尺寸的變換快,最大為64x64,最小為4x4,還支援長方形的變換塊尺寸。AV1 支援 DCT 是因為,它對自然訊號具有近似最優解的壓縮效果,而當殘差訊號為單調變化時,那麼 ADST 和反向 ADST 會有很好的壓縮效果。全等變換對於視訊是階躍變換時,會有很好的壓縮效果。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

相比 VP9,AV1 增加了很多變換尺寸和變換型別,這使得它的搜尋空間大幅增加,編解碼複雜度也有所提升。

在量化方面,AV1 在 VP9 的基礎上增加了幾個新的工具,包括 Delta-q 和 Quantization matrix 等。這些工具使得 AV1 的量化有了更大的靈活性,它的特殊的使用場景下具有很好的使用效果,比如使用引數矩陣能夠提升主觀觀測的質量。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

在熵編碼方面,AV1 使用了多符號算數編碼,能有較高的吞吐量,具備快速概率模型自適應的特點。

在視訊壓縮技術中,對變換後的係數矩陣的壓縮和傳輸將佔位元流的絕大部分,甚至超過50%,AV1 裡針對這個變換矩陣的傳輸使用了分層編碼的方法,分層編碼將使用兩次掃描對當前塊的矩陣進行壓縮,第一次掃描將會編碼係數的絕對值,第二次編碼將會編碼係數的符號。讓我們用一個例子來說明分層編碼的過程。如下圖所示,左側代表當前的係數矩陣和掃描的順序,第一行表示第一次編碼,第一次編碼從終止位置開始,逆掃描方向逐漸走向起始位置,深黃色的塊表示當前的畫素值,淺黃色表示它能用到的周圍的數值資訊,第二行表示第二次編碼從起始位置開始一直到終止位置,第一次編碼只編碼係數的絕對值,第二次編碼將編碼係數的符號。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

環內濾波是目前視訊標準的必要組成部分。AV1 除了有傳統的去區塊濾波器,還增加了新工具,比如約束方向增強濾波器(CDEF),還有幀超解析度重建、環內重建濾波器,以及電影顆粒膠片效果合成器。

AV1 的去區塊濾波器對 Y、U、V 三個訊號通道分別採用不同的濾波強度。對 Y 通道,水平濾波和垂直濾波採用不同的濾波強度。這個設計為去區塊濾波增加了更多可優化的空間。

約束方向增強濾波器(CDEF),應用在去區塊濾波之後,對每一個8x8的塊估計物體的方向,並沿著物體方向採用增強濾波。它能保留物體邊緣的清晰度,提升重建影象的質量。

幀超解析度重建,應用在 CDEF 之後。它首先將影象沿著水平方向降取樣,只對低解析度影象進行編碼,在解碼器升取樣把低分率影象還原為原解析度。這個方法顯著提升了低位元速率下的編解碼的主觀觀測質量。

環內重建濾波器,是另一個重要的增強影象質量的後期處理方法。它包含了兩種濾波器。編碼器從兩者中選擇其一。Wiener 濾波器採用可分離的對稱設計。自導向投影濾波器使用兩個重建訊號的線性組合來近似真實訊號。編碼器通過比較濾波結果,選擇合適的引數,並傳輸給解碼器。

電影膠片顆粒效果合成,是針對高質量視訊而設計的一個工具。電影膠片的顆粒效果,很難用傳統的視訊壓縮方法保留。AV1 將顆粒效果合成作為後期處理的步驟,對顆粒效果單獨處理。它的工作原理是將電影膠片顆粒效果在編碼前從原視訊中分離出來。分離後的影象進行普通編解碼,而顆粒效果在最後與解碼後的影象合成為最終的輸出視訊。

三、AV1 的壓縮效率對比

我們對比了 AV1 與 VP9 和 HEVC,嚴謹地講,我們對比的是這幾種編碼標準所使用的參考軟體實現,AV1 使用的參考軟體實現是 Libaom,VP9使用的是 Libvpx,HEVC 使用的是 x265。我們的測試環境是 AWCY,它是一個公開的測試集,包含了30多個從360p 到1080p 的測試視訊檔案,測試條件固定 QP60幀。在這樣的測試環境下,我們可以看到 Libaom 比 Libvpx 約有30%的壓縮效率提升,比 x265 有27%的效率提升。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

Facebook 也在他們實際應用場景中,對比測試了 AV1、VP9 和 H.264。AV1 的效率比 H.264 提升了 50%,比 VP9 提升了30%。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

莫斯科國立大學每年也會進行編碼器的效果測試,在他們的測試結果中,AV1 取得了最佳的壓縮效果,明顯超越了 H.264、H.265 和 VP9。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

我們都知道,現在的視訊壓縮標準用更高的編解碼複雜度換取視訊壓縮效率的提升,當然實際應用中我們不可能無限制提高編解碼複雜度,那平衡點在哪裡呢?對於視訊點播的公司而言 Netflix 給出了他們的回答。他們認為 AV1 的編解碼複雜度,如果能控制在 VP9 的 4-10 倍,就可以應用於他們的產品中。我們 AV1 的複雜度是多少呢?截止今年8月初,我們對比了 AV1 與 VP9 在速度 0 到速度 3 的編碼複雜度。先解釋一下,速度 0 表示壓縮效率最高,但速度最慢,速度 3 反之。相比於 VP9,AV1 在速度0是 VP9的70倍,在速度3則已經降低到10倍以內。AOM 軟體開發組正在進行AV1編解碼的優化,這個數值也在不斷下降。

Google 視訊壓縮核心演算法組工程師:詳解 AV1    編碼演算法

四、AV1的下一步演進

AV1 當前的重要目標是編解碼的優化,在編碼端需要更多的 SIMD 程式碼支援,還要重新設計編碼,尤其是降低在硬體端的複雜度。在編碼方面,我們需要加快編碼速度,我們需要更高效的分割演算法,更優的濾波器型別、編碼型別、運動估計演算法等。

在 AV1 中,我們使用了很多機器學習演算法,它使得 AV1 能做出很多快速的決定,比如對搜尋方塊劃分的型別。我們相信在接下來的工作中,更好的機器學習演算法會有助於 AV1 視訊編解碼的加速。我們在未來還將繼續嘗試其它新的視訊壓縮工具,比如光流的演算法、基於機器學習的預測與合成的演算法、基於機器學習的變換方法等。相信在 AOM 的框架下,以及各個成員與整個生態系統的支援下,AV1 在不久的將來會獲得更廣泛的應用。

現場提問

觀眾:AV1什麼時候可以讓所有人使用上?
陳誠:目前 AV1 處於第二階段,我們已經完成了標準的定稿以及瀏覽器軟體解碼的支援。未來一兩年內會完成與硬體相關的設計與優化,預計在2020年,AOM 組織內的成員將都支援 AV1,那時任何人都可以使用到它。
觀眾:我們很關心 AV1的效能問題。跟其它編碼器相比,在同樣的質量條件下,壓縮同樣的內容能節省多少位元速率。剛剛您已經提供了一些比較詳細的資料。我有一個疑問,印象中,在 Facebook 的測試中,與 H.264進行對比,AV1能節省一半的位元速率,我們知道 HEVC 和 H.264 的比較也是提升了一半。從這個角度講,AV1 和 H.265壓縮比應該是相當的。但從其它報告來看,又顯示 AV1 略勝於 H.265,但是資料略有浮動,有的是20%,有的是40%。您能提供一個比較權威的對比解讀麼?AV1到底比 H.265 強多少?
陳誠:我的說法僅是個人意見,無法作為官方解釋來參考。不同的測試環境會導致測試效果的不同。我認為有兩方面的差異導致了結果不同。首先是所使用的測試集,其次就是測試條件不同。關於測試條件,AV1 的研發目前主要為網際網路公司的視訊點播提供壓縮演算法。以 youtube 和 Netflix 來說,他們是給一個固定的碼流來進行壓縮,而AV1與HEVC的對比是基於固定 QP 作為對比條件。AV1 的設計初衷是在一個固定碼流下進行壓縮,並沒有針對固定 QP 進行優化。這就導致了在很多的對比測試中,AV1 看起來並沒有比 HEVC 提升多少。我在解釋是基於 youtube、Netflix 等公司在實際應用環境中的測試結果,他們認為 AV1 已經超過了 H.264、H.265。

歡迎關注「聲網Agora」微信公眾號,回覆“RTC”觀看演講視訊回顧、獲取演講 PPT。


相關文章