veImageX演进之路:我用图像压缩算法为公司省了30%成本
本文作者张锡平,火山引擎视频云veImageX产品负责人。
前言
日前,第五届深度学习图像压缩挑战赛(以下将简称“ CLIC 大赛”)比赛结果公布,首次参赛的火山引擎视频云多媒体实验室夺得视频压缩赛道第一名。压缩技术对于图像、视频应用十分重要。在保证同样主观质量的前提下,如何将图像压缩到更小体积便于互联网信息传输,火山引擎视频云团队不断突破压缩技术“天花板”。
字节跳动在公司成立之初就建设了图像处理平台,起初主要服务于今日头条APP的图文资源。随着业务扩展,后逐步服务于抖音图集、短视频封面、图虫等几乎用户能看到的所有图片展示场景。火山引擎视频云团队将字节跳动图像处理的实践,整理为《veImageX演进之路》系列,将从产品应用、后端技术、前端技术、算法、客户端SDK 详细解读字节跳动背后的图像压缩技术。
veImageX是火山引擎基于字节跳动内部服务实践,推出的图像一站式解决方案 ,覆盖上传、存储、处理、分发、展示、质量监控全链路应用。
一张图片从上传到在用户端消费展示,主要包括带宽、存储、计算三大部分资源的消耗,成本大概占比7:2:1。其中带宽占比甚至可能比这更高,因此针对带宽的节省优化是重要一环。
veImageX架构简图
veImageX可以简化理解为包括三大组件:分发组件(CDN)、存储组件、基础媒体处理组件,组件有效组装到一起形成一整套解决方案。降带宽的本质是通过压缩降低传输的文件大小:图像在未压缩之前体积都很大,因此我们将目标设定为在保持用户主观体验不受损的前提下降低图像传输的体积,选择了基于HEIF自研的图像编解码算法来压缩体积。
为不降低应用性能,需要考虑耗时+带宽+画质等多个因子:对性能的影响主要是用户加载耗时(图片加载排队耗时、图片网络耗时、图片解码耗时),对成本影响主要是用户传输流量或者CDN分发带宽,对画质影响主要是画质清晰度和美学等指标;
基于以上思路,我们以下图为例,来看各环节我们是如何优化的:
双端图像压缩
体积对比
线上图像以各种形式存在:iOS 主要是jpeg格式、Android端以webp为主,以典型的jpeg、png、webp为例,实验室多次抽样验证发现,转换到我们自研的HEIF图片格式,体积可以节省30%以上。
图片对比:黄色部分为自研图片格式,蓝色部分为原图格式
画质对比评估
压缩体积是大目标,保证画质不受影响是第一要义;在画质评估阶段,我们选取了一些客观指标以及我们自己训练的无参考的清晰度评估方式(VQScore算法),对图像清晰度和美学进行整体评估:
q值是在自研算法下调教数值对清晰度的影响
q值是在自研算法下调教数值对美学的影响
通过如上图可以看出,新算法压缩并不会带来很大的画质波动,基本和压缩前对比差异不大。
解码性能对比
要保证用户侧的加载耗时,必须要考虑新的算法在客户端解码的性能,而「按照我们的设计预期用户的解码耗时的增加值」需要小于「由于文件体积的减少带来的耗时」才能保证影响加载耗时变大,我们调研开源的一些图片解码性能,发现业界其他解码器一张图像解码耗时在150MS~250MS 之间,开源实现暂时无法达到要求,于是我们做了一些自行调教:
经过如上调教,我们基本可以将图片的解码耗时控制在对齐webp的解码耗时时间。
实验设计
秉承科学严谨的原则,我们选择实验验证时,需要充分考虑对照组和实验组变量尽量减少:(veImageX图像压缩访问方式是极简的,只需要将原来的url之后追加一个图像目标模板即可如下表格中隐去了真实的业务信息)
数据论证
实验流量对比
经过线上实验,随机选取了一组流量进入实验过程,经过一段时间运行,我们发现 p-xx-a 的域名带宽和p-xx-b的域名带宽形成显著差异;我们从流量上计算(2.53PB-1.71PB)/2.53PB*100 = 32.4%,因此评判,在严格的和webp对比下,带来至少 30%的带宽节省验证符合预期。
当然,除了自行验证之外,我们也尝试过将线上其他格式(无需区分webp、jpg)与线上自研格式对比,节省比例更优。
验证数据参考
通用的“集智瘦身”
降成本是一个演进过程,在Android 和iOS 双端端原生解决了带宽问题后,在H5端运行,自研算法解码端面临在浏览器兼容性和性能支持的问题。因此我们需要考虑,无需集成客户端SDK的方式能够带来体积的节省,这里我们研发了“集智瘦身”的方式;这个设计初衷是为了解决业务方接入推广难、集成SDK覆盖难等难题,同时还要满足成本节省的目的。
集智瘦身的原理是通过深度学习的方式对传统webp、jpeg甚至png等格式进行瘦身压缩,而不需要集成客户端解码库。
相比于自研编码方式需要集成SDK之外,集智瘦身的接入简单很多,只需要将域名指向到veImageX服务就可以享受降本服务。
演进方式A:有些业务线在实际推进过程中虽然比较复杂,但仍然可以按照veImageX 定义的 "~tplv "模板的方式来应用,因为我们将此算法内置到模板中可以自由选择,不限定任意格式,同时在Web与Chrome场景下也可以选择AVIF+WebP+集智瘦身的方式来使用:
这种方式,不需要SDK的接入,只需要服务端改造veImageX的模板即可,改成指定的格式,配合自适应的模式来实现H5端的降本。
演进方式B流程
这种方案,对业务的侵入性几乎没有,会根据线上真实的图像做判断,合适的图像自动进行瘦身处理,通过动态监测线上图像输入前后的画质变化确保对用户体验没有影响。
总结
写在最后
推荐阅读
欢迎关注