跳转至

Vad-silero

1 概述

1.1 背景介绍

vad是语音活动性检测算法, 能够识别出音频中的人声片段, 可以作为语音识别、说话人识别任务的前置模块。我们采用开源的silero-vad模型进行部署, 有关模型的详细信息可访问:

https://github.com/snakers4/silero-vad

模型下载地址为:

https://github.com/snakers4/silero-vad/tree/master/src/silero_vad/data

2 模型转换

2.1 onnx模型转换

在模型下载地址中下载模型文件 silero_vad_16k_op15.onnx,对模型进行simplify, onnxslim silero_vad_16k_op15.onnx silero_vad_16k_op15_sim.onnx --input-shapes input:1,576 state:2,1,128

2.2 离线模型转换

2.2.1 offline模型转换流程

注意:1)OpenDLAModel对应的是压缩包image-dev_model_convert.tar解压之后的smodel文件。2)转换命令需要在docker环境下运行, 请先根据Docker开发环境教程, 加载SGS Docker环境。

  • OpenDLAModel/vad/silero/onnx下已经存在simplify好了的模型

  • 转换命令

    $cd IPU_SDK_Release/docker
    $bash run_docker.sh
    #进入到docker环境下的OpenDLAModel目录
    $cd /work/SGS_XXX/OpenDLAModel
    $bash convert.sh -a vad/silero -c config/vad_silero.cfg -p SGS_IPU_Toolchain(绝对路径) -s false
    
  • 最终生成的模型地址

    output/${chip}_${时间}/vad.img
    output/${chip}_${时间}/vad_fixed.sim
    output/${chip}_${时间}/vad_float.sim
    

2.2.3 关键脚本参数解析

-   input_config.ini

        [INPUT_CONFIG]
        inputs=input,state,sr;                #onnx 输入节点名称, 如果有多个需以“,”隔开;
        input_formats=RAWDATA_F32_NHWC,RAWDATA_F32_NHWC,RAWDATA_S16_NHWC;    #板端输入格式, 可以根据onnx的输入格式选择, 例如float:RAWDATA_F32_NHWC, int32:RAWDATA_S16_NHWC;
        quantizations=TRUE;                 #打开输入量化, 不需要修改;

        [OUTPUT_CONFIG]
        outputs=output,stateN;                    #onnx 输出节点名称, 如果有多个需以“,”隔开;
        dequantizations=TRUE,TRUE;               #是否开启反量化, 根据实际需求填写, 建议为TRUE。设为False, 输出为int16; 设为True, 输出为float32

-   vad_silero.cfg

        [COMFORMER]
        CHIP_LIST=mhera,ifackel                   #平台名称, 必须和板端平台一致, 否则模型无法运行
        Model_LIST=silero_vad_16k_op15_sim                  #输入onnx模型名称
        INPUT_SIZE_LIST=0                   #模型输入分辨率
        INPUT_INI_LIST=input_config.ini     #配置文件
        CLASS_NUM_LIST=0                    #填0即可
        SAVE_NAME_LIST=vad.img          #输出模型名称
        QUANT_DATA_PATH=data.txt     #量化数据路径

3 板端部署

3.1 程序编译

示例程序编译之前需要先根据板子(nand/nor/emmc, ddr型号等)选择deconfig进行sdk整包编译, 具体可以参考alkaid sdk sigdoc《开发环境搭建》文档。

  • 编译板端silero示例。

    $cd sdk/verify/opendla
    $make clean && make source/vad/silero -j8
    
  • 最终生成的可执行文件地址

    sdk/verify/opendla/out/${AARCH}/app/prog_vad_silero
    

3.2 运行文件

运行程序时, 需要先将以下几个文件拷贝到板端

3.3 运行说明

  • Usage: ./prog_vad_silero wav model(执行文件使用命令)

    • wav: 音频文件
    • model: offline模型
  • Typical Output:

    ./prog_vad_silero test.wav models/vad.img
    
        client [699] connected, module:ipu
        Speech detected from 0.0 s to 2.0 s 
        Speech detected from 2.7 s to 4.7 s 
        Speech detected from 5.0 s to 6.9 s 
        Speech detected from 9.3 s to 13.3 s 
        Speech detected from 13.6 s to 15.1 s 
        Speech detected from 15.4 s to 15.9 s 
        Speech detected from 16.3 s to 17.9 s 
        Speech detected from 18.4 s to 19.6 s 
        Speech detected from 20.4 s to 28.5 s 
        Speech detected from 28.7 s to 32.6 s 
        Speech detected from 32.7 s to 35.5 s 
        Speech detected from 35.8 s to 37.6 s 
        Speech detected from 38.0 s to 39.0 s 
        Speech detected from 39.9 s to 43.3 s 
        Speech detected from 43.6 s to 44.6 s 
        Speech detected from 45.1 s to 46.9 s 
        Speech detected from 48.9 s to 50.0 s 
        Speech detected from 51.1 s to 54.2 s 
        Speech detected from 54.5 s to 57.4 s 
        Speech detected from 57.5 s to 59.6 s 
        Speech detected from 59.9 s to 60.0 s
        ------shutdown IPU1------
        client [922] disconnected, module:ipu