基于华为昇腾NPU的CoGenAV——用于语音识别、增强和分离的对比-生成式音视频表征学习。
CoGenAV(对比-生成式音视频表征学习)是一种多模态框架,通过语音、唇部动作和文本的同步对齐来学习高效的音视频表征。
| 属性 | 数值 |
|---|---|
| 架构 | Transformer Encoder + ResNet Frontend + Delta Upsampler + Feature Adaptation |
| 参数(基础版) | 123.6M |
| 框架 | PyTorch 2.9.0 |
| NPU后端 | torch_npu 2.9.0 |
| CANN版本 | 8.5.1 |
| 原始模型 | ModelScope上的CoGenAV |
| 论文 | arXiv:2505.03186 |
| 任务 | 缩写 | 描述 |
|---|---|---|
| 音视频语音识别 | AVSR | 同时使用音频和视觉线索的语音识别 |
| 视觉语音识别 | VSR | 仅基于唇读的语音识别 |
| 音视频语音增强 | AVSE | 利用视觉引导对语音进行降噪 |
| 音视频语音分离 | AVSS | 利用视觉线索分离混合说话人 |
该模型已适配原生运行于华为昇腾NPU(Atlas 800 A2/A3),具备以下特性:
| 原始 | NPU适配 |
|---|---|
fairseq TransformerEncoder | 具有匹配权重布局的纯PyTorch TransformerEncoder |
fairseq LayerNorm | 使用带权重/偏置参数的F.layer_norm实现的自定义LayerNorm |
| fairseq weight_norm Conv1d | 支持自动权重转换的原始nn.Conv1d |
| MultiheadAttention | 自定义Q/K/V投影注意力模块 |
pip install torch==2.9.0 torch_npu==2.9.0 numpyimport torch
import torch_npu
from models.cogenav import CoGenAV
# Load model on NPU
device = torch.device("npu:0")
model = CoGenAV(cfg_file="config/base.yaml", model_tensor="weights/base_cogen.pt")
model = model.to(device)
model.eval()
# Prepare input
video = torch.randn(1, 96, 96, 1, 750).to(device) # [B, H, W, C, T]
audio = torch.randn(1, 80, 3000).to(device) # [B, mel_bins, T]
# Run inference
with torch.no_grad():
output = model(video, audio) # [B, T', D]
features = output.permute(0, 2, 1) # [B, D, T'] for downstream tasks# Full evaluation with accuracy verification
python inference.py --mode eval --model_size base --input_type cogenav_av
# Simple inference
python inference.py --mode infer --model_size base --input_type cogenav_v
# With real video/audio inputs
python inference.py --mode infer --video_path /path/to/video.mp4 --audio_path /path/to/audio.wav| 模式 | 视频 | 音频 | 应用场景 |
|---|---|---|---|
cogenav_av | 必需 | 必需 | 视听语音识别,全多模态 |
cogenav_v | 必需 | 无 | 视觉语音识别,仅唇语识别 |
cogenav_a | 无 | 必需 | 仅音频语音 |
所有评估均使用随机输入进行基线验证。NPU 推理结果与 CPU 参考值对比,误差容限 < 1%。
| 输入模式 | 平均相对误差 | 最大绝对误差 | 状态 |
|---|---|---|---|
cogenav_av(音频+视频) | 0.30% | 0.021 | 通过 |
cogenav_v(仅视频) | 0.30% | 0.021 | 通过 |
cogenav_a(仅音频) | 0.39% | 0.022 | 通过 |
硬件:昇腾 910 NPU(Atlas 800) CANN:8.5.1 torch_npu:2.9.0.post1
| 输入模式 | 平均延迟(毫秒) | 中位数延迟(毫秒) | 吞吐量(样本/秒) |
|---|---|---|---|
cogenav_av | 58.05 | 58.04 | 17.23 |
cogenav_v | 57.99 | 58.03 | 17.24 |
cogenav_a | 15.11 | 15.10 | 66.18 |
| 指标 | 数值 |
|---|---|
| NPU 推理(av) | 283 毫秒 |
| CPU 推理(av) | 15,774 毫秒 |
| 加速比 | 55.7 倍 |
cogenav/
├── inference.py # Main NPU inference script with evaluation
├── test_npu_load.py # NPU loading and functionality test
├── fairseq_compat.py # NPU-compatible fairseq replacements
├── config_loader.py # YAML config loader (omegaconf fallback)
├── models/
│ ├── cogenav.py # CoGenAV model definition (NPU-adapted)
│ ├── resnet.py # ResNet video encoder
│ └── sepformer.py # SepFormer for AVSE/AVSS
├── config/
│ ├── base.yaml # Base model config (123M params)
│ └── large.yaml # Large model config
├── weights/
│ ├── base_cogen.pt # Base model weights
│ └── large_cogen.pt # Large model weights
└── README.md # This file本模型基于 Apache 2.0 许可证发布。详情请参见 原始 ModelScope 页面。
@article{cogenav2025,
title={CoGenAV: Contrastive-Generative Audio-Visual Representation Learning},
journal={arXiv:2505.03186},
year={2025}
}由AtomGit社区进行NPU适配。已针对华为昇腾NPU,基于torch_npu 2.9.0 + CANN 8.5.1完成适配。