智能存储HEIC&AVIF图片硬件压缩方案详解

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 图片格式的进化一图抵千文,因此很多的应用都会用图片来表现丰富的内容。提起图片格式,大家耳熟能详的有JPEG,PNG,WEBP等等,这也是当前互联网上主流的图片格式,然而在过去的十年,随着技术的发展,图片的压缩技术又取得了长足的进步,新的图片格式已经涌现,使用这些传统的图片格式已经不再是最优的选择。在过去的10年移动互联网快速发展,使网络速度越来越快,但是手机的摄像头分辨率也越来越高,用户手机的UG

图片格式的进化

一图抵千文,因此很多的应用都会用图片来表现丰富的内容。提起图片格式,大家耳熟能详的有JPEG,PNG,WEBP等等,这也是当前互联网上主流的图片格式,然而在过去的十年,随着技术的发展,图片的压缩技术又取得了长足的进步,新的图片格式已经涌现,使用这些传统的图片格式已经不再是最优的选择。

在过去的10年移动互联网快速发展,使网络速度越来越快,但是手机的摄像头分辨率也越来越高,用户手机的UGC图片都在10MB左右。不管是在PC还是移动端,图片(及视频)占据了流量的比例比重越来越大,应用提供商为图片传输的流量的成本也越来越高。如何让图片在保证质量的前提下缩小图片体积,是一件值得探索的事,如下图所示,随着图像压缩算法的不断升级迭代,图像的压缩率也不断提高。

 

主流图片格式中目前最为先进的是苹果主推的HEIC格式和谷歌领衔的AVIF格式,相对于JPEG格式在保持图片质量不变的情况下,有60%~80%的体积节省,能够大大节省各级网络的流量成本,同时在弱网环境下也能够极大提高用户体验。

HEIC图片格式采用的是HEVC编码标准的帧内编码技术。它是在2015年制定的图片格式标准,相比于JPEG图片格式压缩率提高了60%以上。目前在业界已经得到了比较广泛的应用,生态比较完善,苹果手机相机的默认保存格式是HEIC格式,且提供了HEIC的硬件解码,Android 9系统也已经原生支持了HEIC的解码,另外还有丰富的成熟开源软件HEVC解码器比如libhevc,libde265等等,现在美中不足的是主流浏览器的HEIC解码支持还比较欠缺。

AVIF图片格式采用的是AV1编码标准的帧内编码技术,在HEIC格式的基础上进一步提高了10%左右的压缩率。2015年Google联合亚马逊、微软、Intel等成立了Alliance for Open Media(开放媒体联盟AOM),旨在制定全新、开放、免版权费的视频编码标准和视频格式,AV1是开放媒体联盟推出的第一代视频标准。2019年基于AV1技术的图片格式AVIF也正式推出,具有高压缩比,免授权费,生态完善等特点。

AVIF标准得到了Google的强力推广和支持,虽然它诞生的时间不久,但Chrome和Android平台上都已经原生支持。在软件解码器上,Google开源了libgav1,支持ARM平台和x86平台,解码效率上已经接近HEIC甚至WEBP,未来移动端上会有更好的体验。鉴于Chrome浏览器的原生支持,其他的浏览器也不断的跟随支持AVIF标准。以下是AVIF目前在主流浏览器的原生支持情况,相信在不久的将来,绝大多数浏览器也会原生支持AVIF了。

 

图片来源:https://caniuse.com/?search=avif

HEIC&AVIF应用难点

HEIC和AVIF格式具有很出色的压缩能力,但是目前图片分发应用在使用这两种新格式的时候,会面临一些挑战。

首先是算力上的挑战,根据算法两者的算法复杂度我们做简单的测算,同样的一张图片,HEIC、AVIF压缩算法的计算量分别是JPEG压缩算法的300倍和1500倍,如下图所示:

 

从计算成本的角度上考虑,一台普通的CPU服务器,满载运行HEIC或者AVIF编码,只能够达到数百QPS,计算成本非常高,如果图片编码后被分发的次数不够多,计算成本的上升甚至可能超过流量节省带来的成本下降。

从编码延迟的角度来看,由于计算量非常庞大,所以对于大尺寸的图片,进行HEIC或者AVIF编码一张图片可能需要数秒的时间,在某些场景下,这样的延迟会导致用户体验下降。

其次还有解码上的挑战,由于目前HEIC和AVIF属于比较新的格式,在生态上还没有做到能够原生百分百支持,在客户端使用老版本系统的环境下,没有好的解码工具能够方便的进行集成到应用中实现对HEIC或AVIF的解码显示,使用开源的工具去解码又会有一定的开发和维护成本。需要有一个高性能的解码库来满足这个需求。

阿里云智能存储图片服务团队针对算力和解码上的挑战,设计研发了HEIC&AVIF高级压缩解决方案,通过一系列软硬件结合的优化,优化了计算效率,使得编码性能大幅度提高,编码延迟显著,编码从效率有了近百倍的提升,并在图片解码上进行了计算逻辑与汇编的优化,提供了高性能解码SDK来方便客户在端侧接入。

我们把这套方案集成到了OSS 服务上,在最靠近数据的地方做了数据压缩,以Serverless 化的能力提供端到端的解决方案。

图片服务介绍

OSS图片服务是提供的Serverless化的图片处理能力,是对存储在OSS上的各种格式的图片,提供实时压缩转化(低压缩编码转化成高压缩编码互转,如JPEG和 AVIF格式互转)、缩放裁剪、打水印、质量变换、模糊等图片变换操作,变换后结果从OSS请求链接实时返回结果。

如下图所示,用户请求只要在原图url后添加x-oss-process相关不同图片变换参数,直接返回处理后的结果。这种在存储数据源头进行处理的架构有很大的成本优势,相比传统的从OSS读取原图在客户自建图片后端进行处理,首先客户不需要进行自建图片服务后端,节省了大量的服务器和运维费用,其次处理后的图片在多数场景下也会比原图体积小,这样各级网络的带宽成本也能够得到较大的降低。这个天然的优势也使得图片服务在电商,IM,社区等客户场景得到了广泛的应用,日调用量达到数百亿次。

 

FPGA异构计算方案

前文提到HEIC或AVIF编码时计算量过高,如果使用纯CPU的方案来处理这种计算密集型任务,成本过高且延迟很不理想,在经过了仔细的评估和规划之后,智能存储图片处理团队推出了一种更为先进的FPGA异构计算方案,使用FPGA加速板卡和CPU进行协作,如下图所示,把一些计算密集的负载较大的任务使用FPGA做了加速,其他轻量级的处理、调度控制和业务逻辑放在host CPU上的软件进行处理。

 

典型的图片处理的流程是先对原图进行解码,对解码后的原始图像按需进行缩放,水印,裁剪等按需处理,之后再将处理好的图像进行目标格式编码压缩,对线上场景的分析我们发现除了编码过程会耗费较高算力之外,缩放和解码也会成为制约单机性能的瓶颈,我们将编码、解码、缩放都offload到了FPGA上进行处理,获得了非常好的加速效果,下面我们分别简单介绍一下FPGA上的主要模块。

JPEG Decoder模块

图片处理Pipeline的第一步是对原图进行解码,在目前的业务场景里,绝大部分的原图格式是JPEG格式,所以JPEG解码也占用了可观的CPU使用比例,是整体服务的速度瓶颈之一。另外考虑到解码过后的YUV原始数据体积较大,在CPU和FPGA进行传输会对PCIE带宽造成较大压力,把解码过程放在FPGA上可以有效减少PCIE的带宽占用。我们实现了一个JPEG Decoder的IP,采用硬件JPEG Decoder之后,我们整体的处理能力较软件版本JPEG上升了一倍。以下是JPEG Decoder模块的架构图:

 

JPEG Decoder设计的一大重点在于解码兼容性和硬件面积的考量,JPEG标准中的feature如果全部实现会导致硬件面积占用高且影响整体系统工作频率,我们实现了JPEG标准中比较主流的feature,对于比较冷门的feature去做CPU软件降级处理。

另一个设计重点是JPEG Decoder的容错机制,原图损坏可能会导致HuffmanDecoder模块进入挂死状态,甚至影响整个系统,我们通过timeout机制和错误识别机制对这种情况进行了规避,自项目上线以来服务了海量的图片处理,完美规避了线上的所有bad case。

RESIZE模块

在图片转码处理中,对图像进行缩放是业务上的一个很强的需求。高质量的缩放算法,需要比较大的滤波器抽头数,从而对CPU算力是一个很大的挑战,如果不进行加速处理,要么整体系统就达不到较理想的QPS目标,要么就采用比较低的抽头数进行处理,但缩放后的图像的主观质量会受到很大影响。经过实测,有了硬件RESIZE加持,整体QPS较软件版本RESIZE提高了一倍。

该模块采用软硬件协同设计,image_service端也即CPU Host发送原图YUV信息,以及Controls控制信息至FPGA 板卡。FPGA板卡触对应kernel进行处理,输出降采后的YUV信息并发送至host端。以下是RESIZE的实现架构图。

 

RESIZE的计算逻辑是由纵向和横向的两组多抽头滤波器组成,该滤波器具有较高的抽头数。能够有效克服较高倍数缩小下的图像频域混叠问题。

image encoder模块

Image Encoder负责图片服务的编码压缩部分,是整个图片处理pipeline的最大计算热点。经测试对比,较纯软件的方法,集成硬件Image Encoder使得单机处理能力提高了15倍。我们以AVIF Encoder为例进行介绍。以下是AVIF编码核的硬件架构图:

AVIF编码模块是实现压缩质量和压缩速度核心的关键,因为需要极高的算力,也就意味着需要极高的频率和硬件资源。为了达到极致的压缩质量和处理速度,我们的AVIF编码IP做了算法和工程上的多处优化,并且采用了手写RTL的设计流程,仅RTL代码有十几万行。我们在硬件实现的每个细节上都做到了极致的性能和面积优化,核心的逻辑工作在FPGA的工作频率物理极限。在每处关键路径设计时不仅要考虑自身时序收敛问题,而且还要把控对整体布局布线的影响,也要兼顾对RESIZE和JPEG等模块的时序影响,充分利用硬件资源、工作频率和标准中带来较多增益的工具。

       整体上AVIF硬件版上的压缩率在当前主流的图片格式中最高,联合WEBP、HEIC和x265平行对比,结果如图。

 

下表给出了HEIC_FPGA,AVIF_FPGA在HEVC标准测试下的压缩性能的比较,anchor为x265 placebo (tune psnr)档次,码率的节省采用BDBR计算得到

从上表可以看出,我们研发的HEIC_FPGA和AVIF_FPGA编码服务在平均压缩性能上都超过x265 placebo (tune psnr)的压缩性能,其中AVIF_FPGA编码较x265 placebo (tune psnr)的码率节省平均在15%以上。

使用方式

云侧

AVIF压缩功能使用起来简单方便,可以通过文件URL请求OSS图片时同步完成图片处理和转换格式,以AVIF为例只需只需在GetObject请求中带上AVIF的处理参数(x-oss-process=image/format,avif)即可,如下示例,

原图

http://image-compress-demo.oss-cn-zhangjiakou.aliyuncs.com/demo.jpg

转换为AVIF

http://image-compress-demo.oss-cn-zhangjiakou.aliyuncs.com/demo.jpg?x-oss-process=image/format,avif

转换为WEBP

http://image-compress-demo.oss-cn-zhangjiakou.aliyuncs.com/demo.jpg?x-oss-process=image/format,webp

转换为HEIC

http://image-compress-demo.oss-cn-zhangjiakou.aliyuncs.com/demo.jpg?x-oss-process=image/format,heic

如果用户已经在阿里云上面开通了OSS,可以按照上面的说明使用OSS的图片处理。否则,也可以参考阿里云官方网站云起实验室实验《搭建基于OSS的图片分享网站》 搭建图片分享网站,体验OSS的图片处理服务。

移动端解码SDK优化

为了降低用户的使用门槛,进一步提升用户的体验,阿里云还提供了对应的客户端侧的解码SDK。它提供了用户友好的接口,在解码库上做了大量解码计算逻辑以及汇编的优化提升了解码性能,使得用户在占用更小的系统资源前提下进行解码。端侧SDK可以参考官网文档。

未来展望

目前图片压缩领域在三个方向上持续提升现有的压缩性能和用户体验,第一个方向是在传统的混合架构的图片压缩领域,比如VVC,其I帧的压缩性能较HEIC(HEVC)有25%的性能提升;第二个方向是AI图片编码领域,CLIC 每年都会举办挑战赛,运用先进的技术挑战传统的图片压缩的性能,令人振奋的是目前的基于AI的图片压缩技术接近甚至是超过传统的压缩技术,提供更好的压缩性能;第三个方向就是图片增强与主观编码领域,基于内容分析的图像增强技术配合基于人眼敏感度的主观压缩技术不仅能增强用户体验,而且还能提供更好的压缩性能。阿里云智能存储图片服务团队致力于为用户提供更好的观看体验以及更低的带宽消耗,紧跟先进技术发展,不断挑战自我,持续为用户输出业内领先的、低成本高压缩、稳定可靠的图片处理压缩解决方案。近期还会推出极致主观图片压缩服务,敬请期待!

相关文章
|
7月前
|
机器学习/深度学习 开发工具 计算机视觉
视觉智能平台常见问题之视频文件较大上传时可以分段上传或者切割视频如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
1月前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
42 0
|
3月前
|
弹性计算 关系型数据库 Serverless
告别资源瓶颈,函数计算驱动多媒体文件处理方案:https://www.aliyun.com/solution/tech-solution/fc-drive-file
本文介绍了一种基于阿里云的一键部署解决方案,利用云服务器ECS、RDS MySQL、OSS、函数计算FC及MNS等服务,实现高效的多媒体文件处理。方案通过事件驱动机制,将文件处理任务解耦,并自动弹性扩展,按需付费,简化部署流程,提高处理效率。本文还提供了详细的部署步骤与体验反馈,展示了从配置到文件处理的全过程。
|
4月前
|
弹性计算 关系型数据库 Serverless
函数计算驱动多媒体文件处理:高效、稳定与成本优化实践
本次测评的解决方案《告别资源瓶颈,函数计算驱动多媒体文件处理》展示了如何利用阿里云函数计算高效处理多媒体文件。文档结构清晰、内容详实,适合新客户参考。方案提供了一键部署与手动部署两种方式,前者简便快捷,后者灵活性高但步骤较多。通过部署,用户可体验到基于函数计算的文件处理服务,显著提升处理效率和系统稳定性。此外,测评还对比了应用内处理文件与函数计算处理文件的不同,突出了函数计算在资源管理和成本控制方面的优势。
22718 19
|
4月前
|
存储 Serverless 数据库
告别资源瓶颈,函数计算驱动多媒体文件处理
在数字化浪潮中,体验了《告别资源瓶颈,函数计算驱动多媒体文件处理》解决方案。详尽的文档和清晰的引导让上手变得容易,尽管高级功能的文档仍有提升空间。部署时,代码示例提升了效率,虽遇少许配置难题,但最终解决。性能表现卓越,稳定性强,按需付费有效控制成本,极力推荐企业采用此方案加速云端转型。同时,配套的云产品如存储、计算及数据库服务等表现出色,操作简单易懂,适合各水平用户。
|
4月前
|
人工智能 运维 安全
《告别资源瓶颈,函数计算驱动多媒体文件处理》的测评
《告别资源瓶颈,函数计算驱动多媒体文件处理》的测评
|
4月前
|
存储 弹性计算 Serverless
函数计算驱动多媒体文件处理方案评测体验分享
近期参与了函数计算处理多媒体文件的评测。阿里云提供了丰富的文档资源,覆盖实施全流程,适合新手上手;但部分配置细节说明不足,有待完善。示例代码优质且实用,便于学习与二次开发。函数计算展现出良好的性能与稳定性,并采用按需计费模式,有助于企业节省成本。配合阿里云生态中的其他产品,如云数据库与云存储,能有效提升多媒体文件处理的整体效能。
74 10
|
4月前
|
编解码 运维 监控
体验《告别资源瓶颈,函数计算驱动多媒体文件处理》
体验《告别资源瓶颈,函数计算驱动多媒体文件处理》
|
4月前
|
存储 Serverless API
测评《告别资源瓶颈,函数计算驱动多媒体文件处理》解决方案
该体验报告指出,引导文档详尽,涵盖初始设置与示例代码,但需增加常见问题解答及更多高级功能实例。提供的代码示例实用但在处理大文件时存在超时和权限问题。性能方面,处理多媒体文件表现出色,系统稳定,成本控制适宜中小企业。函数计算、对象存储与API网关等云产品在实际应用中表现出色,尤其适用于需要弹性处理的企业场景。建议增强常见问题解答部分以提升用户体验。
65 0
|
5月前
|
消息中间件 存储 Java
三类代码协同模式问题之压缩异常输出以提高性能和节省存储空间的问题如何解决
三类代码协同模式问题之压缩异常输出以提高性能和节省存储空间的问题如何解决