少女祈祷中...
  • 最近在训练Wenet模型,所以顺便记录一下。

源码流程 以aishell为例

  • 资源下载

    • 执行以下语句进行下载,下载到/export/data/asr-data/OpenSLR/33/目录中,并进行解压和分类。
      1
      ./run.sh --stage -1 --stop_stage -1
  • 生成索引文件

    • 执行local/aishell-data-prep.sh生成索引文件到data/local/<train> <dev> <test>中,然后再把textwav.scp两个文件复制到data/<train> <dev> <test>三个文件夹中。
      1
      ./run.sh --stage 0 --stop_stage 0
  • 归一化计算

    • 先将text进行备份,备份为text.org
    • 分离text中的元素,后半部分去掉空格,再与前半部分合并(空格隔开)
    • 进行归一化计算(CMVN)
    • 删除备份文件
      1
      ./run.sh --stage 1 --stop_stage 1
  • 生成字典

    • 生成data.list字典,格式为{"key":wav的id, "wav": wav的绝对路径, "txt": 文字}。在训练时调用这个字典文件进行训练。模型测试时同理。
      1
      ./run.sh --stage 2 --stop_stage 2
  • 格式化,数据打包

    1
    ./run.sh --stage 3 --stop_stage 3
  • 模型训练

    • 读取配置文件中的信息,输出到exp/conformer,也就是说,这里面的文件都是生成的,而非源文件。
      1
      ./run.sh --stage 4 --stop_stage 4
  • 模型评价

    1
    ./run.sh --stage 5 --stop_stage 5
  • 模型导出

    • 导出WeNet模型为TorchScript格式
      1
      ./run.sh --stage 6 --stop_stage 6

注意事项 以aishell为例

对应文件夹的创建

  • 因为脚本并没有执行mkdir -p之类的命令,因此有一些文件夹需要自己手动创建,否则会出现报错。
    1
    2
    3
    4
    5
    mkdir -p /export/data/asr-data/OpenSLR/33/
    mkdir -p data/test/
    mkdir -p data/train/
    mkdir -p data/dev/
    ls

导出权重

  • 如果是用的jupyter notebook的话,不要直接下载,否则会得到一个.ptrom的文件,应该直接执行压缩之后再下来下来。
    1
    tar -czvf 输出文件 源文件

其他说明

使用自己的数据集进行训练

数据准备

  • 首先是数据集准备,将数据集转换为textwav.scp两个文件。
  • 其中textwav名称 语句。注意中间是空格隔开。
  • wav.scpwav名称 wav绝对路径。注意中间是空格隔开。

开始训练

  • 跳过数据准备的前几步,直接从归一化计算开始跑。

    1
    ./run.sh --stage 1 --stop_stage 1
  • 载入训练

    1
    ./run.sh --stage 4 --stop_stage 4 --checkpoint exp/conformer/avg_30.pt

保存训练日志

  • 执行模型训练时加上记录语句(其他同理)
    1
    2
    3
    4
    5
    6
    7
    8
    ./run.sh --stage 4 --stop_stage 4 | tee  ls.txt
    // 或 但这样不会输出在终端上
    ./run.sh --stage 4 --stop_stage 4 > ls.txt

    // 增量写入
    ./run.sh --stage 4 --stop_stage 4 | tee -a ls.txt
    // 或 但这样不会输出在终端上
    ./run.sh --stage 4 --stop_stage 4 >> ls.txt

配置文件

  • 注意观察run.sh,发现训练的配置文件为conf/train_conformer.yaml。训练时如果数据量过大可以在此修改batch_size。可以改固定值,也可以改为动态。当然也可以在这里改迭代次数。

参考文章