本文作者張錫平,火山引擎視頻云veImageX產(chǎn)品負(fù)責(zé)人。
前言
日前,第五屆深度學(xué)習(xí)圖像壓縮挑戰(zhàn)賽(以下將簡(jiǎn)稱“ CLIC 大賽”)比賽結(jié)果公布,首次參賽的火山引擎視頻云多媒體實(shí)驗(yàn)室?jiàn)Z得視頻壓縮賽道第一名。壓縮技術(shù)對(duì)于圖像、視頻應(yīng)用十分重要。在保證同樣主觀質(zhì)量的前提下,如何將圖像壓縮到更小體積便于互聯(lián)網(wǎng)信息傳輸,火山引擎視頻云團(tuán)隊(duì)不斷突破壓縮技術(shù)“天花板”。
字節(jié)跳動(dòng)在公司成立之初就建設(shè)了圖像處理平臺(tái),起初主要服務(wù)于今日頭條APP的圖文資源。隨著業(yè)務(wù)擴(kuò)展,后逐步服務(wù)于抖音圖集、短視頻封面、圖蟲(chóng)等幾乎用戶能看到的所有圖片展示場(chǎng)景?;鹕揭嬉曨l云團(tuán)隊(duì)將字節(jié)跳動(dòng)圖像處理的實(shí)踐,整理為《veImageX演進(jìn)之路》系列,將從產(chǎn)品應(yīng)用、后端技術(shù)、前端技術(shù)、算法、客戶端SDK 詳細(xì)解讀字節(jié)跳動(dòng)背后的圖像壓縮技術(shù)。
veImageX是火山引擎基于字節(jié)跳動(dòng)內(nèi)部服務(wù)實(shí)踐,推出的圖像一站式解決方案 ,覆蓋上傳、存儲(chǔ)、處理、分發(fā)、展示、質(zhì)量監(jiān)控全鏈路應(yīng)用。
一張圖片從上傳到在用戶端消費(fèi)展示,主要包括帶寬、存儲(chǔ)、計(jì)算三大部分資源的消耗,成本大概占比7:2:1。其中帶寬占比甚至可能比這更高,因此針對(duì)帶寬的節(jié)省優(yōu)化是重要一環(huán)。
veImageX架構(gòu)簡(jiǎn)圖
veImageX可以簡(jiǎn)化理解為包括三大組件:分發(fā)組件(CDN)、存儲(chǔ)組件、基礎(chǔ)媒體處理組件,組件有效組裝到一起形成一整套解決方案。降帶寬的本質(zhì)是通過(guò)壓縮降低傳輸?shù)奈募笮。簣D像在未壓縮之前體積都很大,因此我們將目標(biāo)設(shè)定為在保持用戶主觀體驗(yàn)不受損的前提下降低圖像傳輸?shù)捏w積,選擇了基于HEIF自研的圖像編解碼算法來(lái)壓縮體積。
為不降低應(yīng)用性能,需要考慮耗時(shí)+帶寬+畫(huà)質(zhì)等多個(gè)因子:對(duì)性能的影響主要是用戶加載耗時(shí)(圖片加載排隊(duì)耗時(shí)、圖片網(wǎng)絡(luò)耗時(shí)、圖片解碼耗時(shí)),對(duì)成本影響主要是用戶傳輸流量或者CDN分發(fā)帶寬,對(duì)畫(huà)質(zhì)影響主要是畫(huà)質(zhì)清晰度和美學(xué)等指標(biāo);
基于以上思路,我們以下圖為例,來(lái)看各環(huán)節(jié)我們是如何優(yōu)化的:
雙端圖像壓縮
體積對(duì)比
線上圖像以各種形式存在:iOS 主要是jpeg格式、Android端以webp為主,以典型的jpeg、png、webp為例,實(shí)驗(yàn)室多次抽樣驗(yàn)證發(fā)現(xiàn),轉(zhuǎn)換到我們自研的HEIF圖片格式,體積可以節(jié)省30%以上。
圖片對(duì)比:黃色部分為自研圖片格式,藍(lán)色部分為原圖格式
畫(huà)質(zhì)對(duì)比評(píng)估
壓縮體積是大目標(biāo),保證畫(huà)質(zhì)不受影響是第一要義;在畫(huà)質(zhì)評(píng)估階段,我們選取了一些客觀指標(biāo)以及我們自己訓(xùn)練的無(wú)參考的清晰度評(píng)估方式(VQScore算法),對(duì)圖像清晰度和美學(xué)進(jìn)行整體評(píng)估:
q值是在自研算法下調(diào)教數(shù)值對(duì)清晰度的影響
q值是在自研算法下調(diào)教數(shù)值對(duì)美學(xué)的影響
通過(guò)如上圖可以看出,新算法壓縮并不會(huì)帶來(lái)很大的畫(huà)質(zhì)波動(dòng),基本和壓縮前對(duì)比差異不大。
解碼性能對(duì)比
要保證用戶側(cè)的加載耗時(shí),必須要考慮新的算法在客戶端解碼的性能,而「按照我們的設(shè)計(jì)預(yù)期用戶的解碼耗時(shí)的增加值」需要小于「由于文件體積的減少帶來(lái)的耗時(shí)」才能保證影響加載耗時(shí)變大,我們調(diào)研開(kāi)源的一些圖片解碼性能,發(fā)現(xiàn)業(yè)界其他解碼器一張圖像解碼耗時(shí)在150MS~250MS 之間,開(kāi)源實(shí)現(xiàn)暫時(shí)無(wú)法達(dá)到要求,于是我們做了一些自行調(diào)教:
實(shí)驗(yàn)室下:自研解碼和開(kāi)源解碼性能對(duì)比,耗時(shí)越低越好。(單位:ms,其中綠色為自研解碼)
經(jīng)過(guò)如上調(diào)教,我們基本可以將圖片的解碼耗時(shí)控制在對(duì)齊webp的解碼耗時(shí)時(shí)間。
實(shí)驗(yàn)設(shè)計(jì)
秉承科學(xué)嚴(yán)謹(jǐn)?shù)脑瓌t,我們選擇實(shí)驗(yàn)驗(yàn)證時(shí),需要充分考慮對(duì)照組和實(shí)驗(yàn)組變量盡量減少:(veImageX圖像壓縮訪問(wèn)方式是極簡(jiǎn)的,只需要將原來(lái)的url之后追加一個(gè)圖像目標(biāo)模板即可如下表格中隱去了真實(shí)的業(yè)務(wù)信息)
數(shù)據(jù)論證
實(shí)驗(yàn)流量對(duì)比
經(jīng)過(guò)線上實(shí)驗(yàn),隨機(jī)選取了一組流量進(jìn)入實(shí)驗(yàn)過(guò)程,經(jīng)過(guò)一段時(shí)間運(yùn)行,我們發(fā)現(xiàn) p-xx-a 的域名帶寬和p-xx-b的域名帶寬形成顯著差異;我們從流量上計(jì)算(2.53PB-1.71PB)/2.53PB*100 = 32.4%,因此評(píng)判,在嚴(yán)格的和webp對(duì)比下,帶來(lái)至少 30%的帶寬節(jié)省驗(yàn)證符合預(yù)期。
當(dāng)然,除了自行驗(yàn)證之外,我們也嘗試過(guò)將線上其他格式(無(wú)需區(qū)分webp、jpg)與線上自研格式對(duì)比,節(jié)省比例更優(yōu)。
驗(yàn)證數(shù)據(jù)參考
通用的“集智瘦身”
降成本是一個(gè)演進(jìn)過(guò)程,在Android 和iOS 雙端端原生解決了帶寬問(wèn)題后,在H5端運(yùn)行,自研算法解碼端面臨在瀏覽器兼容性和性能支持的問(wèn)題。因此我們需要考慮,無(wú)需集成客戶端SDK的方式能夠帶來(lái)體積的節(jié)省,這里我們研發(fā)了“集智瘦身”的方式;這個(gè)設(shè)計(jì)初衷是為了解決業(yè)務(wù)方接入推廣難、集成SDK覆蓋難等難題,同時(shí)還要滿足成本節(jié)省的目的。
集智瘦身的原理是通過(guò)深度學(xué)習(xí)的方式對(duì)傳統(tǒng)webp、jpeg甚至png等格式進(jìn)行瘦身壓縮,而不需要集成客戶端解碼庫(kù)。
相比于自研編碼方式需要集成SDK之外,集智瘦身的接入簡(jiǎn)單很多,只需要將域名指向到veImageX服務(wù)就可以享受降本服務(wù)。
演進(jìn)方式A:有些業(yè)務(wù)線在實(shí)際推進(jìn)過(guò)程中雖然比較復(fù)雜,但仍然可以按照veImageX 定義的 “~tplv “模板的方式來(lái)應(yīng)用,因?yàn)槲覀儗⒋怂惴▋?nèi)置到模板中可以自由選擇,不限定任意格式,同時(shí)在Web與Chrome場(chǎng)景下也可以選擇AVIF+WebP+集智瘦身的方式來(lái)使用:
演進(jìn)方式A流程
這種方式,不需要SDK的接入,只需要服務(wù)端改造veImageX的模板即可,改成指定的格式,配合自適應(yīng)的模式來(lái)實(shí)現(xiàn)H5端的降本。
演進(jìn)方式B:隨著推動(dòng)過(guò)程中,我們發(fā)現(xiàn)仍然有些什么都不能修改的業(yè)務(wù),針對(duì)這樣的業(yè)務(wù),我們支持了只需要改動(dòng)DNS就可以實(shí)現(xiàn)“集智瘦身”的方案。當(dāng)然,圖像經(jīng)過(guò)處理之后文件的MD5值會(huì)發(fā)生變化,因此需要確認(rèn)業(yè)務(wù)方?jīng)]有對(duì)文件的MD5進(jìn)行校驗(yàn)。
演進(jìn)方式B流程
這種方案,對(duì)業(yè)務(wù)的侵入性幾乎沒(méi)有,會(huì)根據(jù)線上真實(shí)的圖像做判斷,合適的圖像自動(dòng)進(jìn)行瘦身處理,通過(guò)動(dòng)態(tài)監(jiān)測(cè)線上圖像輸入前后的畫(huà)質(zhì)變化確保對(duì)用戶體驗(yàn)沒(méi)有影響。
總結(jié)
veImageX算法降本除了在如上兩大場(chǎng)景應(yīng)用之外,壓縮方面也做了很多嘗試,在對(duì)比傳統(tǒng)WebP場(chǎng)景下可以節(jié)省超30%體積,啟用自適應(yīng)質(zhì)量壓縮可以帶來(lái)至少7%的體積節(jié)省。
同時(shí)在WebP、jpeg等傳統(tǒng)格式切換veIamgeX 調(diào)教后的自適應(yīng)壓縮質(zhì)量可帶來(lái)5%-10%的壓縮,“集智瘦身”可以帶來(lái)15%-20%的節(jié)省,在不區(qū)分圖像格式混合切量的前提下可以帶來(lái)約50%-80%的成本節(jié)省。
寫(xiě)在最后
針對(duì)不同的終端、不同的業(yè)務(wù)場(chǎng)景通過(guò)算法減少文件的體積,在節(jié)省服務(wù)商的傳輸帶寬之外,也可以降低用戶消費(fèi)端流量的消耗,提升用戶的加載速度。
圖片加載是目前幾乎所有的APP都具備的基礎(chǔ)能力,目前火山引擎veImageX已經(jīng)將上述方法形成端到端的解決方案對(duì)外輸出,幫助每一個(gè)互聯(lián)網(wǎng)企業(yè)用更低的成本達(dá)到更好的圖片加載效果。除了商務(wù)降本之外,也可以用更“綠色”的算法降本,為行業(yè)降本增效提供了一種創(chuàng)新可能性。
點(diǎn)擊veImageX-火山引擎,了解更多veImageX。