kaldi mobvoihotwords 唤醒词识别教程

kaldi mobvoihotwords 唤醒词识别教程

作者:关林生
邮箱:
wuxie6424@gmail.com
2755244572@qq.com
如果有问题,可以email我。
本教程分为四个部分:
一是如何在ubuntu安装配置kaldi。
二是如何用kaldi的例子mobvoihotwords(唤醒词识别)训练出模型,然后用训练出来的模型测试一条指定的语音是不是唤醒词“嗨小问”。
三是用其他的已经训练好的模型来测试指定的语音是不是唤醒词。需要修改代码。
四是在kaldi运行mobvoihotwords(唤醒词识别)可能遇到的问题的解决办法

一.如何在ubuntu安装配置kaldi?

1.安装git。如果使用gitub网速慢,建议把ubuntu的源换成国内的源,网上教程很多,可自己百度。

sudo apt-get install git

2.从GitHub上下载我修改好了的kaldi_mobvoihotwords的源码。
我把源码放在了我的github仓库里:

https://github.com/wuxie6424/kaldi_mobvoihotwords

3.安装kaldi 依赖工具以及所使用的第三方工具库

sudo apt-get install git
sudo apt-get install bc
sudo apt-get install g++
sudo apt-get install zlib1g-dev make automake autoconf bzip2 libtool subversion
sudo apt-get install libatlas3-base

4.按照上面的安装完kaldi 的依赖包之后,我们解压kaldi_mobvoihotwords,运行自带的脚本文件,来检测是否安装完成所需要的依赖。

cd kaldi_mobvoihotwords-master/kaldi/tools

运行依赖检测脚本:

./extras/check_dependencies.sh

可能会提示缺失MKL依赖包,也会提示你,到tools目录下,运行install_mkl.sh脚本文件进行MKL安装。

运行安装脚本

./install_mkl.sh

安装完成以后,再次运行检查脚本:

./extras/check_dependencies.sh

可能会提示缺少另外一个依赖包,sox,也同样会告诉你安装方式,运行安装命令即可。
安装完成后,再次检测,运行脚本文件。直到没有提示错误,且提示all OK,依赖既安装完成。

5.在tools目录下面输入命令(要耐心等待一段时间,时间可能会有点长):

make -j4  

解释:make -j4 与make -j8的意思就是多线程运行,(线程的意思请参考操作系统)即4个进程去竞争多核cpu,或者8个线程去竞争cpu。
tools目录下make 完成后,说明我们的外部依赖和第三方库已经全部安装完成。

6.下面进入到src目录下,进行编译安装。

cd ..
cd src

进入src 后按照指令进行安装(每输完一行命令要耐心等待一段时间,时间可能会有点长):

./configure --shared
make depend
make -j4

make -j4完成后,如果提示

echo Done
Done

则表示安装好了。

7.下面我们可以跑一个简单的例子yesno,来验证kaldi是否安装成功。
我们进入到路径kaldi_mobvoihotwords-master/kaldi/egs/yesno/s5目录下,运行下面的命令:

./run.sh

运行完 yesno 例子以后,如果终端最下面的一行显示如下,说明已经安装成功,它意思是识别的错误率为0。

%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10_0.0

到此kaldi 安装完成!

二.如何用kaldi_mobvoihotwords训练出模型,然后用训练出来的模型测试一条指定的语音是不是唤醒词“嗨小问”?

说明:
我把kaldi的mobvoihotwords里面的代码做了一定的修改调整,我的这个版本识别的唤醒词是“嗨小问”。
官方的唤醒词是“嗨小问”、“你好雯雯”。
因为需要,我对数据集mobvoi_hotword_dataset、mobvoi_hotword_dataset_resources、mobvoihotwords里的一些代码做了修改。
我实现了只用一个唤醒词“嗨小问”。
我也在github上开源了mobvoi_hotword_dataset、mobvoi_hotword_dataset_resources里需要用到的含420条、8000条训练语音的压缩包。(官网上开源的数据集实在是太大了,因为我用的是单机来训练的,所以就抽取了一部分来用。我跑全部的数据跑不起来,电脑容易卡死)

1.前提条件:
(1)电脑要有GPU。也就是要安装CUDA。
教程:在ubuntu安装cuda10.1和cudnn(亲测有效)

(2)建议提前下载好需要应用到的数据集
(mobvoi_hotword_dataset.tgz,mobvoi_hotword_dataset_resources.tgz,musan.tar.gz,rirs_noises.zip等,因为这些数据包内存很大,有的十几个G。因为用kaldi里面的下载命令去下载会很慢,它里面是单进程下载的,要下载很久,我这里提供一个多线程下载的方法,大家可以提前下载好,然后放到对应的位置上。)
kaldi语料下载网址(该网站用的国内服务器,下载更快,亲测有效)
在ubuntu用wget下载多个文件,axel多线程下载(多线程超级快)
对应位置如下图:

在这里插入图片描述

2.在kaldi_mobvoihotwords-master/kaldi/kaldi/egs/mobvoihotwords/v1目录下执行命令即可开始训练测试:

./run.sh

运行结果:
在这里插入图片描述

注意!!!
因为mobvoi_hotword_dataset.tgz里面放了十几个G的数据。但是单机运行,跑不了这么数据,所以可以提取一部分数据,比如100条,420条,8000条等,但是由于数据量小,准确度不是很高。如果用集群跑大量数据训练的话,识别率会有所提高

三.用其他的已经训练好的模型来测试指定的语音是不是唤醒词(就是说,不用你自己跑数据训练模型,这里用现成的模型需要大家自己修改代码。)

说明:
我在github上放了420条、8000条语音(包括嗨小问以及其他杂音)训练出来的模型,分别放在了命名是exp420.tar.gz、exp8000.tar.gz的压缩包里。

需要修改三处:
1.run.sh
在run.sh里找到if [ $stage -le 0 ]; then和if [ $stage -le 13 ]; then。
把从stage 0到 stage13都注释了。
然后找到简化版本四,把简化版本四的注释解开。
如下图。
在这里插入图片描述
在这里插入图片描述

2.run_tdnn.sh
在run_tdnn.sh里找到if [ $stage -le 1 ]; then和if [ $stage -le 7 ]; then。
把从stage 1到stage 7都注释了。
然后找到简化版三,把简化版三的注释解开。
如下图。
在这里插入图片描述

在这里插入图片描述
3.run_tdnn.sh
在run_tdnn.sh里找到test_sets=,把他的值换成"eval_hires"。
如下图
在这里插入图片描述
4.配置文件:
因为想要用其他的已经训练好的模型。
模型训练好之后会被存在一个叫exp的文件夹,但是里面的配置文件的路径需要修改了,才能直接用。
我们需要对exp/chain/tdnn_1a_online/conf/online.conf进行修改。
比如,如下是我的一个online.conf的内容,你需要把对应的路径换成你电脑本机里kaldi的路径。
可以用到命令pwd来获取文件所在的路径。

–feature-type=mfcc
–mfcc-config=/home/wuxie/kaldi/egs/mobvoihotwords/v1/exp/chain/tdnn_1a_online/conf/mfcc.conf
–endpoint.silence-phones=1
–cmvn-config=/home/wuxie/kaldi/egs/mobvoihotwords/v1/exp/chain/tdnn_1a_online/conf/online_cmvn.conf
–global-cmvn-stats=/home/wuxie/kaldi/egs/mobvoihotwords/v1/exp/chain/tdnn_1a_online/global_cmvn.stats

5.运行run.sh。
后面需要加上一个参数,是你要识别的语音的文件名(不含后缀).
比如你要识别这条语音0a0aa8e8c59492bc925df9905cba8c29.wav是不是唤醒词
(注意!我这里设置的是需要事先把想要识别的语音放到kaldi/egs/mobvoihotwords/v1/data/download/mobvoi_hotword_dataset目录下),在kaldi/egs/mobvoihotwords/v1目录下就输入如下命令即可:

./run.sh 0a0aa8e8c59492bc925df9905cba8c29

运行结果:
在这里插入图片描述

四.在kaldi运行mobvoihotwords(唤醒词识别)可能遇到的问题的解决办法:

1.解决kaldi训练报错 CUDA error: ‘out of memory‘,gpu不够用(亲测有效)

2.解决kaldi报错:fix_data_dir.sh: no utterances remained: not proceeding further.(亲测有效)

3.在ubuntu安装cuda10.1和cudnn(亲测有效)

4.在ubuntu安装驱动(亲测有效)

5.在ubuntu用wget下载多个文件,axel多线程下载(多线程超级快)

6.kaldi语料下载网址(该网站用的国内服务器,下载更快,亲测有效)

7.linux下把一个文件的前n行拷贝到另一个文件中

8.解决mobvoihotwords(kaldi唤醒词识别)遇到的Exception: input dir /export/corpora/JHU/musan does not exist,亲测有效!

9.解决NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver的报错(亲测有效)

我把源码放在了我的github仓库里:

https://github.com/wuxie6424/kaldi_mobvoihotwords

kaldi官方github仓库:

https://github.com/kaldi-asr/kaldi

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值