模型概述
模型特點
模型能力
使用案例
🚀 Frame-VAD多語言MarbleNet v2.0
Frame-VAD多語言MarbleNet v2.0是一個用於語音活動檢測(VAD)的卷積神經網絡,是語音識別和說話人分離的第一步。它是一個基於幀的模型,為輸入音頻的每20毫秒幀輸出一個語音概率。該模型僅有91.5K個參數,輕量級且適用於即時應用。
✨ 主要特性
- 輕量級模型,僅91.5K個參數
- 能有效抵抗誤報錯誤
- 為每20毫秒音頻幀輸出語音概率
- 支持多語言:中文、英文、法語、德語、俄語和西班牙語
此模型可用於商業用途。
📄 許可證
適用條款:您使用此模型需遵循 NVIDIA開放模型許可協議。
部署範圍
全球
使用場景
開發者、語音處理工程師和AI研究人員會將其作為其他語音處理模型的第一步。
參考資料
[1] Jia, Fei, Somshubra Majumdar, and Boris Ginsburg. "MarbleNet: Deep 1D Time-Channel Separable Convolutional Neural Network for Voice Activity Detection." ICASSP 2021 - 2021 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2021. [2] NVIDIA NeMo Toolkit
模型架構
屬性 | 詳情 |
---|---|
模型類型 | 卷積神經網絡(CNN) |
網絡架構 | MarbleNet |
參數數量 | 91.5K |
輸入
屬性 | 詳情 |
---|---|
輸入類型 | 音頻 |
輸入格式 | .wav文件 |
輸入參數 | 一維 |
其他輸入屬性 | 16000 Hz單聲道音頻,無需預處理 |
輸出
屬性 | 詳情 |
---|---|
輸出類型 | 每個20毫秒幀的語音概率序列 |
輸出格式 | 浮點數組 |
輸出參數 | 一維 |
其他輸出屬性 | 可能需要後處理,如平滑處理(減少檢測到的語音概率的突然波動,實現更自然的過渡)和閾值處理(設置一個臨界值,根據概率確定一個幀是否包含語音,例如將概率高於0.5的幀分類為語音,其他分類為靜音或噪聲) |
我們的AI模型設計和/或優化為在NVIDIA GPU加速系統上運行。通過利用NVIDIA的硬件(如GPU核心)和軟件框架(如CUDA庫),與僅使用CPU的解決方案相比,該模型實現了更快的訓練和推理時間。
💻 使用示例
基礎用法
要訓練、微調或使用該模型,您需要安裝 NVIDIA NeMo。
pip install -U nemo_toolkit['asr']
該模型可在NeMo工具包 [2] 中使用,並可作為預訓練檢查點進行推理。
自動加載模型
import torch
import nemo.collections.asr as nemo_asr
vad_model = nemo_asr.models.EncDecFrameClassificationModel.from_pretrained(model_name="nvidia/frame_vad_multilingual_marblenet_v2.0")
# Move the model to GPU if available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
vad_model = vad_model.to(device)
vad_model.eval()
使用PyTorch進行推理
首先,獲取一個樣本
wget https://dldata-public.s3.us-east-2.amazonaws.com/2086-149220-0033.wav
然後運行以下代碼:
import librosa
# Load the audio
input_signal = librosa.load("2086-149220-0033.wav", sr=16000, mono=True)[0]
input_signal = torch.tensor(input_signal).unsqueeze(0).float()
input_signal_length = torch.tensor([input_signal.shape[1]]).long()
# Perform inference
with torch.no_grad():
torch_outputs = vad_model(
input_signal=input_signal.to(device),
input_signal_length=input_signal_length.to(device)
).cpu()
導出為ONNX
import onnx
from nemo.core import typecheck
typecheck.set_typecheck_enabled(False)
vad_model = vad_model.cpu()
ONNX_EXPORT_PATH = "frame_vad_multilingual_marblenet_v2.0.onnx"
# Preprocess input signal
processed_signal, processed_signal_length = vad_model.preprocessor(
input_signal=input_signal,
length=input_signal_length
)
# Define input example for ONNX export
inputs = {
"processed_signal": processed_signal,
"processed_signal_length": processed_signal_length
}
# Export
torch.onnx.export(
model=vad_model,
args=inputs,
f=ONNX_EXPORT_PATH,
input_names=list(inputs.keys()),
output_names=["output"],
dynamic_axes={
"processed_signal": {0: "batch_size", 2: "sequence_length"},
"processed_signal_length": {0: "batch_size"},
"output": {0: "batch_size", 1: "sequence_length"}
}
)
使用ONNX Runtime進行推理
import onnxruntime
# Load the ONNX model
session = onnxruntime.InferenceSession(
ONNX_EXPORT_PATH,
providers=["CPUExecutionProvider"]
)
# Prepare input for ONNX Runtime
ort_inputs = {
input.name: inputs[input.name].numpy()
for input in session.get_inputs()
}
# Run inference
onnx_outputs = session.run(None, ort_inputs)[0]
從幀級語音預測生成RTTM輸出
要使用預訓練模型從音頻生成RTTM(豐富轉錄時間標記)文件,請執行以下命令:
python <NEMO_ROOT>/examples/asr/speech_classification/frame_vad_infer.py \
--config-path="../conf/vad" \
--config-name="frame_vad_infer_postprocess.yaml" \
vad.model_path="nvidia/frame_vad_multilingual_marblenet_v2.0" \
vad.parameters.shift_length_in_sec=0.02 \
prepare_manifest.auto_split=True \
prepare_manifest.split_duration=7200 \
input_manifest=<評估數據清單文件的路徑,其中音頻文件應具有唯一名稱> \
out_manifest_filepath=<輸出清單文件的路徑>
軟件集成
屬性 | 詳情 |
---|---|
運行時引擎 | NeMo - 2.3.0 |
支持的硬件微架構兼容性 | NVIDIA Ampere、NVIDIA Blackwell、NVIDIA Jetson、NVIDIA Hopper、NVIDIA Lovelace、NVIDIA Pascal、NVIDIA Turing、NVIDIA Volta |
首選/支持的操作系統 | Linux |
模型版本 | Frame-VAD多語言MarbleNet v2.0 |
訓練、測試和評估數據集
訓練數據集
數據集鏈接 | 數據收集方法 | 標註方法 | 屬性 |
---|---|---|---|
ICSI (en) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
AMI (en) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
MLS (fr, es) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
MCV7 (de, ru) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
RULS (ru) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
SOVA (ru) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Aishell2 (zh) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Librispeech (en) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Fisher (en) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
MUSAN (noise) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Freesound (noise) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Vocalsound (noise) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Ichbi (noise) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
Coswara (noise) | 混合:人工、標註、合成 | 混合:人工、標註、合成 | 2600小時的真實世界數據、1000小時的合成數據和330小時的噪聲數據 |
測試數據集
數據集鏈接 | 數據收集方法 | 標註方法 | 屬性 |
---|---|---|---|
Freesound (noise) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
MUSAN (noise) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
Librispeech (en) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
Fisher (en) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
MLS (fr, es) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
MCV7 (de, ru) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
AMI (en) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
Aishell2 (zh) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
CH109 (en) | 混合:人工、標註 | 混合:人工、標註 | 約100小時的多語言(中文、英文、法語、德語、俄語、西班牙語)音頻數據 |
評估數據集
數據集鏈接 | 數據收集方法 | 標註方法 | 屬性 |
---|---|---|---|
VoxConverse-test | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
VoxConverse-dev | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
AMI-test | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
Earnings21 | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
AISHELL4-test | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
CH109 | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
AVA-SPEECH | 混合:人工、標註 | 混合:人工、標註 | 約182小時的多語言(中文、英文)音頻數據 |
推理
屬性 | 詳情 |
---|---|
推理引擎 | NVIDIA NeMo |
測試硬件 | RTX 5000、A100、V100 |
性能
ROC - AUC性能如下表所示。ROC - AUC值越高,性能越好。
評估數據集 | ROC - AUC |
---|---|
VoxConverse - test | 96.65 |
VoxConverse - dev | 97.59 |
AMI - test | 96.25 |
Earnings21 | 97.11 |
AISHELL4 - test | 92.27 |
CH109 | 94.44 |
AVA - SPEECH | 95.26 |
倫理考量
NVIDIA認為可信AI是一項共同責任,我們已經制定了政策和實踐,以支持各種AI應用的開發。當按照我們的服務條款下載或使用該模型時,開發者應與他們的內部模型團隊合作,確保該模型滿足相關行業和用例的要求,並解決意外的產品濫用問題。
有關此模型倫理考量的更多詳細信息,請參閱 模型卡片++可解釋性、偏差、安全與保障以及隱私子卡片。
請 在此 報告安全漏洞或NVIDIA AI相關問題。
偏差
領域 | 響應 |
---|---|
模型設計和測試中受不利影響群體 受保護類別 的參與考量 | 無 |
為減輕不必要偏差所採取的措施 | 為減少誤報錯誤(即模型在沒有語音時錯誤檢測到語音的情況),該模型使用白噪聲和真實世界噪聲擾動進行訓練。在訓練過程中,音頻的音量也會變化。此外,訓練數據包括非語音音頻樣本,以幫助模型區分語音和非語音聲音(如咳嗽、笑聲和呼吸聲等) |
偏差指標(如果測量) | 誤報率 |
可解釋性
領域 | 響應 |
---|---|
預期領域 | 語音活動檢測(VAD) |
模型類型 | 卷積神經網絡(CNN) |
預期用戶 | 開發者、語音處理工程師、AI研究人員 |
輸出 | 每個20毫秒音頻幀的語音概率序列 |
描述模型如何工作 | 該模型通過提取頻譜圖特徵來處理輸入音頻,然後將其傳遞給MarbleNet(一個專為VAD設計的輕量級基於CNN的模型)。CNN學習檢測與語音活動相關的模式,並輸出一個概率分數,指示每個20毫秒幀中語音的存在 |
列出已測試以確保無論何種情況都能提供可比結果的受不利影響群體 | 不適用 |
技術限制 | 該模型以20毫秒幀為單位運行。雖然它可以通過將較長的幀拆分為較小的段來支持較長的幀,但它不支持粒度小於20毫秒的輸出 |
已驗證符合規定的NVIDIA質量標準 | 是 |
性能指標 | 準確性(誤報率、ROC - AUC分數)、延遲、吞吐量 |
潛在已知風險 | 雖然該模型在包括中文、英文、法語、西班牙語、德語和俄語在內的有限數量的語言上進行了訓練,但對於訓練數據集中未包含的語言和口音,模型的質量可能會下降 |
許可 | NVIDIA開放模型許可協議 |
隱私
領域 | 響應 |
---|---|
是否可生成或逆向工程個人數據 | 無 |
是否使用個人數據創建此模型 | 無 |
數據集審查頻率 | 發佈前 |
訓練中使用的所有數據集是否有來源證明 | 是 |
數據標註(註釋、元數據)是否符合隱私法 | 是 |
如果提出數據更正或刪除請求,數據是否符合數據主體的請求 | 是 |
安全
領域 | 響應 |
---|---|
模型應用 | 自動語音識別、說話人分離、語音處理、語音活動檢測 |
列出模型可集成的特定高風險AI系統類型(如果有),從以下選項中選擇:[生物識別] 或 [關鍵基礎設施] 或 [機械和機器人] 或 [醫療設備] 或 [車輛] 或 [航空] 或 [教育和職業培訓] 或 [就業和工人管理] | |
描述生命關鍵影響(如果存在) | 不適用 |
使用場景限制 | 遵守 NVIDIA開放模型許可協議 |
模型和數據集限制 | 應用最小權限原則(PoLP),限制數據集生成和模型開發的訪問權限。在訓練期間實施數據集訪問限制,並遵守數據集許可約束 |



