編者按
轉(zhuǎn)碼主要有三個(gè)目的:提高碼流的兼容性、改善畫(huà)質(zhì)和降碼率省帶寬。轉(zhuǎn)碼系統(tǒng)對(duì)公司的帶寬和體驗(yàn)是非常重要的,尤其在降本增效大背景下。LiveVideoStackCon 2023 深圳站邀請(qǐng)到嗶哩嗶哩公司蔡春磊老師講解B站降低碼率相關(guān)的原理和實(shí)踐。
文/蔡春磊
大家好,我是蔡春磊。今天和大家分享一些關(guān)于轉(zhuǎn)碼系統(tǒng)優(yōu)化原理的思考。我畢業(yè)后加入嗶哩嗶哩,主要從事傳統(tǒng)實(shí)用轉(zhuǎn)碼系統(tǒng)的設(shè)計(jì)和優(yōu)化。同時(shí)我對(duì)深度學(xué)習(xí)編碼也有過(guò)研究,我經(jīng)常思考它們之間本質(zhì)上的聯(lián)系,今天和大家探討一下。
01
廣義轉(zhuǎn)碼框架
我們從轉(zhuǎn)碼系統(tǒng)切入。轉(zhuǎn)碼主要有三個(gè)目的:提高碼流的兼容性、改善畫(huà)質(zhì)和降碼率省帶寬。今天主要探討降低碼率相關(guān)的原理和實(shí)踐,因?yàn)閹挸杀臼?a href="http://hljzzgx.com/v/" target="_blank">視頻公司最沉重的負(fù)擔(dān)之一。
現(xiàn)在的轉(zhuǎn)碼系統(tǒng)不僅僅是簡(jiǎn)單的解碼再編碼,而是包括了預(yù)分析、前處理、參數(shù)決策、終端增強(qiáng)和質(zhì)量評(píng)價(jià)等模塊的龐大系統(tǒng)。其基本原理是在更大的系統(tǒng)尺度上,對(duì)壓縮率進(jìn)行聯(lián)合優(yōu)化,用更多算力換取更高的壓縮率,可以稱(chēng)之為廣義轉(zhuǎn)碼系統(tǒng)。
廣義轉(zhuǎn)碼系統(tǒng)具體表現(xiàn)形式非常多,不同公司的實(shí)現(xiàn)方法不同,叫法也不同。例如,內(nèi)容自適應(yīng)轉(zhuǎn)碼系統(tǒng)、窄帶高清轉(zhuǎn)碼系統(tǒng)等。上面列出了全球部分代表性公司對(duì)轉(zhuǎn)碼系統(tǒng)各個(gè)模塊的投入,從投入力度上可以發(fā)現(xiàn),轉(zhuǎn)碼系統(tǒng)對(duì)公司的帶寬和體驗(yàn)是非常重要的,在降本增效的大背景下更是如此。
B站在轉(zhuǎn)碼系統(tǒng)優(yōu)化上起步較晚,那我們?cè)撊绾巫霾拍苎杆僮汾s行業(yè)先進(jìn)水平呢?首先,不能著急投入到具體的技術(shù)實(shí)踐當(dāng)中,因?yàn)椴煌膽?yīng)用場(chǎng)景對(duì)轉(zhuǎn)碼系統(tǒng)的要求截然不同,比如適合 OGV 內(nèi)容為主的轉(zhuǎn)碼系統(tǒng)不適合直接用在 UGV 為主的應(yīng)用中,反之亦然。我們首先要做的是找到底層的優(yōu)化原理。
具體來(lái)講,就是要先思考上述這些技術(shù)點(diǎn),有沒(méi)有共同的優(yōu)化原則。
02
壓縮的信息論原理
我先嘗試構(gòu)建一套基于信息論的優(yōu)化理論框架,然后對(duì)其合理性進(jìn)行驗(yàn)證。
先忽略轉(zhuǎn)碼系統(tǒng)復(fù)雜多變的表現(xiàn)形式。轉(zhuǎn)碼本質(zhì)是一個(gè)信源編碼系統(tǒng),目的是用最少的比特?cái)?shù)表達(dá)視頻數(shù)據(jù)中人眼感興趣的信息,最短平均比特?cái)?shù)等于視頻數(shù)據(jù)的信息熵。在實(shí)際應(yīng)用中,有意義的自然視頻多,無(wú)意義的噪聲視頻少,概率分布不均勻,所以信息熵小于像素?cái)?shù)據(jù)無(wú)損表示所需要的比特?cái)?shù),因此視頻數(shù)據(jù)可以被壓縮。計(jì)算信息熵,前提是要明確視頻中所有像素取值的聯(lián)合概率分布。我們先用信息熵的概念作為基座,再看兩條定理,它們構(gòu)成了理論框架的支柱。
第一條定理是說(shuō),真實(shí)視頻的像素聯(lián)合取值空間非常大,其概率分布不可能通過(guò)統(tǒng)計(jì)得到。所以在實(shí)際編碼時(shí),是基于對(duì)概率分布的預(yù)測(cè),由此進(jìn)行實(shí)際熵編碼得到的碼率叫做交叉熵,可以證明交叉熵≥信息熵。對(duì)分布預(yù)測(cè)得越準(zhǔn)確,所能達(dá)到的實(shí)際碼率越低。
第二條定理可以用以上圖直觀表示,它有多種理解方式:1. 編碼多維數(shù)據(jù),可以先編碼一部分信息,再用已編碼信息作為先驗(yàn)條件來(lái)編碼另一部分信息,這樣所需比特?cái)?shù)要少于對(duì)他們進(jìn)行獨(dú)立編碼。2. 當(dāng)解碼端事先已具備與信源相關(guān)的先驗(yàn)信息(相關(guān)信息)時(shí),編碼信源所需碼率(條件信息)可以減少。3. 相關(guān)的先驗(yàn)信息越多,所需碼率越少。
這就是一套關(guān)于轉(zhuǎn)碼優(yōu)化的理論框架了,非常簡(jiǎn)潔:一條信息熵的基本概念、兩條信息論定理。檢驗(yàn)此框架的合理性,可以用此來(lái)解釋轉(zhuǎn)碼系統(tǒng)中各個(gè)模塊的設(shè)計(jì)原理以及優(yōu)化路徑,如果能解釋明白,那就可以認(rèn)為此框架是合理的。
我們先以傳統(tǒng)編碼的發(fā)展為例。如果從技術(shù)角度來(lái)理解我們所熟悉的變換和預(yù)測(cè)混合編碼方法,門(mén)檻是很高的,因?yàn)槔锩嫔婕傲颂嗟哪K?,F(xiàn)在我嘗試從理論角度出發(fā),對(duì)傳統(tǒng)編碼框架的設(shè)計(jì)原理和優(yōu)化路徑進(jìn)行重新梳理。
對(duì)視頻像素?cái)?shù)據(jù)進(jìn)行壓縮,前提是要明確像素取值的聯(lián)合概率分布,但視頻由時(shí)域上很多幀組成,其像素?cái)?shù)量極其龐大,數(shù)據(jù)間聯(lián)合取值的范圍幾乎無(wú)窮。所以首先對(duì)數(shù)據(jù)進(jìn)行降維處理,也就是一幀一幀地去編碼。上面的公式表明,為了保持理論上的最低碼率,在編碼時(shí)要充分利用已經(jīng)編碼幀給未編碼幀提供相關(guān)信息。但在實(shí)際標(biāo)準(zhǔn)中,由于復(fù)雜度問(wèn)題,采用的都是有限數(shù)量的參考幀結(jié)構(gòu),這是傳統(tǒng)編碼中幀間編碼的概念。原理上幀間參考信息越多,碼率越低,所以隨著標(biāo)準(zhǔn)的發(fā)展,逐漸出現(xiàn)了 P 幀、B 幀,同時(shí)封閉式的 GOP 結(jié)構(gòu)向開(kāi)放式 GOP 結(jié)構(gòu)發(fā)展。
現(xiàn)在我們將問(wèn)題拆解成對(duì)一幀進(jìn)行編碼。但是,一幀 1080P 圖像就有百萬(wàn)數(shù)量級(jí)的像素,它們之間的聯(lián)合取值范圍也近乎無(wú)窮大。繼續(xù)降低維度,把圖像拆成一個(gè)一個(gè)塊進(jìn)行編碼,原理上在編碼時(shí)為了保證盡可能低的碼率,要充分利用已編碼圖像塊,給未編碼塊提供相關(guān)信息來(lái)降低碼率。但由于復(fù)雜度原因,在實(shí)際發(fā)展過(guò)程中首先出現(xiàn)的是諸如 H.264 中 16×16 的小塊,且僅參考相鄰域圖像塊的邊緣像素。從公式可以輕松推導(dǎo)出,當(dāng) LCU 越大的時(shí)候,對(duì)具體的 CU,能參考的信息就越多,理論上碼率就會(huì)越低。所以編碼標(biāo)準(zhǔn)一定是朝著編碼塊越來(lái)越大的方向去發(fā)展,同時(shí)還會(huì)引入更多的鄰域相關(guān)信息,比如多行參考。
假設(shè)已經(jīng)將圖像拆成了 8×8 的像素塊,但是其維度依然很高,聯(lián)合分布的取值范圍仍然極大。而且其取值非常分散,很難對(duì)其分布進(jìn)行建模預(yù)測(cè)。對(duì)像素?cái)?shù)據(jù)的分布進(jìn)行預(yù)測(cè),換句話說(shuō),其實(shí)是在問(wèn),自然圖像塊有沒(méi)有共同規(guī)律?
其實(shí)這個(gè)規(guī)律早在 1968 年就被發(fā)現(xiàn)了:自然視頻能量大多集中在低頻部分,圖像塊經(jīng)過(guò) DCT 變換后,系數(shù)會(huì)呈現(xiàn)很強(qiáng)的規(guī)律性,非零系數(shù)不多,且集中在低頻部分。根據(jù)這個(gè)規(guī)律,就可以對(duì)系數(shù)的分布進(jìn)行建模預(yù)測(cè),如右邊曲線所示。同時(shí)由于這個(gè)規(guī)律性很強(qiáng),也就是說(shuō)預(yù)測(cè)可以很準(zhǔn)確,所以交叉熵就會(huì)很低,編碼所需碼率就低。再結(jié)合 zigzag、熵編碼等工具就能實(shí)現(xiàn)壓縮的目的。DCT 變換編碼這個(gè)天才般的發(fā)明,直到現(xiàn)在依然是傳統(tǒng)編碼中最核心的模塊。而 zigzag 則成了 FFmpeg 的 logo。
分塊加變換編碼,就構(gòu)成了 JPEG 的基本框架。想要進(jìn)一步降低碼率,原理表明,可以用相鄰的圖像塊給當(dāng)前圖像塊提供先驗(yàn)的相關(guān)信息,那么當(dāng)前塊所需要編碼的就剩下了條件信息,而條件信息比自信息低,所以碼率就低。
在傳統(tǒng)編碼中,相對(duì)信息的表達(dá)方式是周?chē)鷪D像塊對(duì)當(dāng)前圖像塊在像素域上的預(yù)測(cè)值。條件信息的表達(dá)方式是當(dāng)前塊的像素預(yù)測(cè)殘差。而條件信息比自信息更低,則表現(xiàn)為預(yù)測(cè)殘差經(jīng)過(guò) DCT 變換之后,其系數(shù)會(huì)變得更加集中,非零系數(shù)更少,對(duì)其進(jìn)行概率預(yù)測(cè),所取得的交叉熵會(huì)更低,實(shí)際碼率也就更低。這就是傳統(tǒng)編碼中另一個(gè)核心技術(shù):預(yù)測(cè)編碼。
在這里先拋出一個(gè)問(wèn)題,在傳統(tǒng)編碼中,相關(guān)信息和條件信息都是在像素域進(jìn)行表達(dá)的,那么它們是否只能在像素域進(jìn)行表達(dá)呢?
在傳統(tǒng)編碼中,預(yù)測(cè)殘差越少,DCT 系數(shù)越集中,交叉熵越低。所以傳統(tǒng)編碼中一個(gè)重要的優(yōu)化方向是不斷引入更多的相關(guān)信息來(lái)提高對(duì)當(dāng)前圖像塊的預(yù)測(cè)準(zhǔn)確率,降低殘差,從而降低碼率。從這個(gè)角度看,就可以對(duì)很多傳統(tǒng)編碼工具的設(shè)計(jì)和發(fā)展路徑進(jìn)行解釋?zhuān)鐜g參考的原理就是在參考當(dāng)前幀圖像塊的基礎(chǔ)上增加相鄰幀圖像的參考,本質(zhì)是引入更多相關(guān)信息從而減少條件信息,可以降低碼率。至此,我們已經(jīng)從原理出發(fā),重新推導(dǎo)了傳統(tǒng)的基于變換與預(yù)測(cè)的混合編碼框架,以及各個(gè)模塊的優(yōu)化路徑。
編碼模式信息同樣不可忽視,上圖第一行公式成立的前提是解碼器提前知道劃分模式,但是通用解碼器預(yù)先是不知道具體編碼模式的,所以模式信息也要編碼,也要消耗碼率。同樣,模式信息也是可以引入更多先驗(yàn)條件來(lái)降低碼率的。實(shí)際編碼時(shí),不同模式的概率預(yù)測(cè)難度不同,其實(shí)際碼率也不同,且無(wú)法提前得知,所以需要嘗試不同模式并計(jì)算各自的碼率,從而搜索到碼率最低的模式,這就是模式搜索的概念。
上述都是無(wú)損編碼,但實(shí)際用的大多是有損編碼。有損編碼的原理可以解釋為:為編碼提供了一個(gè)先驗(yàn)條件,即允許在編碼過(guò)程中對(duì)部分像素?cái)?shù)據(jù)進(jìn)行丟棄。在這個(gè)條件之下,編碼可以減少數(shù)據(jù)量來(lái)降低碼率。率失真優(yōu)化 RDO 就是綜合考慮了失真和碼率的模式搜索,在實(shí)際標(biāo)準(zhǔn)發(fā)展過(guò)程中,編碼模式及其之間的組合急劇增加,模式搜索的空間不斷增大,因此實(shí)用編碼必須要引入一門(mén)重要的技術(shù)——快速算法。
傳統(tǒng)編碼的原理解釋先到這里,希望能為大家?guī)?lái)一些啟發(fā)。接下來(lái),繼續(xù)用此框架來(lái)梳理深度學(xué)習(xí)編碼的發(fā)展歷程。
介紹一下深度學(xué)習(xí)的發(fā)展背景。約翰內(nèi)斯巴萊最早提出了基于 CNN 的端到端圖像編碼,該方法具有開(kāi)創(chuàng)性,為編碼領(lǐng)域開(kāi)辟了一條全新的賽道,并掀起了全球?qū)ι疃葘W(xué)習(xí)編碼的研究熱潮。深度學(xué)習(xí)編碼性能快速發(fā)展,如果對(duì)標(biāo)傳統(tǒng)標(biāo)準(zhǔn),8 年時(shí)間就從 JPEG 發(fā)展到 H.266,甚至下一代標(biāo)準(zhǔn)的水平,走完了傳統(tǒng)編碼約 30 年的性能提升之路。
回顧一下深度學(xué)習(xí)圖像編碼的基本框架,和傳統(tǒng)編碼遇到的問(wèn)題一樣,對(duì)像素域的分布預(yù)測(cè)很難,也要變換到分布更加有規(guī)律的特征域,以進(jìn)行更加準(zhǔn)確的預(yù)測(cè)。
問(wèn)題轉(zhuǎn)變成了對(duì)特征進(jìn)行編碼,特征的聯(lián)合概率分布空間依然很大,也需要先降維,拆解成一個(gè)一個(gè)通道,一個(gè)一個(gè)特征去編碼。原理上要想取得盡可能低的碼率,需要充分利用已編碼的特征給未編碼特征提供相關(guān)信息。接下來(lái)要回顧的深度學(xué)習(xí)圖像編碼,其實(shí)就是一個(gè)不斷提高特征預(yù)測(cè)準(zhǔn)確率,同時(shí)引入更多相關(guān)信息的過(guò)程。
看幾個(gè)關(guān)鍵節(jié)點(diǎn),2017 年第一個(gè) CNN 圖像編碼,有兩個(gè)關(guān)鍵點(diǎn),一是相同通道內(nèi)的特征共享同一個(gè)固定的概率分布表,二是已編碼特征沒(méi)有用來(lái)給未編碼特征做參考。由于這兩個(gè)特點(diǎn),在公式上很容易證明,該方法的壓縮率是有限的,概率預(yù)測(cè)準(zhǔn)確率不高,相關(guān)信息利用不夠充分,碼率就不可能很低。原理上有二個(gè)優(yōu)化方向,一是提高特征分布的預(yù)測(cè)準(zhǔn)確率,二是利用已編碼特征提供相關(guān)信息。
2018 年,他們實(shí)現(xiàn)了這兩個(gè)優(yōu)化。具體來(lái)說(shuō),從通道級(jí)固定概率表發(fā)展到元素級(jí)可變的概率估計(jì),同時(shí)空間相鄰元素之間有參考。這兩點(diǎn)改進(jìn)使壓縮率從 JPEG2000一下子就發(fā)展到了 2013 年 HEVC。如果繼續(xù)梳理,站在原理框架的視角去看,接下來(lái)的發(fā)展脈絡(luò)其實(shí)非常清晰,就是不斷引入更多已編碼特征提供相關(guān)信息的過(guò)程。不過(guò)在實(shí)踐中,利用的相關(guān)信息越多,復(fù)雜度就越高,并行性越弱,速度和壓縮率之間需要有取舍。
有一點(diǎn)需要注意,在深度學(xué)習(xí)圖像編碼中,相關(guān)信息和條件信息的表達(dá)已經(jīng)不在像素域,而在特征域了,這些方法都在特征域進(jìn)行元素間的參考預(yù)測(cè)和殘差編碼。所以,之前問(wèn)題的答案,相關(guān)信息和條件信息,并不是只能在像素域進(jìn)行表達(dá)。我認(rèn)為這個(gè)本質(zhì)的差別,決定了深度學(xué)習(xí)編碼的性能天花板要比傳統(tǒng)方法高得多。
繼續(xù)來(lái)到深度學(xué)習(xí)的視頻編碼,上面第一行公式,表明如果對(duì)視頻進(jìn)行一幀一幀編碼是不高效的,需要引入幀間參考,提供相關(guān)信息來(lái)降低碼率。第一個(gè)深度學(xué)習(xí)視頻編碼 DVC 在圖像編碼基礎(chǔ)上,引入了前向幀間參考,完全遵循了傳統(tǒng)的編碼框架,用像素域光流預(yù)測(cè)表達(dá)幀間相關(guān)信息,用像素域預(yù)測(cè)殘差表達(dá)條件信息。雖然用光流替代了傳統(tǒng)運(yùn)動(dòng)估計(jì),但這在原理上,DVC 和傳統(tǒng)方法并沒(méi)有本質(zhì)差別,所以 DVC 框架的性能天花板其實(shí)是有限的。
有兩個(gè)優(yōu)化方向:一是引入更多相關(guān)信息,降低碼率。二是將相關(guān)信息和條件信息在更有效的變換域內(nèi)進(jìn)行表達(dá)。
第一條好理解,就是引入更多的參考幀。第二條用上面的示意圖可以直觀地解釋?zhuān)瑯觾山M數(shù)據(jù),可以從不同維度去觀察它們的相關(guān)性,在不同空間內(nèi),他們之間的相關(guān)信息量是不一樣的。所以總是存在更有效的空間,它們之間的相關(guān)信息更多,條件信息更少,那么在這個(gè)域上編碼條件信息,碼率就會(huì)更低。傳統(tǒng)方法都是在像素域內(nèi)表達(dá)相關(guān)信息和條件信息,這是最容易實(shí)現(xiàn)的,但未必是最優(yōu)的,深度學(xué)習(xí)圖像編碼全面超越傳統(tǒng)方法已經(jīng)證明了這一點(diǎn),那么深度學(xué)習(xí)視頻編碼同樣可以這樣去優(yōu)化。
目前最新也是最好的方法 DCVC-DC,實(shí)現(xiàn)了這兩點(diǎn)優(yōu)化。具體來(lái)說(shuō),一是利用深度學(xué)習(xí)特征的傳導(dǎo),引入了前向多幀的相關(guān)信息。二是幀間參考信息和當(dāng)前條件信息都是在特征域進(jìn)行表達(dá)的,而不是在像素域。該方法比目前正在研發(fā)的下一代 ECM(可以認(rèn)為 H.267)在相同 GOP 結(jié)構(gòu)下的性能更好。該方法對(duì)于前向非相鄰幀的參考還是比較隱蔽的,如果使用更加顯式的方法,引入更多相關(guān)信息,或許可以進(jìn)一步提升壓縮率。
總結(jié)一下深度學(xué)習(xí)編碼,原理是利用深度神經(jīng)網(wǎng)絡(luò)強(qiáng)大的優(yōu)化能力和巨大的算力,對(duì)編碼問(wèn)題中概率預(yù)測(cè)的問(wèn)題進(jìn)行更加直接的求解,所以深度學(xué)習(xí)編碼的性能發(fā)展速度遠(yuǎn)遠(yuǎn)快于傳統(tǒng)編碼??梢灶A(yù)見(jiàn)的是,在未來(lái)本就激烈的編碼標(biāo)準(zhǔn)競(jìng)爭(zhēng)格局中,深度學(xué)習(xí)編碼必將以強(qiáng)勢(shì)的姿態(tài)加入競(jìng)爭(zhēng),并取得重要的席位。
沿著編碼發(fā)散一下,一是用大模型給解碼端提供更多先驗(yàn)知識(shí),二是相關(guān)信息和條件信息在內(nèi)容語(yǔ)義層面進(jìn)行更高效的表達(dá)。例如,英偉達(dá)提出在會(huì)議場(chǎng)景下的極低碼率編碼。原理是在解碼端利用面部重建模型,提供了從關(guān)鍵點(diǎn)和共享紋理構(gòu)造人臉的先驗(yàn)知識(shí)。同時(shí)該方法對(duì)幀間相關(guān)信息表達(dá)為共享的面部紋理和參考關(guān)鍵點(diǎn),條件信息表達(dá)為當(dāng)前幀人臉的關(guān)鍵點(diǎn)信息,所以只需要對(duì)人臉關(guān)鍵點(diǎn)信息進(jìn)行編碼,而關(guān)鍵點(diǎn)可以以極低的碼率去表示。
還有最近比較火的“郭德綱說(shuō)英文”的有趣應(yīng)用,如果從轉(zhuǎn)碼角度去看這項(xiàng)技術(shù),其實(shí)可以實(shí)現(xiàn)對(duì)同一視頻內(nèi)容的不同語(yǔ)言版本進(jìn)行極其高效的壓縮和傳輸,這能夠在對(duì)視頻內(nèi)容進(jìn)行全球化分發(fā)的業(yè)務(wù)中節(jié)省大量的成本。假設(shè)我們先用傳統(tǒng)方法分發(fā)一個(gè)中文和英文版的視頻,盡管只有嘴型不同,但是傳統(tǒng)方法需要單獨(dú)編碼兩個(gè)視頻,碼率成倍上升。
換個(gè)思路,如果提前給解碼端幾個(gè)大模型,如翻譯模型、文字轉(zhuǎn)語(yǔ)音模型、語(yǔ)音驅(qū)動(dòng)嘴唇的模型。此時(shí)就只需要編碼傳輸一個(gè)英文版本的視頻,其他語(yǔ)言版本的視頻可以通過(guò)解碼端的大模型完全重構(gòu)出來(lái),此時(shí)對(duì)其他所有版本的視頻編碼所需要的比特?cái)?shù)為零,這就實(shí)現(xiàn)了極其高效的壓縮。
沿著編碼繼續(xù)發(fā)散,原理上解碼端擁有相關(guān)信息越多,碼率就越低??梢酝茰y(cè)有兩個(gè)發(fā)展方向,一是專(zhuān)用場(chǎng)景下的編碼,這相當(dāng)于提供了一個(gè)非常強(qiáng)的場(chǎng)景先驗(yàn)信息,比如英偉達(dá)的會(huì)議場(chǎng)景下的編碼。專(zhuān)用編碼目前還很難推廣,是因?yàn)閭鹘y(tǒng)標(biāo)準(zhǔn)依賴(lài)專(zhuān)用解碼芯片,不同標(biāo)準(zhǔn)無(wú)法共享高效的芯片核心,限制了解碼的效率。但假設(shè)未來(lái)深度學(xué)習(xí)編碼能夠普及,那么各類(lèi)專(zhuān)用編碼器的差異可能就在于模型結(jié)構(gòu)和參數(shù)的不同,而底層推理芯片是一樣的,也就不存在解碼效率差異的問(wèn)題了,安裝專(zhuān)用場(chǎng)景的硬件解碼器只需要像安裝軟件一樣,下發(fā)解碼模型文件即可。
二是用世界大模型進(jìn)行視頻編碼,其原理是用更龐大的算力和更海量的數(shù)據(jù),對(duì)編碼中的概率估計(jì)問(wèn)題進(jìn)行更加直接有效的求解,從而取得更低的交叉熵。此時(shí),大模型會(huì)學(xué)習(xí)海量關(guān)于視頻數(shù)據(jù)的先驗(yàn)信息,對(duì)視頻的壓縮表示會(huì)轉(zhuǎn)變成視頻在大模型中的概率表索引,這個(gè)索引可能就是我們所熟知的 prompt,對(duì)保真度的要求越高,prompt 就要越準(zhǔn)確越具體,或者額外傳輸一些語(yǔ)義級(jí)別的殘差信息。最近有學(xué)者認(rèn)為大模型本質(zhì)就是壓縮模型,從我們的原理框架出發(fā),也演繹出了類(lèi)似的結(jié)論。
編碼先說(shuō)這么多。那么轉(zhuǎn)碼系統(tǒng)中其他模塊的優(yōu)化原理是什么呢?其他模塊都可以歸納為一個(gè)范式:為轉(zhuǎn)碼系統(tǒng)提供和人眼視覺(jué)感知系統(tǒng)相關(guān)的先驗(yàn)信息,就可以減少編碼人眼感知信息所需要的條件信息。這些先驗(yàn)信息包括人眼更關(guān)注人臉、人眼對(duì)復(fù)雜紋理的失真不敏感等,先驗(yàn)信息與人眼視覺(jué)系統(tǒng)越匹配,能夠給轉(zhuǎn)碼系統(tǒng)賦予的相關(guān)信息就越多,剩余條件信息越少,碼率越低。在實(shí)際系統(tǒng)中,前處理和 ROI、JND 等預(yù)分析的目的就是確保這些先驗(yàn)條件能夠充分而準(zhǔn)確的實(shí)現(xiàn)。
再看編碼參數(shù)決策,其原理也是給轉(zhuǎn)碼過(guò)程提供了先驗(yàn)信息,比如人眼對(duì)畫(huà)質(zhì)存在拐點(diǎn),畫(huà)質(zhì)達(dá)到一定水平后,再增加碼率對(duì)主觀畫(huà)質(zhì)提升是有限的。還有對(duì)一批視頻進(jìn)行編碼時(shí),如果能夠保持每個(gè)視頻的畫(huà)質(zhì)足夠穩(wěn)定,那么對(duì)用戶(hù)體驗(yàn)的提升是有幫助的。參數(shù)決策的目的也是確保這些先驗(yàn)條件能夠準(zhǔn)確而充分的實(shí)現(xiàn),比如通過(guò)參數(shù)決策保持視頻編碼后的畫(huà)質(zhì)恒定。
我們?yōu)檗D(zhuǎn)碼系統(tǒng)提供的先驗(yàn)信息,具備有效性的前提是符合人眼視覺(jué)系統(tǒng) HVS,那么視頻質(zhì)量評(píng)價(jià) VQA 的目的,就是確保這個(gè)前提的成立。VQA 評(píng)價(jià)了一個(gè)視頻中有多少人眼真正感興趣的信息,或者相比于源視頻丟失了多少人眼感知信息。當(dāng) VQA 越準(zhǔn)確的時(shí)候,整個(gè)轉(zhuǎn)碼系統(tǒng)所依賴(lài)的先驗(yàn)信息就與 HVS 越相關(guān),所能提供的相關(guān)信息就越多,條件信息越少,碼率越低。
只要是從事過(guò)轉(zhuǎn)碼系統(tǒng)相關(guān)工作的人,應(yīng)該都會(huì)發(fā)現(xiàn),整個(gè)轉(zhuǎn)碼系統(tǒng)中的各個(gè)模塊,對(duì) VQA 都有很強(qiáng)的依賴(lài)。所以 VQA 是如此得重要,以至于 VQA 是整個(gè)視頻行業(yè)投入最多的方向之一。但是 HVS 非常復(fù)雜,所以對(duì) VQA 的研究也一直在持續(xù)。
我們對(duì)傳統(tǒng)編碼和深度學(xué)習(xí)編碼以及其他模塊的優(yōu)化原理進(jìn)行了重新梳理,目前看來(lái),我們的原理框架是合理的。現(xiàn)在我們就可以用此框架來(lái)指導(dǎo)實(shí)際轉(zhuǎn)碼系統(tǒng)的設(shè)計(jì)。
03
B站轉(zhuǎn)碼優(yōu)化實(shí)踐
接下來(lái),介紹一些B站轉(zhuǎn)碼優(yōu)化的實(shí)踐經(jīng)驗(yàn)。
這是B站規(guī)劃的廣義轉(zhuǎn)碼系統(tǒng)的框架圖,有些模塊還在研發(fā)中。我們最開(kāi)始投入的自研編碼器,然后是 Per-Category 級(jí)別的參數(shù)決策。
參數(shù)決策方面。我們提出了一種場(chǎng)景級(jí)別的畫(huà)質(zhì)恒定的轉(zhuǎn)碼方法,原理是利用了一個(gè)先驗(yàn)條件:如果能將每個(gè)視頻的畫(huà)質(zhì)控制成恒定值,那么既可以避免碼率浪費(fèi),同時(shí)畫(huà)質(zhì)穩(wěn)定的視頻內(nèi)容,也有助于提高總體的用戶(hù)體驗(yàn)。實(shí)際落地中,系統(tǒng)遵循了內(nèi)容自適應(yīng)轉(zhuǎn)碼(CAE)框架,期望達(dá)到 Per-Shot 與 Per-Frame 之間的優(yōu)化層次,即在場(chǎng)景級(jí)別和幀級(jí)別實(shí)現(xiàn)畫(huà)質(zhì)控制。
這是具體的實(shí)現(xiàn)框架。具體來(lái)說(shuō),需要解決三個(gè)問(wèn)題:一是場(chǎng)景切換,我們直接調(diào)用了 x264 中的 scenecut 算法實(shí)現(xiàn)了高效的場(chǎng)景切分。二是如何對(duì)畫(huà)質(zhì)進(jìn)行衡量,在轉(zhuǎn)碼應(yīng)用中,我們發(fā)現(xiàn) VMAF 依然是目前最準(zhǔn)確最穩(wěn)定的方法,此外還引入了另一個(gè)先驗(yàn)假設(shè),即 VMAF 值一樣情況下,我們認(rèn)為畫(huà)質(zhì)是接近的。第三個(gè)問(wèn)題,就是在這個(gè)假設(shè)之下,怎樣保證編碼之后的 VMAF 值等于統(tǒng)一的預(yù)設(shè)值,不能高也不能低。
有兩個(gè)實(shí)現(xiàn)思路,一是進(jìn)行參數(shù)搜索,多次編碼,多次驗(yàn)證,搜索得到最優(yōu)參數(shù),這個(gè)方法準(zhǔn)確率很高,但是算力很大,不適合 UGC 場(chǎng)景。第二種方法是單次參數(shù)預(yù)測(cè),訓(xùn)練機(jī)器學(xué)習(xí)模型,將視頻特征作為輸入,直接預(yù)測(cè)滿(mǎn)足 VMAF 的編碼參數(shù)。這種方法計(jì)算簡(jiǎn)單,算力不高,但是準(zhǔn)確率難以保證,而當(dāng)準(zhǔn)確率不高的時(shí)候,轉(zhuǎn)碼所依賴(lài)的先驗(yàn)信息就不準(zhǔn)確,也就無(wú)法提供足夠多的相關(guān)信息,碼率也就不夠低。
在有限復(fù)雜度的約束下,我們提出了一種基于深度學(xué)習(xí)的 2pass 碼率因子預(yù)測(cè)方法。首先用簡(jiǎn)單高效的傳統(tǒng)特征,訓(xùn)練一個(gè)非常簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)進(jìn)行單次參數(shù)預(yù)測(cè),首次能夠達(dá)到 45%的準(zhǔn)確率。然后對(duì)剩下 55%畫(huà)質(zhì)不達(dá)標(biāo)的片段進(jìn)行第二次預(yù)測(cè),第二次預(yù)測(cè)引入第一次預(yù)測(cè)的結(jié)果作為錨定信息,此時(shí)會(huì)驚喜地發(fā)現(xiàn)能夠達(dá)到 99% 的準(zhǔn)確率。所以,該方法可以以平均 1.55 次編碼和 1 次 VMAF 的復(fù)雜度實(shí)現(xiàn) 99% 準(zhǔn)確率的場(chǎng)景級(jí)畫(huà)質(zhì)控制。
在該系統(tǒng)中,我們利用了一個(gè)先驗(yàn)條件:認(rèn)為編碼后 VMAF 恒定的情況下,畫(huà)質(zhì)是一樣的。這個(gè)先驗(yàn)條件和人眼主觀系統(tǒng)的匹配程度直接決定了轉(zhuǎn)碼系統(tǒng)的實(shí)際表現(xiàn)。在實(shí)踐中,我們發(fā)現(xiàn)對(duì)于大部分視頻,這個(gè)條件是成立的,但是對(duì)有一些動(dòng)畫(huà)、三明治、大背景小前景等視頻類(lèi)型,VMAF 不夠準(zhǔn)確,普遍虛高,這就造成了實(shí)際表現(xiàn)不及預(yù)期。
在沒(méi)有找到更準(zhǔn)確的畫(huà)質(zhì)評(píng)價(jià)方法之前,我們只能先打補(bǔ)丁,提高畫(huà)質(zhì)恒定這個(gè)先驗(yàn)條件的準(zhǔn)確率。一種方法是 ROI 編碼,其原理是利用了一個(gè)很強(qiáng)的先驗(yàn):人眼對(duì)人臉和人體的失真非常敏感。編碼之前先檢測(cè)人臉、人體、背景三個(gè)部分,然后在碼率分配時(shí)設(shè)置不同的優(yōu)先級(jí)。在運(yùn)用了很多類(lèi)似的補(bǔ)丁之后,系統(tǒng)的畫(huà)質(zhì)穩(wěn)定性得到了顯著增強(qiáng),率失真表現(xiàn)也得到了明顯提升。
未來(lái)對(duì)參數(shù)決策的優(yōu)化方向依然是不斷提高先驗(yàn)條件的準(zhǔn)確率,包括嘗試再深入一層達(dá)到幀級(jí)別的質(zhì)量控制、探索更合理的畫(huà)質(zhì)評(píng)價(jià)方法等,確保給系統(tǒng)提供更多更準(zhǔn)確的先驗(yàn)信息。
我們還利用了視覺(jué)無(wú)損前處理來(lái)進(jìn)一步降低碼率,其原理是利用了三個(gè)先驗(yàn)條件,一是人眼對(duì)結(jié)構(gòu)性信息的丟失很敏感,例如編碼后如果人臉、眼睛、鼻子等輪廓模糊,人眼能感知出來(lái)。二是人眼對(duì)高頻紋理細(xì)節(jié)的丟失不敏感,例如對(duì)草地紋理失真是不敏感的。三是站在轉(zhuǎn)碼系統(tǒng)的尺度下,利用了編碼器的一個(gè)先驗(yàn)信息,即傳統(tǒng)編碼都基于 DCT 變換編碼,非零系數(shù)越少,零系數(shù)越多的時(shí)候,碼率就會(huì)越低。
實(shí)際落地要做的就是找到一個(gè)方法將這三個(gè)條件充分準(zhǔn)確地實(shí)現(xiàn)。我們?cè)O(shè)計(jì)了一種損失函數(shù)和訓(xùn)練策略,訓(xùn)練了一個(gè)簡(jiǎn)單的 CNN 網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)這三個(gè)條件。具體來(lái)說(shuō),用降質(zhì)和增強(qiáng)的圖像對(duì),結(jié)合 L1 Loss 和 SSIM Loss ,讓網(wǎng)絡(luò)學(xué)會(huì)對(duì)結(jié)構(gòu)信息進(jìn)行恢復(fù)和保護(hù)。同時(shí)引入 DCT Loss,對(duì)處理后圖像的 DCT 高頻能量進(jìn)行約束,使其盡可能出現(xiàn)更多的零系數(shù),減少非零系數(shù)。這樣做的目的之一是減少視覺(jué)不敏感的細(xì)碎紋理信息,二是適配傳統(tǒng)的 DCT 變換編碼器,從而降低碼率。使用該方法訓(xùn)練好神經(jīng)網(wǎng)絡(luò)之后,可以直接運(yùn)用在各類(lèi)傳統(tǒng)編碼器之前,都能取得 15%的碼率節(jié)省。
回顧一下這個(gè)過(guò)程,我們剛開(kāi)始并沒(méi)有在神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)上做努力,因?yàn)閺脑砩线€不能推導(dǎo)出神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)優(yōu)化與降低碼率之間的聯(lián)系。但是原理告訴我們引入更多和系統(tǒng)相關(guān)的先驗(yàn)條件,一定可以降低碼率,因此我們僅僅利用 Loss 函數(shù)和訓(xùn)練策略的設(shè)計(jì)就實(shí)現(xiàn)了碼率的降低。
最后再介紹兩個(gè)工作。無(wú)參考視頻畫(huà)質(zhì)評(píng)價(jià),已經(jīng)上線了一個(gè)模型,用于檢測(cè)大盤(pán)的視頻畫(huà)質(zhì),但我們發(fā)現(xiàn)用其來(lái)指導(dǎo)轉(zhuǎn)碼還存在一些問(wèn)題。分享三個(gè)發(fā)現(xiàn),一是無(wú)參 VQA 實(shí)際準(zhǔn)確率受數(shù)據(jù)集的影響很大,公開(kāi)數(shù)據(jù)集與實(shí)際業(yè)務(wù)數(shù)據(jù)集屬性相差很大,直接將開(kāi)源模型用在實(shí)際業(yè)務(wù)中,準(zhǔn)確率不高。二是視頻數(shù)據(jù)的時(shí)空域采樣方式對(duì)準(zhǔn)確率和執(zhí)行效率的影響很大,在實(shí)際系統(tǒng)中,需要進(jìn)行仔細(xì)的設(shè)計(jì)。三是基于公開(kāi)數(shù)據(jù)集的無(wú)參 VQA 很難進(jìn)行細(xì)粒度的質(zhì)量評(píng)價(jià),我理解這是因?yàn)槿搜郾旧砭痛嬖诓淮_定性,不同的人對(duì)同一個(gè)視頻的評(píng)價(jià)不同,即使同一個(gè)人在不同時(shí)間對(duì)同一個(gè)視頻的評(píng)價(jià)也會(huì)有差異,所以 5 分制 MOS 分?jǐn)?shù)本身就存在超過(guò)±0.5 的誤差。
另外,為了讓算法能夠快速部署和高效執(zhí)行,我們開(kāi)發(fā)了一套強(qiáng)大的視頻分析與處理引擎,最近已經(jīng)升級(jí)到第二代了。
今天分享就到這里,感謝大家!
審核編輯:黃飛
-
視頻編碼
+關(guān)注
關(guān)注
2文章
113瀏覽量
21018 -
視頻轉(zhuǎn)碼
+關(guān)注
關(guān)注
0文章
14瀏覽量
7495
原文標(biāo)題:B站蔡春磊:轉(zhuǎn)碼系統(tǒng)究竟在優(yōu)化什么?
文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論