Netflix下一代圖像編碼算法AVIF實踐

1992 年誕生的 JPEG 是一種非常成熟且成功的靜態圖像編碼,但它確實不再適應 18 年後的今天,流量費用如此寶貴,在不影響圖像質量的情況下,如果減少每一張圖片的大小是可以節約大量成本的。

本文,Netflix 的技術團隊提到了 JPEG 的幾個後繼者:JPEG 2000、Webp和HEIF(HEIC)。JPEG 2000,未能推廣開;Webp 是 Google 主推的格式,目前用的確實挺多,但現在一般用它作爲 PNG 的代替品;HEVC 是 AVC 的後繼者,編碼效率出色, 但是有個問題就是它的專利費用。

在這一背景下,Netflix 決定採用 AVIF。事實上,從 Windows 10 Insider build 18305 開始,Microsoft 已開始添加對 AVIF 圖像格式的支持。Microsoft 並不是唯一一個致力於添加對 AVIF 圖像格式支持的組織。VLC 早已引入了支持,Mozilla 也計劃在未來增加支持。

摘要

我們需要一個 JPEG 的替代方案,要求如下:

  • 能夠得到廣泛支持;
  • 具有更高的壓縮效率;
  • 具有更廣泛的特性集。

我們認爲 AV1 圖像文件格式( AV1 Image File Format,AVIF)具備這樣的潛力。使用我們開源的框架,就可以看到 AVIF 的壓縮效率,並與之前的所有圖像編解碼器進行比較。

Netflix 的圖像壓縮

Netflix 的會員可以在智能電視、手機、平板電腦、個人電腦和連接到電視屏幕的流媒體設備上享受 Netflix 的服務。用於瀏覽目錄和提供推薦的用戶界面(User Interface,UI)在所有設備類別都有着豐富的圖像和圖形。下圖是 iOS 上的 Netflix 應用的截圖。

截圖爲撰寫本文時,在 iOS(iPhone 7)上的 Netflix 用戶界面

圖像資源可以是基於標題的靜止幀,也可以是特殊的現場攝影或其組合。資源也可以是來源於影片製作過程中產生的藝術創作。

如上所述,圖像資源通常具有在圖像上合成的漸變、文本和圖像,例如 Netflix 的標誌或其他標題特定的符號,如“The Witcher”電影的徽章。這種特殊處理導致了各種各樣的特徵,而這些特徵並不一定會出現在自然圖像中。硬邊(包括邊緣兩側存在色度差異的邊緣)很常見,需要很好的細節保存,因爲它們通常出現在顯著的位置,並傳遞重要信息。同樣,保留人物面部的細節也是非常重要的。在某些情況下,背景紋理複雜,會表現出廣泛的頻率範圍。

在攝取圖像資源之後,壓縮管道會開始啓動,並準備好要交付給設備的壓縮圖像資源。目標是使壓縮後的圖像看起來儘可能接近原始圖像,同時減少所需的字節數。鑑於用戶界面以圖像爲主的特性,壓縮好這些圖像是至關重要的。而這涉及到色度子採樣( color subsampling)、編解碼器參數和編碼分辨率的正確組合等。

用於各種客戶端設備和用戶界面中各種空間的的壓縮圖像資源是從相應的原始圖像源創建的

讓我們以色度子採樣爲例。基於人類視覺系統對亮度比色度更敏感這一事實,我們選擇了 4:2:0 採樣方式,而不是原來的 4:4:4 採樣方式,將需要進行編碼的樣本數量減半(在所有 3 個色彩平面上計數)。但是,4:2:0 採樣方式可能會在具有顏色過渡的地方出現色滲和鋸齒的現象。下面,我們在 4:4:4 採樣方式的原始源和轉換爲 4:2:0 採樣方式的源之間切換。切換顯示僅僅有色度子採樣引入的損失,甚至在編解碼器進入圖片之前也是如此。

在以 4:4:4 採樣方式的原始源圖像與轉換爲 4:2:0 採樣方式的原始源圖像之間切換。只顯示作品的頂部。讀者可以放大網頁,查看由於 4:2:0 採樣方式而出現的 Netflix 標誌周圍的鋸齒。

然而,在某些源圖像中,由於 4:2:0 採樣方式造成的損失對來人類視覺感知來說並不明顯,那麼,在這種情況下,使用 4:2:0 採樣方式可能是有利的。理想情況下,編解碼器應該能夠支持這兩種子採樣格式。但是,有些編解碼器只支持 4:2:0 採樣方式,如 Webp,下面討論的就是這樣一種流行的編解碼器。

圖像編碼格式概述

JPEG 格式於 1992 年推出,得到了廣泛的應用。它支持各種色度子採樣,包括 4:2:0、4:2:2、4:4:4。JPEG 可以攝取 RGB 數據,並將其轉換爲亮度色度表示,然後再執行有損壓縮。採用離散餘弦變換(discrete cosine transform,DCT)對 8x8 樣本塊進行解相關變換。接下來是量化和熵編碼。然而,JPEG 僅限於 8 位圖像,並且缺乏對 alpha 通道的支持。最新的 JPEG-XT 標準將 JPEG 擴展到更高的位深度,支持 alpha 通道、無損壓縮和更多的向後兼容方式。

基於離散小波變換(discrete wavelet transform,DWT)的 JPEG 2000 格式,在 2000 年作爲 JPEG 格式的後繼格式被引入。它帶來了一系列附加特性,如空間可擴展性、感興趣區域編碼、支持的位深度範圍、靈活的色彩平面數、無損編碼等。隨着運動的擴展,在 2004 年,它被接受爲數字電影的視頻編碼標準

Webp 格式是 Google 在 2010 年左右推出的。Google 爲 Android 設備和 Chrome 瀏覽器帶來了解碼支持,還發布了供開發者添加到其他平臺(如 iOS)上的應用程序的庫。Webp 是基於 VP8 視頻編碼格式的幀內編碼。Webp 並不具備 JPEG 2000 的所有靈活性。但是,它確實支持無損編碼和無損 alpha 通道,因此,在某些情況下 Webp 成爲 PNG 的更高效、更快速的替代方案。

高效視頻編碼(High-Efficiency Video Coding,HEVC)是 H.264 的後繼產品,又名高級視頻編碼(Advanced Video Coding,AVC)格式。HEVC 幀內編碼可以封裝在高效圖像文件格式(High-Efficiency Image File Format,HEIF)。最值得注意的是,Apple 設備用來存儲記錄圖像的正是這種格式

類似的,AV1 圖像文件格式(AV1 Image File Format,AVIF)允許封裝 AV1 幀內編碼內容,從而利用 AV1 相對於前身實現的優異壓縮收益。在下一節中,我們將介紹 AVIF 的一些吸引人的技術特性。

JPEG 委員會正在尋求一種名爲 JPEG XL 的編碼格式,其中包括一些旨在幫助從傳統 JPEG 格式轉換的功能。現有的 JPEG 文件可以無損地轉碼爲 JPEG XL,同時實現文件大小的減小。還包括一個輕量級的轉碼過程,可返回到 JPEG 格式,以便爲只支持舊版 JPEG 的客戶端提供服務。

AVIF 技術特點

儘管現代視頻編解碼器主要是爲了視頻而開發的,但是視頻編解碼器中的幀內編碼工具與圖像壓縮工具並沒有什麼太大的不同。鑑於現代視頻編解碼器的巨大壓縮收益,它們作爲圖像編碼格式還是很有吸引力的。重用現有硬件進行視頻壓縮 / 解壓有潛在的好處。考慮到依賴於操作系統的用戶界面組成的特殊性,以及移動未壓縮圖像像素的架構含義,硬件中的圖像解碼可能並不是一個主要的動力。

在圖像編碼格式方面,動態圖像專家組(Moving Picture Experts Group,MPEG)已將與編解碼器無關的通用圖像容器格式進行了標準化:ISO/IEC 23000-12 標準(又稱 HEIF)。最值得一提的是,HEIF 已經用於存儲 HEVC 編碼的圖像(在其 HEIC 變體中),但也能夠存儲 AVC 編碼的圖像,甚至 JPEG 編碼的圖像。開發媒體聯盟(Alliance for Open Media,AOM)最近對這種格式進行了擴展,以指定 AVIF 格式的 AV1 編碼圖像的存儲。基本的 HEIF 格式提供了圖像格式應有的典型特性,例如:支持任何圖像編解碼器,能夠使用有損或無損模式進行壓縮,支持不同的子採樣和位深度等。此外,該格式還允許存儲一系列動畫幀(爲動畫 GIF 提供了一種期待已久的高效替代方案),並能夠制定 alpha 通道(這在用戶界面中非常有用)。由於 HEIF 格式借鑑了下一代視頻壓縮的技術,因此該格式允許保留元數據,如色彩色域和高動態範圍(high dynamic range,HDR)等信息。

圖像壓縮比較框架

我們開源了基於 Docker 的框架,用於比較各種圖像編解碼器。主要特點包括:

  1. 使用 Python 3 編碼編排(使用並行化)和見解生成。
  2. 易於重現的結果。
  3. 易於控制的目標質量範圍。

由於該框架允許用戶爲目標編解碼器指定目標質量(使用某種指標),並將這些結果存儲在本地數據庫中,人們可以很容易地利用 Bjontegaard-Delta(BD)碼率來比較不同的編解碼器,因爲目標點可以限制在一個有用或有意義的質量範圍內,而不是盲目掃過編碼器參數範圍(如質量因素)與固定的參數值並落在任意質量點上。

下面是一個例子,例子中的這些調用會生成壓縮圖像,以供選擇符合指定 SSIM 和 VWAF 值的編解碼器,並在目標質量方面具有理想的容差:

main(metric='ssim'、 target_arr=[0.92、 0.95、 0.97、 0.99]、 target_tol=0.005、 db_file_name='encoding_results_ssim.db')
main(metric='vmaf'、 target_arr=[75、 80、 85、 90、 95]、 target_tol=0.5、 db_file_name='encoding_results_vmaf.db')

對於後續比較中涉及的各種編解碼器和配置,讀者可以查看共享倉庫中的實際命令行。我們嘗試從每個編解碼器 / 配置中獲得最佳的壓縮效率。讀者可以自由地嘗試對框架內的編碼命令進行更改。此外,與收集以下結果時使用的版本相比,各個軟件實現的新版本可能已經發布。例如,收集以下結果時,與在 GitHub 上使用的框架快照中的版本相比,Kakadu 演示應用程序的軟件更新版本現在是可用的。

可視化示例

在這一節中,我們通過比較 JPEG 和最新技術的可視化示例,來欣賞壓縮社區在過去 30 年來所做的工作。

下圖所示的編碼圖像是說明性質的,意在比較不同目標比特率下的視覺質量。請注意,說明性編碼的質量並不能代表 Netflix 在實際服務中使用的流媒體圖像資源所使用的高質量條形圖,並且其本質上純粹是教育性質的。

下圖顯示的是來自 Kodak 數據集的原始源圖像和相應的結果,其中,JPEG 444@20429 字節AVIF 444@19788 字節。JPEG 編碼在天空、池塘以及屋頂上顯示出了非常明顯的塊狀僞影現象。AVIF 編碼要好得多,雖然屋頂上還有一些模糊和紋理損失的現象,但塊狀僞影現象更少。考慮到壓縮係數約爲 59x(原始圖像的尺寸爲 768x512,因此需要 768x512x3 字節,而壓縮後的圖像爲 20k 字節),這樣的結果仍然還是很了不起的。

Kodak 數據集中的原始圖像

JPEG 444@20419 字節

AVIF 444@19788 字節

對於同一個源,下圖顯示的是 JPEG 444@40276 字節AVIF 444@39819 字節 的比較。JPEG 編碼在天空中仍然有可見的塊狀僞影,以及屋頂邊緣周圍和幾個位置出現了色滲現象。但是,AVIF 圖像此時已經可以與原始圖像相當,壓縮係數爲 29x

JPEG 444@40276 字節

AVIF 444@39819 字節

下圖顯示的是來自 Kodak 數據集的另一幅原始源圖像,以及相應的結果,其中,JPEG 444@13929 字節AVIF 444@4176 字節。JPEG 編碼在大多數邊緣(尤其是傾斜的邊緣)周圍顯示出了塊狀僞影,以及出現了顏色失真現象。儘管 AVIF 編碼的大小是 JPEG 編碼的三分之一,但它看起來“更乾淨”。它並不是原版的完美再現,但壓縮係數爲 282x,這一點是值得稱讚的。

Kodak 數據集的另一幅原始源圖像

JPEG 444@13939 字節

AVIF 444@4176 字節

下圖顯示的是同一圖像的結果,但比特預算(bit-budget)稍高一些:JPEG 444@19787 字節AVIF 444@20120 字節。JPEG 編碼仍然在傾斜邊緣周圍出現塊狀僞影,而 AVIF 編碼看起來與原始源圖像幾乎相同。

JPEG 444@19787 字節

AVIF 444@20120 字節

下圖顯示的是來自 Netflix(內部)1142x1600 分辨率“Boxshot-1”數據集的原始圖像,然後是 JPEG 444@69445 字節AVIF 444@40811 字節。在 JPEG 編碼中可以看到嚴重的帶狀和塊狀僞影以及色彩失真現象。但在 AVIF 編碼中,情況就沒那麼嚴重了,實際上,它小了 29kB。

Netflix(內部)Boxshots-1 數據集的原始源圖像

JPEG 444@69445 字節

AVIF 444@40811 字節

下圖顯示的是稍微增加比特預算的同一圖像的結果。JPEG 444@80101 字節AVIF 444@85162 字節。在 JPEG 編碼中仍然可以看到出現了帶狀和塊狀僞影,而 AVIF 編碼看起來非常接近於原始源圖像。

JPEG 444@80101 字節

AVIF 444@85162 字節

總體結果

下面顯示的是公共數據集和 Netflix 內部數據集的結果。所使用的參考編解碼器是來自 JPEG-XT 參考軟件的 JPEG,使用 JPEG 標準的附件 K 中定義的標準量化矩陣。以下是以 BD 碼率爲基準測試和報告的編解碼器和 / 或配置。

這些實驗中的編碼分辨率與源分辨率相同。對於 4:2:0 採樣方式,在 4:2:0 子採樣域計算質量度量。同樣,對於 4:4:4 採樣方式,在 4:4:4 子採樣域中計算質量度量。除了與各種質量度量(如 SSIMMS-SSIMVIFPSNR)相關的 BD 碼率外,我們還是用 SSIM 作爲度量來顯示碼率 - 質量曲線圖。

Kodak 數據集;24 幅圖像;768x512 分辨率

我們已經上傳了 PNG 格式的源圖像,以方便參考。此數據集的版權歸 Kodak 所有。

給定一個質量度量,對於每個圖像,我們考慮兩條獨立的碼率 - 質量曲線。一條曲線與基線(JPEG)相關,另一條曲線與目標編解碼器相關。我們將兩者進行比較,並計算 BD 碼率,它可以解釋爲在考慮的質量區域內相同質量的平均百分率降低。負值意味着碼率降低,因此與基線相比更好。作爲最後一步,我們報告的數據集中所有圖像的 BD 碼率的算數平均值。我們還在下表中突出顯示了最佳性能。

CLIC 數據集;303 幅圖像;2048x1320 分辨率

我們從公開的數據集中選擇了一個圖像子集,作爲與 CVPR 聯合舉辦的機器學習圖像壓縮挑戰賽(CLIC) 的一部分。我們已經上傳了我們選定的 303 幅 PNG 格式的源圖像,以方便參考。這些源圖像版權歸 CLIC 所有。

廣告牌數據集(Netflix 內部);223 幅圖像;2048x1152 分辨率

廣告牌圖像通常比縮略圖樣的 Boxshot 圖像佔據更大的畫布,並且通常是橫幅的。左右兩側的任一側都可以覆蓋文本或圖形,而另一側則具有突出的字符、風景或藝術照。下面是一個例子。廣告牌源圖像是 Netflix 內部的,因此不屬於公共數據集。

廣告牌數據集中的原始源圖像示例


Boxshots-1 數據集(Netflix 內部),100 幅圖像,1142x1600 分辨率

與廣告牌圖像不同,Boxshot 圖像是垂直的,通常,表示不同標題的 Boxshot 圖像在用戶界面中並排顯示。該數據集的示例在上面的可視化示例小節中展示。Boxshots-1 源圖像是 Netflix 內部的,因此不屬於公共數據集。

Boxshots-2 數據集(Netflix 內部),100 幅圖像,571x800 分辨率

Boxshots-2 數據集也有垂直的 Boxshot 圖像,但分辨率較低。Boxshots-2 源圖像是 Netflix 內部的,因此不屬於公共數據集。

在這一點上,謹慎的做法是在這裏討論不使用 VMAF 作爲質量度量。在之前的工作中,我們已經表明,對於類似於 JPEG 的失真和類似於 Boxshot 和廣告牌的數據集,VMAF 與感知質量有很高的相關性。然而,到目前爲止,VMAF 是一種經過訓練和開發的度量,用於判斷編碼視頻而非靜態圖像。在我們的測試中,與圖像編解碼器範圍相關的失真範圍比 VMAF 開發過程中考慮的範圍更廣,因此,對於這些編解碼器來說,它可能不是圖像質量的準確度量。此外,現在的 VMAF 模型並非爲了捕獲色度僞影而設計的,因此除了其他色度僞影之外,無法區分 4:2:0 和 4:4:4 的採樣方式(這也適用於我們使用的其他一些測量度量,但由於缺乏替代方法,我們傾向於使用經過最充分測試和記錄的圖像質量度量)。這並不是說 VMAF 在圖像質量上是非常不準確的,而是說,我們不會在評估圖像壓縮算法時使用它,因爲此時有如此廣泛多樣的編解碼器。我們即將進行一些激動人心的工作,以提高 VMAF 的準確性,包括各種編解碼器、分辨率(包括樂譜中的色度通道)。話雖如此,倉庫中的代碼可以計算 VMAF,我們鼓勵讀者嘗試一下,看看 AVIF 是否像本文那樣在 VMAF 方面表現出色。

在很寬泛的質量範圍內,峯值信噪比(PSNR)與感知質量的相關性並不高。然而,如果編碼是以高峯值信噪比爲目標進行的,那麼就會有一個超支比特,但可以肯定的是,高峯值信噪比分數意味着接近於原始值。通過感知驅動的度量標準,我們有時會在很少的情況下看到失敗的表現,在這種情況下,分數高得不合理,但缺乏視覺質量。

關於子採樣的有趣觀察

除了上述質量計算之外,我們還有以下觀察結果,揭示了現代編解碼器中一個令人鼓舞的趨勢。在執行了 4:2:0 採樣方式的編碼之後,讓我們假設我們對圖像進行解碼,將其向上轉換爲 4:4:4 採樣方式,然後通過與 4:4:4 格式的原始源進行比較來計算各種度量。我們將此配置稱爲“444u”,以區別上述“編碼 - 子採樣”和“質量 - 計算 - 子採樣”匹配的情況。在選擇的度量中,PSNR_AVG 是一個考慮了所有 3 個通道(1 個亮度和 2 個色度)的度量指標。對於像 JPEG 這樣的舊式編解碼器,與以 4:2:0 採樣方式進行編碼相比,在以 4:4:4 採樣方式進行編碼時,比特預算將會在更多的採樣中呈稀疏分佈。這表明,與 4:2:0 採樣方式相比,4:4:4 採樣方式進行 JPEG 編碼的 PSNR_AVG 較差,如下圖所示。但是,在給定一個碼率目標的情況下,使用諸如 HEVC 和 AVIF 這樣的現代編解碼器,最好的方法就是在廣泛的比特率範圍內對 4:4:4 採樣方式進行編碼。

使用現代編解碼器(如以 PSNR_AVG 爲度量判斷的 AVIF)進行 4:4:4 採樣方式的編碼更好。

我們發現,使用現代編解碼器,在整個“實用”碼率區域內,當以 4:4:4 採樣方式進行編碼時,PSNR_AVG 比以 4:2:0 採樣方式進行編碼時更高,即使對於其他更實用的數據集,如 Boxshots-1 也是如此。有趣的是,在 JPEG 中,我們看到了一個交叉,即,在超過一定的碼率之後,以 4:4:4 採樣方式進行編碼纔會開始變得更有效率。這種交叉類似於在多個空間分辨率上編碼時交叉的碼率 - 質量曲線。下圖所示,是 Boxshots-1 數據集中兩個不同源圖像的碼率 - 質量曲線,比較了 JPEG 和 AVIF 在 444u 和 444 配置下的碼率 - 質量曲線。

用現代編解碼器(如 AVIF)用 PSNR_AVG 作爲度量標準,以 4:4:4 採樣方式進行編碼更好。

用現代編解碼器(如 AVIF)用 PSNR_AVG 作爲度量標準,以 4:4:4 採樣方式進行編碼更好。

AVIF 支持與下一步

雖然 AVIF 提供了卓越的壓縮效率,但它仍處於早期部署階段。有各種各樣的工具可以生成和使用 AVIF 圖像。值得注意的是,開放媒體聯盟正在開發一個名爲 libavif 的開源庫,可以對 AVIF 圖像進行編碼和解碼。這個庫的目標是簡化來自圖像社區中軟件的集成。例如,在各種瀏覽器(例如 Google Chrome)中已經開始了這種集成,我們預計,在不久的將來會看到對 AVIF 圖像的廣泛支持。大量的工作還在進行中,特別是來自 dav1d 團隊的工作,該團隊使 AVIF 圖像解碼儘可能快,包括 10 位圖像。可以想象,在我們最近宣佈在 Android 系統上測試 AV1 視頻之後,我們將很快會在 Android 系統上測試 AVIF 圖像

上面使用的數據集具有標準的動態範圍(standard dynamic range,SDR)8 位圖像。在 Netflix 中,我們也在爲用戶界面開發 HDR 圖像,並計劃使用 AVIF 對這些 HDR 圖像資源進行編碼。這是我們之前工作的延續,我們實驗了 JPEG 2000 作爲 HDR 圖像的壓縮格式,我們期待 AVIF 可以提供卓越的壓縮收益。

致謝

我們要感謝 Marjan Parsa、 Pierre Lemieux、 Zhi Li、 Christos Bampis、 Andrey Norkin、 Hunter Ford、 Igor Okulist、 Joe Drago、 Benbuck Nason、 Yuji Mano、 Adam Rofer 和 Jeff Watts 的貢獻和合作。

原文鏈接:

https://netflixtechblog.com/avif-for-next-generation-image-coding-b1d75675fe4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章