NVIDIA Maxine Video Effects SDK 程式設計指南

2023-06-13 18:01:36

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: