写点什么

veImageX 演进之路:我用图像压缩算法为公司省了 30% 成本

  • 2022-11-08
    北京
  • 本文字数:2638 字

    阅读完需:约 9 分钟

veImageX 演进之路:我用图像压缩算法为公司省了30%成本

前言


日前,第五届深度学习图像压缩挑战赛(以下将简称“ 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 之间,开源实现暂时无法达到要求,于是我们做了一些自行调教:




实验室下:自研解码和开源解码性能对比,耗时越低越好,单位:ms,其中绿色为自研解码


经过如上调教,我们基本可以将图片的解码耗时控制在对齐 webp 的解码耗时时间;

● 实验设计:

秉承科学严谨的原则,我们选择实验验证时,需要充分考虑对照组和实验组变量尽量减少:(veImageX 图像压缩访问方式是极简的,只需要将原来的 url 之后追加一个图像目标模板即可如下表格中隐去了真实的业务信息)


分组

域名(隐去业务信息)

格式控制

访问姿势

操作版本控制

对照组

p-xx-a.byteimg.com

仅下发webp

https://p-xx-a.byteimg.com/tos-i-xxx/imagex-previ.jpg~tplv-xxx-imagexa.webp

Android 5.0+ 避免 低端机干扰数据

实验组

p-xx-b.byteimg.com

仅下发heic

https://p-xx-a.byteimg.com/tos-i-xxx/imagex-previ.jpg~tplv-xxx-imagexa.heic

Android 5.0+ 避免 低端机干扰数据

● 数据论证:




经过线上实验,随机选取了一组流量进入实验过程,经过一段时间运行,我们发现 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:随着推动过程中,我们发现仍然有些什么都不能修改的业务,针对这样的业务,我们支持了只需要改动 DNS 就可以实现"集智瘦身"的方案。当然,图像经过处理之后文件的 MD5 值会发生变化,因此需要确认业务方没有对文件的 MD5 进行校验


  这种方案,对业务的侵入性几乎没有,会根据线上真实的图像做判断,合适的图像自动进行瘦身处理,通过动态监测线上图像输入前后的画质变化确保对用户体验没有影响。


总结

veImageX 算法降本除了在如上两大场景应用之外,压缩方面也做了很多尝试,在对比传统 webp 场景下 可以节省 30%+体积,启用自适应质量压缩可以带来至少 7%的体积节省;同时在 webp、jpeg 等传统格式切换 veIamgeX 调教后的自适应压缩质量可带来 5~10%的压缩,集智瘦身可以带来 15%~20%的节省,在不区分图像格式混合切量的前提下可以带来约 50-80%的成本节省。


写在最后

针对不同的终端、不同的业务场景通过算法减少文件的体积,在节省服务商的传输带宽之外,也可以降低用户消费端流量的消耗,提升用户的加载速度。


图片加载是目前几乎所有的 APP 都具备的基础能力,目前火山引擎 veImageX 已经将上述方法形成端到端的解决方案输出给全行业,帮助每一个互联网企业用更低的成本达到更好的图片加载效果。除了商务降本之外,也可以用更“绿色”的算法降本,为行业降本增效提供了一种创新可能性。


了解更多 veImageX,点击官网地址:https://www.volcengine.com/products/imagex,欢迎使用~


作者简介:

张锡平,火山引擎视频云 veImageX 产品负责人

2022-11-08 13:284297

评论 1 条评论

发布
用户头像
heif貌似苹果设备的图片格式?
2022-11-08 14:43 · 广东
回复
没有更多了
发现更多内容

设计模式简要介绍

六月的雨在InfoQ

Java 设计模式 单例模式 23种设计模式 9月月更

Sophon AutoCV Q&A大放送:如何加速视觉模型生产和落地(下篇)

星环科技

ODC 3.4.0 现已上线,让数据库开发更简单

OceanBase 数据库

阿里云弹性计算SRE实践:亿级调用量下的预警治理

TakinTalks稳定性社区

预警 告警体系 监控治理 SRE实践

2022年汽车智能座舱市场分析

易观分析

汽车 智能座舱

如何做有价值的企业知识管理?

Baklib

创业 知识管理 企业 知识库

音视频开发成长之路与音视频知识点总结

C++后台开发

WebRTC ffmpeg 音视频开发 流媒体服务器开发 嵌入式音视频开发

如何让用户用好你的在线设计协作工具?帮助中心来解决

Baklib

5 大核心能力+1 套全局防护策略,星环科技 Defensor 构建企业数据安全护城河

星环科技

Elasticsearch安全又双叒叕出问题? 搜索引擎该怎么选

星环科技

星环科技发布工业互联网解决方案,场景化赋能制造业转型升级

星环科技

高效的知识管理应具备的元素

Baklib

知识管理 高效 知识库

软件测试 | 测试开发 | Android动态权限详解

测吧(北京)科技有限公司

测试

MobTech袤博科技接入全国SDK管理服务平台,共建数智安全生态 | 新闻速递

MobTech袤博科技

大数据 数据安全

软件测试 | 测试开发 | 测试人生 | 资深外包逆袭大厂测试开发:面试官的“歧视”表情深深刺痛了我

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 测试人生 | 双非院校,从外包到外企涨薪85%,他的涨薪秘籍全公开

测吧(北京)科技有限公司

测试

SQL 改写系列十:半连接转内连接

OceanBase 数据库

Sophon AutoCV Q&A大放送:如何加速视觉模型生产和落地(上篇)

星环科技

星环科技多模型数据统一存储的大数据分布式存储平台方案分享

星环科技

金九银十!100页6W字Java面试题,去大厂面试的程序员都说被问到过!

收到请回复

Java 云计算 开源 架构 编程语言

优雅的MVC思想

叫练

出海人反脆弱,那些遭遇「刺客」突袭的虐心瞬间

融云 RongCloud

白皮书 程序员、

原生实现异步处理利器 —— Observable

掘金安东尼

前端 9月月更

关于iPhone 14 Pro 的灵动岛设计的思考

宇宙之一粟

iphone 思考 设计 9月月更

软件测试 | 测试开发 | web自动化测试-文件上传与弹框处理

测吧(北京)科技有限公司

测试

为企业产品实现随时随地的客户服务

Baklib

产品 企业 客户服务 帮助中心 降低成本

互联网大厂裁员30%,仍靠第3版Java多线程编程笔记成功逆袭大厂

程序知音

Java 多线程 多线程与高并发 java架构师 后端技术

自动化测试如何区分用例集合

老张

自动化测试 测试用例

【9.9-9.16】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

JavaScript之面向对象

楠羽

JavaScript 笔记 9月月更

禅道的Bug管理流程介绍

禅道项目管理

测试 禅道 bug管理

veImageX 演进之路:我用图像压缩算法为公司省了30%成本_产品_张锡平_InfoQ精选文章