NVIDIA Maxine Video Effects SDK 編程指南 - 实践小记
NVIDIA Maxine Video Effects SDK 編程指南 - 实践小记
本篇博客重点只说Video Effect的部分,此外还有Audio Effect的部分、还有AR部分,不在本篇范围内。本文由重庆Debug原创
NVIDIA Maxine Video Effects支持基于 AI 的视觉效果,这些效果可以输入标准网络摄像头画面数据,同时也可以传入一张图或者来自ffmpeg解码器的帧数据,让使用者可以轻松集成到视频会议和视频特效内容创建管道中;
底层深度学习模型使用 NVIDIA? TensorRT? 通过 NVIDIA AI 进行优化以实现高性能推理,使开发人员能够在实时应用程序中应用多种效果。
NVIDIA Maxine Video Effects提供了一系列TensorRT训练好的模型,
截止到本稿前2023年6月13日,可以做到的功能有下列5个:
1. Virtual Background 虚拟背景(抠人物)
2. Artifact Reduction 伪影减少
3. Super Resolution 超分辨率
4. Upscaler 放大器(轻量版超分辨率)
5. Video Noise Removal 视频噪音消除
硬件要求:
Video Effects SDK要求必须电脑至少拥有一个GPU是基于NVIDIA Turing?或NVIDIA Ampere?或NVIDIA Ada?架构并具有TensorRT核心功能。
运行时软件要求:
Windows系统必须满足64-bit Windows 10或更新版本
NVIDIA Graphics Driver for Windows必须满足版本号大于等于511.65
分发包需用户提前去英伟达官网(NVIDIA Broadcast)下载安装对应显卡所需的模型及dll文件,如下图所示:
开发时软件要求:
Microsoft Visual Studio 2017或更新的版本
CMake 3.12或更新的版本
下面分别介绍这些功能和可以调控的参数及演示效果:
1. Virtual Background 虚拟背景(抠人物)
虚拟背景可以分割和屏蔽视频或图像中的背景区域,以启用 AI 支持的背景去除、替换或模糊。
限制条件:
a). 用于虚拟背景的原图像的尺寸必须大于等于:512x288(即宽和高都要同时满足大于等于这个数)。
b). 虚拟背景的效果在一个人坐在相机前录制的视频上是可达到最佳的效果。该功能在全身视频、场景中的多个人或与前置摄像头偏差太大的摄像头角度上表现会有不佳。
c). 图像文件的纵横比建议为 16:9,才能获得最佳效果。
d). 输入的图像是BGR,每个像素是一个 24 位无符号字符值,因此每个像素分量为 8 位
可调的参数:
Mode:
0:质量优先模式、1:性能优先模式
Composition Mode:
原图:
0(显示遮罩 - compMatte)
1(在前景上覆盖遮罩 - compLight)
2(复合绿色 - compGreen)
3(复合白色 - compWhite)
4(显示输入 - compNone)
5(在指定的背景图像上合成 - compBG)(可以自己设置背景图片,即可替换成自己提供的图片)
6(模糊图像的背景 - compBlur)
2. Artifact Reduction 伪影减少
Artifact Reduction,减少编码视频的压缩伪影,同时保留原始视频的细节。
此伪影滤波器可减少编码器造成的伪影,例如低比特率视频中的阻塞伪影、振铃、蚊音,同时保留原始视频的细节。
编码器伪影减少已针对 H.264 编码器进行了优化。
使用条件:
a). 输入的图像是BGR(GPU 缓冲区中提供),每个像素分量都要求是一个 32 位浮点值(fp32)。
b). 输出图像尺寸会和输入一致,同样也是BGR平面格式,每个像素分量也是32位浮点值。
c). 输入的视频的尺寸支持区间是:90p ~ 1080p
可调的参数:
Mode:
0:可去除较少的伪影,更好地保留低梯度信息(适用于更高比特率的视频)
1:去除较多的伪影(更适合较低比特率的视频)
3. Super Resolution 超分辨率
全称:超级分辨率,生成具有高达 4 倍高质量缩放的细节增强视频,同时还减少了块状/噪声伪影并保留了纹理和内容。 它适用于升级有损内容。
超分辨率滤镜在保留内容的同时,提高了低分辨率视频的分辨率,增强了细节,并锐化了输出。
此超分辨率过滤器可增强低分辨率视频的分辨率,并在保留内容的同时增强细节并锐化输出。
使用条件:
a). 输入输出分辨率和放大倍率的限制:
比例(放大倍率) | 输入分辨率支持范围 | 输出分辨率范围 |
4/3 | [90p, 2160p] | [120p, 2880p] |
1.5 | [90p, 2160p] | [135p, 3240p] |
2 | [90p, 2160p] | [180p, 4320p] |
3 | [90p, 720p] | [270p, 2160p] |
4 | [90p, 540p] | [360p, 2160p] |
b). NVIDIA特别清楚注明了,一些低端GPU,可能没有足够的内存来支持超分辨率功能允许的最大输入分辨率,而导致报错。
c). 输入的图像是BGR(GPU 缓冲区中提供),每个像素分量都要求是一个 32 位浮点值。
d). 输出图像尺寸会和输入一致,同样也是BGR平面格式,每个像素分量也是32位浮点值。
可调的参数:
Strength:
strength of the upscaling effect, 浮点数 [0.0, 1.0]
Mode:
超分辨率或伪影减少效果的模式,0 或 1
0 - 保守,1 - 激进。
效果展示:
原图360p:
超分放大3倍后(strength=1 mode=1):
超分放大3倍后(strength=1 mode=0):
超分放大3倍后(strength=0 mode=0):
PS:上传到网站上被压缩过,效果看起来所以不是很明显,如果放大在大屏幕上进行比较的话,可以看出原图是很多锯齿的~
4. Upscaler 放大器(轻量版超分辨率)
Upscaler是一种非常快速且轻量级的方法,可提供高达 4 倍的高质量缩放视频,并具有可调节的锐化参数。
此功能可以选择与伪影减少功能进行流水线处理,以在减少视频伪影的同时增强比例。
使用条件:
a). 支持任何输入分辨率(不像超分辨率那样有各种90p以上1080p以下之类的限制),适合比较差的显卡或者比较大尺寸的视频
b). 放大倍率和超分辨率一样,必须是4/3x、1.5x、2x、3x 或 4x之间的一种。
c). 输入的图像是RGBA (GPU 缓冲区中提供),每个像素分量都要求是一个8位浮点值,每个像素为 32 位。
d). 输出图像尺寸会和输入一致,同样也是RGBA平面格式,每个像素分量也是8位浮点值,每个像素为 32 位。
可调的参数:
Artifact Reduction Mode:
伪影去除模式,0或1:
0:可去除较少的伪影,更好地保留低梯度信息(适用于更高比特率的视频)
1:去除较多的伪影(更适合较低比特率的视频)
Upscale Strength:
提供介于 0.0 和 1.0 之间的浮点强度值,即为锐化参数来锐化生成的图像输出。默认值为 0.4。
强度设置为 0 意味着没有锐化增强,只是放大。
强度设置为 1 意味着最大的锐化增强。
NVIDIA关于超分SuperResolution和放大UpScaler两种方法的选择的建议:
1. 如果没有编码伪影的视频需要快速提高分辨率,请使用“UpScaler”。
2. 如果视频没有编码伪影,要提高分辨率,请将 SuperResolution 与 Mode=1 配合使用,以获得更大的增强功能。
3. 如果视频的编码伪影较少,要去除伪影,请仅在 Mode=0 下使用伪影减少。
4. 如果视频具有更多编码伪影,要去除伪影,请仅在 Mode=1 中使用伪影减少。
5. 要提高带有编码工件的视频的分辨率,请执行以下操作:
(1). 对于是轻微伪像的视频,请使用 Mode=0 的超分辨率。
(2). 否则,请使用去除伪影,然后使用 Mode=1 的超分辨率。
放大UpScaler作为轻量级的超分,效果就不展示了。
5. Video Noise Removal 视频噪音消除
视频噪声消除,可从网络摄像头视频中消除低光相机噪声,同时保留纹理细节。
使用条件:
a). 仅支持80p-1080p分辨率尺寸的视频输入。
b). 输入的图像是BGR(GPU 缓冲区中提供),每个像素分量都要求是一个 32 位浮点值。
c). 输出图像尺寸会和输入一致,同样也是BGR平面格式,每个像素分量也是32位浮点值。
可调的参数:
Strength:
降噪滤波器的强度,默认值为 0。
0 的强度对应于弱效果,这更强调纹理保留。
1 的强度对应于强效果,它更强调噪声消除,效果更明显。
原图:
降噪强度Strength=0:
降噪强度Strength=1: