weixin_62994174/cogenav
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

CoGenAV-Ascend:面向NPU的音视频表征学习

基于华为昇腾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适配

该模型已适配原生运行于华为昇腾NPU(Atlas 800 A2/A3),具备以下特性:

  • 独立推理:无fairseq依赖——替换为可在NPU上运行的纯PyTorch操作
  • 权重兼容性:自动将fairseq weight_norm转换为原始权重
  • 精度保持:FP32推理,与CPU相比误差低于0.4%

适配策略

原始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 numpy

推理

import 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 参考值对比)

所有评估均使用随机输入进行基线验证。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_av58.0558.0417.23
cogenav_v57.9958.0317.24
cogenav_a15.1115.1066.18

NPU 与 CPU 加速比

指标数值
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完成适配。