前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GTC 2024 | 使用NVIDIA GPU和VMAF-CUDA计算视频质量

GTC 2024 | 使用NVIDIA GPU和VMAF-CUDA计算视频质量

作者头像
用户1324186
发布2024-05-31 20:14:14
1580
发布2024-05-31 20:14:14
举报
文章被收录于专栏:媒矿工厂媒矿工厂

来源:GTC 2024 演讲题目:VMAF CUDA: Running at Transcode Speed 主讲人:Cem Moluluo,Jorge Estrada 视频链接:https://www.nvidia.com/en-us/on-demand/session/gtc24-s62417/ 博客链接:https://developer.nvidia.com/blog/calculating-video-quality-using-nvidia-gpus-and-vmaf-cuda/ 内容整理:阳浩宁 VMAF(视频多方法评估融合)已成为视频质量评估领域的一个著名标准,与 PSNR 和 SSIM 等传统指标相比,它更接近人类的感知。该质量衡量标准由 Netflix 开发,目前仍作为开源项目由 Netflix 维护。通过 NVIDIA 开源的 CUDA 加速 VMAF,延迟时间可以缩短 50 倍,为优化实时转码的 VMAF 铺平了道路,同时与基于 CPU 的解决方案相比,在功耗和成本方面也具有显著优势。NVIDIA GPU 配备了编码(NVenc)和解码(NVdec)专用硬件。对于 Snap 而言,CUDA 加速的 VMAF 可通过 NVdec 实现完全基于 GPU 的流水线,从而大大降低云实例的成本。除了节省约 50% 的计算成本外,Snap 现在还将 HEVC NVenc 与 CUDA 加速的 VMAF 结合使用,为其记忆功能提供了一种经济高效的转码、分析输出质量和根据 VMAF 调整编码选项的方法。

VMAF简介

传统的视频质量评价指标包括 PSNR 和 SSIM 等。而 VMAF 由 Netflix于 2017 年提出,是一种全参考的视频质量评价指标,分数范围由 0 到 100,越高代表质量越好。VMAF 试图准确地捕捉人类的感知,将人类视觉建模与不断发展的机器学习技术相结合,使其能够适应新的内容,在与人类视觉感知保持一致方面表现出色。VMAF 现在已经被 Netflix,Snap,V-Nova等公司采用。

VMAF-CPU

图1展示了 VMAF 在 CPU 上的实现方式。VMAF 使用参考图像和失真图像的几个关键指标来衡量视频质量,包括:(1)视觉信息保真度(VIF):量化原始内容的保存情况,反映感知到的信息损失 (2)加性失真测量(ADM):评估结构变化和纹理退化。它对噪音等加性失真特别敏感。(3)运动特征:对评估动态场景中的运动渲染质量至关重要。

图1 VMAF-CPU实现方式

这些指标被用作支持向量机(SVM)回归器的输入特征,该回归器对这些指标进行整合,计算出最终的 VMAF 分数。这种方法可确保全面、准确地反映人眼感知到的视频质量。VIF 和 ADM 等特征提取器不需要任何先验信息,它们只需要一个参考帧和一个失真帧作为输入。与其他两种不同的是,运动特征的提取还需要之前运动特征提取器迭代的信息(即具有帧间依赖性)。在 CPU 上计算 VMAF 时,可以将每幅图像的上述特征计算分配给多个线程。因此,VMAF 计算可以从更多的 CPU 内核中获益。在 CPU 上计算 VMAF 分数取决于必须提取的最慢特征。此外,运动特征得分的计算与时间有关,因此不能使用多线程。因此,每帧的 VMAF 分数延迟与可使用的线程数无关。性能分析表明,VIF 通常需要更多时间来计算,因此成为主要的限制。不过,线程数量越多,以 FPS 为单位的 VMAF 的吞吐量就越大。

图2 VMAF并行计算示意图

VMAF-CUDA

VMAF 的 CUDA 实现中为特征提取器设置了 CUDA 核心,并针对 GPU 进行了优化,计算流程也从为特定的特征提取器分配部分 GPU 计算资源以进行并发计算改成了为每个特征分配整个 GPU 计算资源并按顺序进行计算,如图3所示。此外,VMAF-CUDA还引入了帧并行计算,CUDA 核心数会随着帧的分辨率增高而增多。

图3 VMAF-CUDA实现方式

使用 CUDA 计算时,输入图像可以位于 CPU 或 GPU 上。CPU 上的图像在计算时会被迅速上传至 GPU,而 GPU 上的图像可从 NVENC/NVDEC 或 CUDA 内核等来源获得。整个 GPU 实现包括特征提取器的计算和进出 GPU 的内存传输,它相对于 CPU 异步工作,只需要一个线程来运行。VMAF-CUDA 可以作为 VMAF-CPU 即插即用的替代。在实际的计算过程中,单个流程并不会占用全部的 GPU 资源,因此可以同时执行这些操作,更有效地利用资源。

图4 VMAF-CUDA的GPU使用情况

VMAF-CUDA 还可以加速 PSNR 计算。VMAF 和 PSNR 通常同时计算。我们的研究表明,如果 PSNR 与 VMAF-CUDA 一起在 CPU 上运行,那么 PSNR 将成为瓶颈,因为它需要通过 PCIe 总线从 GPU 内存中获取解码图像。PCIe 传输速度有限,会严重影响性能。为此,也可以使用 https://github.com/Netflix/vmaf/pull/1175 中的方法在 GPU 上计算 PSNR。

VMAF-CUDA的优势

VMAF-CUDA 可在编码过程中使用。NVIDIA GPU 可以在独立于 NVENC 和 NVDEC 的 GPU 内核上运行计算任务。NVENC 使用原始视频帧,而 NVDEC 则将输出帧解码到视频内存中。这意味着参考帧和失真帧都保留在视频内存中,并可输入 VMAF-CUDA。因此,由于 NVENC 不需要 GPU 计算资源,可以在编码过程中计算 VMAF。VMAF-CUDA 还可在转码过程中用于质量监控。将 H.264 比特流转码为 H.265 时,NVDEC 会对输入比特流进行解码,并将其帧写入 GPU VRAM(参考帧)。该参考帧使用 NVENC 编码为 H.265,可直接解码,从而产生失真的帧。这一过程将计算资源闲置,同时在 GPU 上进行转码,并将数据保存在 GPU 内存中。VMAF-CUDA 可以利用这些闲置资源计算分数,而无需中断转码,也无需额外的内存传输。因此,与 CPU 实现相比,VMAF-CUDA 是一种经济高效的选择。VMAF-CUDA 与 FFmpeg v6.1 完全集成,并支持 GPU 框架,以实现硬件加速解码。使用源代码链接 VMAF 和 FFmpeg 后,只需最新的 NVIDIA GPU 驱动程序即可执行,而且不需要事先了解任何 CUDA 知识。FFmpeg中的VMAF-CUDA相对于CPU异步执行GPU,使其自由执行其他任务。

VMAF评估

我们使用 VMAF-CUDA 测量了两个指标:(1)单帧 VMAF 延迟:计算三个特征提取器以获得单帧 VMAF 分数所需的时间 (2)总吞吐量:计算视频序列的VMAF分数的速度 用于测试的硬件是 56C/112T 双 Intel Xeon 8480 计算节点和单个 NVIDIA L4 GPU。

VMAF延迟改进

图5 NVIDIA L4与双 Intel Xeon 8480上单张图像的特征提取器相对加速

在较低的分辨率(如1080p)下,VMAF-CUDA没有完全利用 NVIDIA L4 的算力。所以在 4K 分辨率下能够看到更大的提升。

图6 计算单帧VMAF分数的延迟

NVIDIA L4 GPU 的延迟时间是每个特征提取器在 GPU 上按顺序运行时的平均运行时间之和。双 Intel Xeon 计算节点的平均延迟时间由最慢的特征提取器决定,因为它们在多个内核上并行运行。计算单帧的 VMAF 分数时,VMAF-CUDA 在 4K 和 1080p 下分别比双 Intel Xeon 8480 快 36.9 倍和 26.1 倍。

FFmpeg性能改进

我们通过计算 FFmpeg 中的 VMAF 来测量吞吐量(单位:FPS)。FFmpeg 可将编码后的视频直接读入 GPU 或 CPU RAM,而不是像 VMAF 工具那样从磁盘读取原始比特流。

图7 双 Intel Xeon 与 NVIDIA L4 在 FFMPEG 中计算 VMAF 分数时达到的 FPS

NVIDIA L4 在 4K 和 1080p 分辨率下分别达到 178 FPS 和 775 FPS,而双 Intel Xeon 8480 计算节点在 4K 和 1080p 分辨率下分别达到 64 FPS 和 176 FPS。在处理单个视频流时,4K 序列的速度提高了 2.8 倍,1080p 提高了 2.5 倍。

成本分析

在成本分析中,我们以数据中心常见的标准 2U 服务器为基础进行计算。图 8 展示了基于 2U 双 Intel Xeon 系统总计算性能的测试结果,该测试使用多个 FFmpeg 进程使 CPU 达到完全饱和。图中还显示了 2U 八 L4 服务器的 FPS 数值。

图8 充分利用设备的情况下计算VMAF分数实现的FPS

表1列出了 2U 服务器计算相同数量的视频帧的 VMAF 的成本。将 8 个 NVIDIA L4 与双 Intel Xeon 8480 相比,NVIDIA 系统可节省高达 75% 的成本。

表1 在一台配备 CPU 或 GPU 的 2U 服务器中计算 VMAF 的成本

成功案例

Snap

目前,Snap 正在将 VMAF-CUDA 用于 Snapchat Memories,以确定特定编码是否符合质量阈值,并在需要时重新转码。VMAF-CUDA 的引入优化了处理流程。以前,VMAF 计算的高计算成本阻碍了 Snap 使用最佳转码设置。但是,有了 VMAF-CUDA,他们可以在每次转码后评估 Snapchat Memories,并以极小的开销使用优化设置重新编码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • VMAF简介
  • VMAF-CPU
  • VMAF-CUDA
  • VMAF-CUDA的优势
  • VMAF评估
    • VMAF延迟改进
      • FFmpeg性能改进
        • 成本分析
        • 成功案例
          • Snap
          相关产品与服务
          GPU 云服务器
          GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档