259
技術社區[雲棲]
ICIP2017報告係列之一——Netflix/Google/Youtbe都在做什麼:畫質、動態優化、新標準、深度學習壓縮、VR
ICIP(IEEE International Conference on Image Processing)是由IEEE主辦的老牌圖像處理大會,今年在北京舉行。
從圖像類頂會的角度,CVPR、ICCV等人工智能類的會議從原本的很受關注進化到現在的極受關注。相比之下,傳統的圖像處理大會如ICIP、ICME、ICASSP等的關注度和引用率都有所降低,不過規模依然夠大,也作為某些細分領域的大本營,依然能夠反映出圖像技術研究的整體趨勢。
本係列至少分三篇,第一篇分享工業界workshop的內容也即本篇,第二篇是分析圖像處理尤其是傳統圖像處理技術在深度學習的潮流之下的技術趨勢,第三篇是針對一些有趣的paper內容進行分享。
本篇分6小部分,包括Netflix的質量評估、編碼器動態優化、編碼器測評3小塊、Google的AV1編碼標準、基於神經網絡的圖像壓縮兩小塊、Youtube的VR。
一、Netflix的Workshop
Netflix在ICIP上講了三個工作,分別是質量評估標準VMAF、編碼器動態優化、開源編碼器評測。
1.1 質量評估標準VMAF
VMAF是Netflix自己提出的視頻質量評估標準,現在是開源的並放在github上了。
背景
視頻和圖像的質量評估一直是非常困難且熱點的問題,難就難在這些基於公式生成的客觀質量評估方式很難準確地匹配人眼的主觀感受。最常用也最古老的評估視頻圖像質量的指標是PSNR(峰值信噪比),它將經過劣化之後的單幅圖像逐像素地與劣化前的圖像進行比較,計算這兩幅圖的差異作為劣化程度的衡量標準,以此來表示圖像的質量。在計算視頻的質量時,將每一幀作為一幅獨立圖片進行計算。PSNR計算簡便,結果湊合能用,但至少有三個非常大的直接問題:其一是它隻能衡量其與參考圖的差異也即相對質量,不能計算絕對質量;其二是它孤立地計算每一幀,無法利用視頻中相鄰幀的相關性和運動信息;其三是PSNR值的計算法過於straight-forward,結果跟人眼的主觀感受並不總能匹配。
2004年提出的SSIM是相對PSNR的一個重要進步,它從計算孤立的每一個像素進化到利用圖像結構化信息,得到了更接近人眼主觀感受的指標。但它仍然沒有脫出有參考質量評估的範疇,和PSNR一樣隻能計算相對質量、無法利用視頻的時域信息。
之前的工業界用會更工程化的方法。例如老牌檢測儀器設備商Tektronics出品的質量分析儀PQA(Picture Quality Analyzer)就用人眼視覺模型中的各種效應如亮光遮蔽效應、運動不敏感效應等進行建模,用handcraft的方法擬合公式,來逼近ground truth的實測MOS、DMOS、JND等指標數據。這種方法對內容分析的依賴更強,也用到了視頻的運動信息,但依舊需要參考幀。
所以從上麵可以看出,總是需要參考幀這種反人類的前提一直是質量評估中非常明顯的痛點,半參考和無參考質量評估也一直都是熱點研究課題,不過若說結果如何,多年來的研究成果總結起來隻有4個字:不提也罷。
而且很遺憾地,VMAF也仍然是一種全參考質量評估算法。
VMAF原理
VMAF是Video Multimethod Assessment Fusion的縮寫,看名字這就是一種多方法融合的算法,主要使用了3種指標:visual quality fidelity(VIF)、detail loss measure(DLM)、temporal information(TI)。其中VIF和DLM是空間域的也即一幀畫麵之內的特征,TI是時間域的也即多幀畫麵之間相關性的特征。這些特性之間融合計算總分的過程使用了訓練好的SVM來預測。
所以總結下來VMAF的整體流程如下圖:
先在每幀中逐像素地計算VIF、DLM、TI,以及再在全幀的範圍內做pooling得到全幀指標,再用訓練好的SVM做融合,然後得到每一幀的分數。再在時域上做pooling得到全序列的分數。總計算複雜度是PSNR的約10倍,也即是稍大於SSIM,算是比較低,完全可實時,作為附加的額外計算量也用起來不太心疼的程度。
VMAF目前最大的局限性在於其結果沒有通用性,目前的VMAF隻適用於在明亮的室內通過電視觀看1080p視頻時的質量評估。不過手機上的模型也在做了,而且關於手機上的主觀質量,netflix秀了一個很有意思的曲線:
“同一個視頻,在手機上看顯得更清楚”這個結論似乎理所當然,但上線這個曲線回答了“多清楚的視頻在手機上就足夠清楚了”的問題。對於我們評估小屏上視頻質量對於用戶感受的影響,指出了一個可能的評估思路。
分析
個人覺得,VMAF最有意義的地方在於其多特征融合+學習的計算框架開源之後的開放性和可擴展性。我直接想到的我們能自主做VMAF的算法提升的方向至少有以下3點:
(1)VMAF的開源代碼中包括Netflix訓練好的一些參數,我們後續可以基於我們自己的視頻內容訓練我們自己的參數。無論是國產古裝劇品味獨特的後期風格,還是某些衛視浮誇的舞美,還是UGC內容的特點,甚至淘寶直播的畫麵特點等等,跟netflix的場景都不一樣;使用我們自己的訓練集,訓練出符合我們自己的直接業務需求的參數集,供我們自己的業務使用。
(2)我們可以提出自己想用的新的時域或空域特征,把它融入VMAF的指標中。在提了新的指標之後,也不需要考慮專門的公式跟原有的特征做融合,隻需要繼續放在SVM的框架中,由原來的數據集來重新訓練一下SVM就行了。
(3)對於4K、HDR、60P,甚至3D、VR等含有高指標或新特性的視頻,如果VMAF能一直保持良好勢頭的話可能本身就會逐漸支持,如果不支持的話我們也可以自己訓練數據來做,如果有標注好的數據集就更好了。
如果說上麵說的對算法進行改造的事情還是顯得稍微有點遠的話,如果我們信任VMAF指標本身,優酷眼前可以幹的質量、帶寬整治的事情包括:
(1)基於VMAF略微修正當前選擇的各檔位碼率、分辨率組合的合理性。
(2)把VMAF做進我們自己的編碼器,實時評價編碼質量,取代原有的PSNR和SSIM指標。甚至,從編碼器算法優化的角度,把VMAF指標作為模式選擇中率失真優化(RDO)的目標函數,修改RDO模型,使模式選擇的結果更能提高VMAF指標,而非使用傳統的基於MSE的RDO模型來提高PSNR指標。
1.2 編碼算法的動態優化
DO方法及結果
動態優化的動機是為了給不同的視頻賦予不同的參數,以達到最優的效果。
其中“不同的視頻”的概念包括但不限於:不同的視頻類別,同一個視頻裏的不同段,netflix號稱自己的視頻內容中每一個大分類現在都應用著完全不一樣的編碼參數;“不同的參數”的概念包括但不限於:IBP幀類型、量化參數QP、分辨率。
用的方法框架倒是很土,就是窮舉的trellis方法——然後很自然地,工作的難度就在於如何在trellis的基礎框架上用算法手段和工程手段做簡化了。
Trellis分很多個維度,第一個是trellis QP,即每一幀窮舉地嚐試所有的QP。第二個維度是分辨率,即每一幀嚐試用不同的分辨率進行編碼,然後在碼率也即QP的約束之下,尋找在某一個特定的碼率條件下最優的分辨率是什麼。會上隻分享了這兩個維度,但我感覺應該還有更多的維度,不然後麵的結果有點過於好了。整體trellis的框架如下:
哪怕隻trellis QP和分辨率,每幀都能獨立變換的話45分鍾的電視劇就是45min * 60sec * 25fps * 51QP * 7resolution幀的窮舉編碼——這有點太過分了吧!確實,所以稍微做一個簡化,別每幀都獨立地試了,按鏡頭做分段,假設每一個鏡頭裏麵的內容是一致的,也就應該保持參數的一致,那45分鍾的電視劇按300個鏡頭算,窮舉次數就是300鏡頭*51QP*7resolution,好像相對靠譜一點點了……
Netflix展示的應用的動態優化之後的結果是這樣的:
對於264和265,相同質量下都節省了1/3左右的碼率。簡直給跪了。另外值得注意的是用VMAF和PSNR作為評價指標時,碼率節省的比例基本一致,或許說明我們如果隻是想評價編碼器水平的話,PSNR就挺好?
分析
從做DO的思路來看,netflix希望能從更整體的角度來考慮質量和成本:
(1)動態地在不同板塊間調整質量和成本。比如室內訪談類節目畫麵靜態,易於編碼,用較小的碼率即能達到比較好的畫質;而體育類節目畫麵大幅運動,難於編碼,需要較大的碼率才能達到比較好的畫質;所以如果這兩類節目的碼率都設置成一樣的話,就會造成訪談類節目對帶寬有浪費、而體育類節目碼率仍不夠高的情況。所以合理的方式是對不同的節目類別應用不同的尤其是帶寬和碼率相關的參數,類似於廣電常用的在固定帶寬信道中傳輸多路實時流節目的統計複用(Statistical Multiplexing)方法的離線版本。
(2)不片麵地追求分辨率,而以實際感受畫質為優先。Netflix無論使用VMAF還是PSNR評價畫質時,都是用scale的方法進行計算,也即始終不對分辨率有預先假設。更高的分辨率雖然帶來了提高了該分辨率下能達到的畫質的上限,但在帶寬限製在較低水平時對編碼器本身也是嚴重的負擔。10Mbps的1080p肯定比10Mbps的360p更清晰,但500kbps的1080p的馬賽克會重到不能忍,而500kbps的360p則看起來舒服得多,所以對於500kbps的帶寬約束而言,500kbps是比1080p更清晰的(不配圖了,應該可以想象出吧?)。所以netflix的動態優化將分辨率作為參數之一,帶寬作為約束條件,優化目標函數則被設定為scale之後的畫質最優,是很先進的思路,值得我們學習。
(3)最最重要的是,以上這些調整規則不是人為基於經驗指定的,而是基於一套完整的算法和機製動態計算出的最優解。人的經驗有窮盡、有滯後,而算法和公式則會不斷完善,從機製上保證了以後再冒出來什麼新的內容類型,都能第一時間放到這個算法公式裏獲得最優化值。
1.3 開源編碼器評測
演講者一上來就吐槽說這個工作的最主要意義是監督本團隊視頻算法工程師的成果產出……好吧,所謂作繭自縛也不過如此。
netflix自己的評測也是每年都會做,做得比近兩年炒得火熱的莫斯科大學的視頻編碼器競賽要簡單一些,就比了4個東西,264的最主要開源庫x264、265的最主要開源庫x265、VP9的唯一開源庫libvpx、AV1的唯一開源庫aomenc。AV1是互聯網標準化組織AOM剛推出的新一代視頻編碼標準,Google的分享裏說得多,我在下麵再詳細說,總之就是個免專利費的小眾編碼標準啦。(VP9:那我呢那我呢?“乖,說你小眾都抬舉了好嗎?”)參數配置方麵,都是最慢參數,充分釋放算法庫自身能力的。
值得看的結果就下麵這一頁(還有一頁VMAF結果的,數據非常像):
X264被當靶子,基本結論就是AV1 > VP9 > x265 >> x264——跟原本大家以為的一樣。分辨率越大,x265、VP9、AV1相比x264的優勢就越大——跟原本大家以為的一樣。不過,哪怕在最小的270p上,x265也能獲得30%的碼率節省,——比我原本以為的要大哎,抓緊優酷全站上265吧……
1.4 Netflix總結
用了以上種種技術以後,netflix讓手機觀看視頻的最常用帶寬從600kbps降到270kbps,並維持了大致相當的畫質。嗯,大讚,撒花。
捎帶一句,Netflix的Video Algorithm團隊一共9個人,其中有個好萌好萌的深膚色妹子,感興趣的可以釘釘我要照片……
再捎帶一句,Netflix目前覆蓋全球的區域如下圖中紅色部分……不過最大的那塊白似乎也快被友商解決了?
二、Google的Workshop
Google講得幹貨滿滿啊,幾乎要路人轉粉!Google講的兩個題目,一個是AV1視頻編碼標準,一個是用神經網絡做圖像壓縮的綜述。
2.1 AV1視頻編碼標準
背景
我們最常用的視頻編碼標準從MPEG-2算起,到H.264、H.265,都是要付專利費的,當然主要的壓力都施加給了終端芯片廠商。為了應對專利風險,Google做過自己的視頻編碼標準VP8、VP9,其中VP8放進Webrtc裏形成了一定的使用量;中國也早在2004年成立了自己的標準組織AVS並推出了AVS、AVS+、AVS2三代視頻編碼標準,其中AVS+這一代還成功地在廣電行業實現了產業化,做了整條產業鏈的產品,形成了幾十億級別的市場規模。但從總體規模上看這些非H.26x的標準還都是在敲邊鼓,大家基本默認還都在用264和265。
但從H.265開始,專利條款愈發苛刻、價格越來越高,大家就越來越坐不住了。Google也感覺自己勢單力薄,於是召集一票大佬Amazon、ARM、Cisco、Intel、Microsoft、Mozilla、Netflix、NVidia等等一起成立了開放媒體聯盟(Alliance for Open Media,AOM)做免費編解碼標準,做的第一代就是AV1,麵向互聯網應用,計劃2017年12月就要release第一個正式版本了。
從推出的時間來看,AV1從壓縮性能上相當於H.265.5,會顯著優於H.265但又形不成代差。相比於正在提案的H.266也即當前的JVET而言,顯著的優勢就是保持了解碼端的低複雜度,以此保持了解碼的低成本,對於硬解方案來講意味著更低的芯片價格,對於軟解方案來講意味著相同的CPU能解碼更高的分辨率和幀率。當然,維持解碼端低複雜度也代價不菲,很多JVET裏提案的新特性比如仿射變換、浮點QP等都無法應用,導致AV1新特性整體看來依然是在H.265和VP9的基礎上提出了更多的奇葩mode、使用更多窮舉來獲取更高的壓縮率。這從當前時間點落地來講當然是必然的,解碼端低複雜度也是極好的,但我個人認為這並不代表視頻壓縮技術的發展方向,從思路上相比JVET也沒什麼先進性。
AV1中的編碼工具
AV1裏麵使用的編碼工具分為預測工具、變換工具、環路濾波工具3大類,以下是被我非常主觀地挑了重點之後的詳細內容點評:
(1)預測工具即利用圖像時間、空間相關性的幀間和幀內預測部分,是算法優化、計算量占比和畫質影響絕對的重頭。AV1的特性主要包括:
塊劃分像265一樣略微超過四叉樹的劃分,多了少許諸如1x4比例的預測塊;
幀內預測分主方向和精細方向兩級,主方向和264類似有8個,精細方向多至56個,超過了265。而且這些模式有些相當奇葩的,不光有帶非線性權重的smooth mode、用於編屏幕信息有奇效的Palette mode,甚至還有一個利用了arg min函數的預測模式Peath Mode,做匯編優化的同學估計會怨念滿滿,如下圖自行體會像素P的預測值是如何根據相鄰塊中參考點T、L、TL的值求得的:
運動向量(MV)參考方麵是基於VP9的MV參考模式的改進;
運動估計模式方麵,可使用與265類似的多個MV可指向同一個參考幀的模式;新引入了處理物體扭曲時運動估計的局部和全局warp模式,功能與仿射變換類似;
運動補償方麵,AV1炒冷飯地使用了H.263裏曾經用過的OBMC,靠融合相鄰塊的多個預測值來提高物體邊緣處的預測精度;
在亞像素插值方麵,在VP9可自由設置普通濾波器、文藝濾波器、二逼……哦不對,是普通濾波器、銳利濾波器、平滑濾波器三種不同的濾波抽頭的基礎上,增加了橫向和縱向可使用不同濾波器的能力,所以總的濾波器形態擴大到3x3=9種;感覺又是個坑選擇障礙症患者的特性,真用的話估計大家99%還是都默認用橫縱都是普通……
最後重點分析有一個值得一提的亮點:支持了同一個塊中混合幀內和幀間預測,即interinter mode和interintra mode。這個模式是為了解決如下圖的問題的:
即有些方的或長方的預測塊裏的實際畫麵被分割成多個物體,如何準確分別表示它們的運動方式的問題。H.264裏反正隻有16x8/8x16/8x8/8x4等那幾種標準的塊劃分,匹配不上真實物體位置就隻有認了,匹配不準就導致預測殘差變大、碼率變大、畫質變差;到了H.265裏分塊形狀更多了、一個PU能使用多個同向MV了,形式就好轉了很多,但還是沒有質變。AV1裏用了如下圖這麼大的codebook來覆蓋可能出現的同一個塊裏多個獨立運動物體的分割情況:
我本以為這個需要花5bits來編碼的codebook放在一個真實使用的標準裏已經很喪病了,沒想到在inter和intra兩種模式之間,這個mask的邊緣還能是漸變的……好吧,如下圖:
(2)變換工具的特性見下圖:
總體就是3個方麵的排列組合:首先是四種變換DCT、ADST、FlipADST、無變換自由搭配,其次是變換塊形狀支持多種正方形和長方形,最後是每一個變換塊可以繼續往小了拆。為了獲取最優的壓縮性能,感覺RDO-T算法已經再一次躍躍欲試了。
(3)環路濾波工具是將deblocking、CDEF、LR三個filter以cascade的方式連起來。
CDEF和LR是新提出的環路濾波工具,在264、265都有的deblocking filter去除塊效應之餘,CDEF用於去除振鈴效應,LR(loop-restoration)的作用類似265裏的SAO,用於在最後一步把解碼圖像和原始視頻源硬湊得更接近一點。
這段就不展開了,唯獨吐槽一下湊出CDEF(Constrained Directional Enhancement Filter)這個名字的同學真是辛苦了。
AV1總結
總之拜以上種種nb特性所賜,AV1目前號稱壓縮率超過265 25%,今年底的版本的目標是超過265 30%。
從個人觀點而言,看好AV1作為專利博弈工具的價值,也看好基於AV1刷paper的價值,談實際業務為時尚早。
2.2 基於神經網絡的圖像壓縮
這正是我最近準備當做中長期目標研究一下的方向,瞌睡送枕頭,正好有大牛幫我survey一下。其實我更關注的是基於深度學習做視頻壓縮,今年文章也開始多起來了,不過還遠不如圖像壓縮這麼成熟,一步一步來吧。
概述
用神經網絡做圖像壓縮的曆史出乎意料地長,早在1989年Cottrell就用當年的BP神經網絡做過圖像壓縮,而且,就當年那個框架的頂層架構一直用到今天,也即把圖像壓縮與解壓縮的過程直接映射為一個自編碼器架構。
不過現在的工作在細節之處跟當年的工作比還是變化很大的,包括用卷積層代替了當年的全連接層,使用的網絡更深了,優化算法大幅升級,把熵編碼部分也包進來進行端到端的訓練,用循環結構處理多壓縮率問題,以及無論是訓練數據還是計算資源都有指數級的增加。
從頂層架構上來看,最主要的兩個問題就是給這個自編碼器選擇目標函數和網絡結構:
目標函數是這樣的:
這是一個RD模型,其中第一項是Rate損失函數,第二項是Distortion損失函數,中間的beta作為trade-off的參數,作用類似於視頻編碼的RDO裏的lambda。顯然地,Rate損失函數是對編碼函數f(x)的量化損失進行建模,而Distortion損失函數則要通過比較源圖片x與先編碼後解碼的g(f(x))來計算。
一年之內的重要論文見下,感興趣的同學自己找來看吧,抱歉沒有文字版,同時感謝arXiv。
挑戰
用深度學習做圖像壓縮目前麵臨的挑戰被歸納為5方麵:
(1)架構與訓練的細節
這方麵是關於神經網絡的通用問題,網絡結構啊、層數啊、激活函數怎麼選啊、卷積大小啊,唯多試而已。
據說在頻域訓練比直接在像素域訓練效果好很多。
據說循環模型效果很好,尤其在碼率分配方麵,但最大的問題就是太慢:
(2)量化碼的反向傳播
量化的函數是不可微的,因為它是折線,梯度不是0就是無窮大。目前的標準解決方式,或者在正向流程裏加噪,或者在反向流程裏用其他函數替換掉量化函數,總之讓它可微就好。
(3)控製熵
有三種主要的方式,一是通過設置一個瓶頸能力比如0.125bpp並將優化目標設置為distortion最小,二是用一個可微的熵模型來做端到端的訓練,三是用一個帶proxy損失的不可微熵模型。目前的結果是第三種效果最好。
(4)直接的比特分配
基於RD模型的碼率控製已經得到還不錯的比特分配了,如果想進一步獲得提升,基於圖像複雜度進行直接的比特分配或許是條路。
(5)確定並評估損失函數
這還是壓縮出來的圖像怎麼算好的問題的另外一種說法,還是要主觀圖像質量評估,他們也想訓練出一套主觀質量標準。唔,你要不要試試VMAF……
當前結果
目前用神經網絡做圖像壓縮的壓縮率結果是這樣的:
也即是說跟JPEG2000的壓縮率有得一拚了,說明這條路至少是可以繼續往下走的。至於編解碼的複雜度,就還是那四個字:不提也罷。
三、Youtube的Workshop
Youtube分享的是VR業務的視頻和音頻技術。
3.1 VR視頻
在視頻方麵,VR視頻如何提升畫質,基本就是三條路:一是直接調編碼器,純服務端內部優化,係統改動最小;二是調映射方式,係統和客戶端需要微調;三是調流媒體,後台、播放鏈路、客戶端改造都大。
在編碼器內部,youtube與epfl合作搞了兩個東西,一是修改量化表,可以使VR視頻中斜向的線條更流暢;二是在球麵映射上做的的運動估計,即做運動估計時認為物體存在球形畸變。都是很不錯的思路,可惜跟265不兼容,我們等266見了。
在映射方麵,youtube做了件挺有意思的事,即分析怎麼樣的映射是好映射,基於的假設是,如果映射後的圖像上的一個像素所代表的麵積,和映射前的圖像上一個像素所代表的麵積越接近,則這個映射越好。基於這個思路,youtube列出了地球儀映射和cubemap兩種最常用的映射,課件地球儀映射的頂部和底部都是很多個映射後的像素對應一個映射前的像素,而赤道位置則相反,cubemap好一點但也不太勻,而youtube自己提出的ECM映射最勻,所以ECM映射最好。從知其然也要知其所以然的角度,我們優化映射方法時,也可以用這種方法算一下,看看PSNR的提升或降低是不是講道理的。
道理我懂,但實驗數據也是要看的。youtube在如下圖的三種視角模式下進行了質量測試,對照上麵那個映射麵積圖我們也基本上能直接猜出來了,1、3視角模式應該是ECM優,2視角模式估計是差一點或者差不多。從測試結果上看確實如此,在第1個視角模式下穩定地略微好0.3~0.5dB的PSNR,算是個不錯的結果了,而且在最差的第2個視角模式下也能跟cubemap打平。
3.2 VR音頻
優酷VR在音頻上麵下的功夫還不太夠,做法上比較簡單。實際上全景聲的準確表達是很複雜的,需要通過n階分解來表達,例如下圖左側的全景聲聲場,如果隻按1階表達的話隻能獲得下圖中間的聲場,需要至少3階才能表達出如下圖右側的聲場效果。
對於音頻的壓縮,也需要特殊的壓縮格式來減小全景聲的損失。直接用aac壓縮的話如下圖,紅色部分損失是比較大的。
用傳統OPUS進行壓縮,好像更差一點,如下圖。
用全景聲OPUS,都是384kbps,就好得多了。不過這個似乎需要特定的元數據支持才可以用。
對於沉浸式的體驗而言,聲場是很重要的,後續在音頻方麵還得多下些功夫。
那麼本期就到這裏,敬請期待遙遙無期的ICIP2017報告係列之二……
最後更新:2017-10-10 10:34:23