机器环境:cpu+ubuntu16.04+24g内存,8g内存训练会出错,只能训练出单音节模型。

kaldi的编译源码直接在Github上clone下来<https://github.com/kaldi-asr/kaldi>。介绍下如下的几个目录:

  1. tools/: 主要存放了 Kaldi 依赖的包已经各种工具,如:OpenFST, ATLAS, IRSTLM, sph2pipe 等等。
  2. src/: Kaldi 的源代码;
  3. egs/: 为各种示例项目和代码;

安装:

  1. 详细的安装过程和指令可以参考 ./INSTALL, src/INSTALL, 以及 tools/INSTALL。编译 tools 和 src 之前,可以先执行 tools/extras/check_dependencies.sh 来查看需要安装哪些依赖。并且安装相关依赖包。<python指定2.7版本,参考https://www.cnblogs.com/Yanfang20180701/p/10588087.html>
  2. 在./tool目录下输入make,开始编译,输入make -j 4命令可以加快速度(多核并行处理)。
  3. 之后切换到./src目录下,输入./configure进行配置,然后输入make all进行编译。当然这个过程也可以并行处理加速,输入make -j 4。经过漫长的编译过程以后,就安装完毕了。

thchs30数据

数据下载链接:https://www.openslr.org/18/,thchs30,是清华大学提供的30个小时的中文语料库,包含以下文件

  • data_thchs30.tgz, 6.4G, sppech data and transcripts
  • test_noise.tgz, 1.9G, standard 0db noisy test data
  • resource.tgz, 24M, supplementary resources, incl. lexicon for training data, noise samples

下载之后全部解压到/home/chen/work/voice/kaldi/egs/thchs30/s5/thchs30-openslr/下(thchs30-openslr自己建的文件夹)

drwxrwxr-x 6 chen chen 4096 12月 24 09:41 ./
drwxrwxr-x 9 chen chen 4096 12月 26 18:18 ../
drwxrwxr-x 8 chen chen 4096 12月 18 17:49 data_thchs30/
drwxr-xr-x 4 chen chen 4096 1月  25  2016 resource/
drwxr-xr-x 5 chen chen 4096 1月  25  2016 test-noise/

训练

打开s5下的cmd.sh脚本,注释掉queue.pl执行方式,修改如下:export train_cmd=run.pl
export decode_cmd="run.pl --mem 4G"
export mkgraph_cmd="run.pl --mem 8G"
export cuda_cmd="run.pl --gpu 1"
#export train_cmd=queue.pl
#export decode_cmd="queue.pl --mem 4G"
#export mkgraph_cmd="queue.pl --mem 8G"
#export cuda_cmd="queue.pl --gpu 1"

继续打开 run.sh,修改 thchs30 语料库的路径:

#corpus and trans directory
#thchs=/nfs/public/materials/data/thchs30-openslr
thchs=/home/chen/wxingqiuork/voice/kaldi/egs/thchs30/s5/thchs30-openslr

在run.sh注释掉用DNN训练模型,因为默认 DNN 是用 GPU 来跑的,然后执行thchs30/s5/run.sh 的脚本,该脚本包含了整个训练过程中需要执行的各种命令,执行时间大概十多个小时。

从日志的输出也可以看出整个训练过程大致包括数据准备、monophone 单因素训练(steps/train_mono.sh)、tri1 三因素训练(steps/train_deltas.sh)、tri2 进行 lda_mllt 特征变换(steps/train_lda_mllt.sh)、tri3b 进行 sat 自然语言适应(step/train_sat.sh)、tri4b 进行 quick 训练(step/train_quick.sh),之后就是 DNN 训练。

模型位子

下面看下 tri1,因为下面的示例会以 tri1 模型来识别。

chen@chen:tri1[master*]$ ls -l
总用量 66176
-rw-rw-r-- 1 chen chen  3435133 12月 26 11:59 35.mdl
-rw-rw-r-- 1 chen chen     8326 12月 26 11:59 35.occs
-rw-rw-r-- 1 chen chen  1524364 12月 26 11:59 ali.1.gz
-rw-rw-r-- 1 chen chen  1495302 12月 26 11:59 ali.2.gz
-rw-rw-r-- 1 chen chen  1655834 12月 26 11:59 ali.3.gz
-rw-rw-r-- 1 chen chen  1533052 12月 26 11:59 ali.4.gz
-rw-rw-r-- 1 chen chen        1 12月 26 11:56 cmvn_opts
drwxrwxr-x 4 chen chen     4096 12月 26 13:15 decode_test_phone
drwxrwxr-x 4 chen chen     4096 12月 26 12:42 decode_test_word
lrwxrwxrwx 1 chen chen        6 12月 26 11:59 final.mdl -> 35.mdl
lrwxrwxrwx 1 chen chen        7 12月 26 11:59 final.occs -> 35.occs
-rw-rw-r-- 1 chen chen 14109331 12月 26 11:56 fsts.1.gz
-rw-rw-r-- 1 chen chen 13876553 12月 26 11:56 fsts.2.gz
-rw-rw-r-- 1 chen chen 15234357 12月 26 11:56 fsts.3.gz
-rw-rw-r-- 1 chen chen 14475131 12月 26 11:56 fsts.4.gz
drwxrwxr-x 3 chen chen     4096 12月 26 12:43 graph_phone
drwxrwxr-x 3 chen chen     4096 12月 26 12:04 graph_word
drwxrwxr-x 2 chen chen    12288 12月 26 11:59 log
-rw-rw-r-- 1 chen chen        2 12月 26 11:56 num_jobs
-rw-rw-r-- 1 chen chen     2098 12月 26 11:56 phones.txt
-rw-rw-r-- 1 chen chen     8161 12月 26 11:56 questions.int
-rw-rw-r-- 1 chen chen    35098 12月 26 11:56 questions.qst
-rw-rw-r-- 1 chen chen   305009 12月 26 11:56 tree

chen@chen:tri1[master*]$ ls -l graph_word/
总用量 842184
-rw-rw-r-- 1 chen chen       290 12月 26 12:00 disambig_tid.int
-rw-rw-r-- 1 chen chen 861725005 12月 26 12:04 HCLG.fst
-rw-rw-r-- 1 chen chen         5 12月 26 12:04 num_pdfs
drwxrwxr-x 2 chen chen      4096 12月 26 12:04 phones
-rw-rw-r-- 1 chen chen      2098 12月 26 12:04 phones.txt
-rw-rw-r-- 1 chen chen    646753 12月 26 12:04 words.txt

其中, final.mdl 就是训练出来的可以使用的模型,另外,在 graph_word 下面的 words.txt 和 HCLG.fst 分别为字典以及有限状态机。单独介绍这三个文件,是因为我们下面的示例主要基于这三个文件来识别的。

离线识别示例:

下面我们用上面训练的 tri1 模型来识别一个给定的音频文件。我们这里使用 online-wav-gmm-decode-faster 工具来回放指定的 wav 文件并进行识别。

对于当前源码,在上面的编译安装过程中,默认情况下并不会生成 online-wav-gmm-decode-faster 程序(默认会生成的是 online2 相关程序),此时需要自己手动编译此工具,如下:

chen@chen:online[master*]$ pwd
/home/chen/work/voice/kaldi/src/online
chen@chen:online[master*]$ make

下面为示例的步骤:

1.将 kaldi/egs/voxforge/online_demo 拷贝到 kaldi/egs/thchs30/ 下;
2.在 kaldi/egs/thchs30/online_demo/ 下新建两个文件夹 online-data/ 和 work/,以及在 online-data 下新建两个文件夹 audio/ 和 models/,audio/ 下面可以存放需要回放和识别的语音文件,路径结构如下:

chen@chen:online_demo[master*]$ tree -L 4
.
├── online-data
│   ├── audio
│   │   ├── C21_517.wav      // 需要回放和识别的语音文件,可以放多个
│   │   └── trans.txt        // 为空即可
│   └── models
│       └── tri1
│           ├── 35.mdl       // 模型训练步骤生成的模型文件
│           ├── final.mdl    // 模型训练步骤生成的模型文件
│           ├── HCLG.fst     // 拷贝 thchs30/s5/exp/graph_word/HCLG.fst
│           └── words.txt    // 拷贝 thchs30/s5/exp/graph_word/words.txt
├── README.txt
├── run.sh
└── work

3.打开 kaldi/egs/thchs30/online_demo/run.sh,更改如下:

更新模型名
# Change this to "tri2a" if you like to test using a ML-trained model
#ac_model_type=tri2b_mmi
ac_model_type=tri1
- 注释掉如下这段从 voxforge 下载现网的测试预料和模型的代码
#if [ ! -s ${data_file}.tar.bz2 ]; then
#    echo "Downloading test models and data ..."
#    wget -T 10 -t 3 $data_url;
#
#    if [ ! -s ${data_file}.tar.bz2 ]; then
#        echo "Download of $data_file has failed!"
#        exit 1
#    fi
#fi
- 修改如下执行识别的命令(将模型的部分更改为 $ac_model/final.mdl)
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\
    --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \
    scp:$decode_dir/input.scp $ac_model/final.mdl $ac_model/HCLG.fst \
    $ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
    ark,t:$decode_dir/ali.txt $trans_matrix;;

4.执行 kaldi/egs/thchs30/online_demo/run.sh,如下输出:

chen@chen:online_demo[master*]$ ./run.sh

SIMULATED ONLINE DECODING - pre-recorded audio is used

The (bigram) language model used to build the decoding graph was
  estimated on an audio book's text. The text in question is
  "King Solomon's Mines" (http://www.gutenberg.org/ebooks/2166).
  The audio chunks to be decoded were taken from the audio book read
  by John Nicholson(http://librivox.org/king-solomons-mines-by-haggard/)

NOTE: Using utterances from the book, on which the LM was estimated
        is considered to be "cheating" and we are doing this only for
        the purposes of the demo.

You can type "./run.sh --test-mode live" to try it using your
  own voice!

online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85 --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 --left-context=3 --right-context=3 scp:./work/input.scp online-data/models/tri1/final.mdl online-data/models/tri1/HCLG.fst online-data/models/tri1/words.txt 1:2:3:4:5 ark,t:./work/trans.txt ark,t:./work/ali.txt online-data/models/tri1/final.mat 
File: A2_0
律师 阳春 淹 井 大 快 文章 的 底色 四月 的 李 銮 更 顺利 地 先 和 秀媚 诗意 盎然

File: A2_1
他 仅 凭 腰部 的 力量 在 甬道 上下 翻腾 永 冻 蛇行 状 如 海豚 一直 以 一头 的 优势 领先

File: A2_2
企业 依靠 技术 花钱 曾 向 他 负责 全 肠 产品 质量 与 技术 培训 成 了 长 米 的 大 盲人

File: D4_750
说 北京 的 一些 爱国 将士 马 占 山 梨 杜 唐 据 吴 素 饼 爱 邓 甜美 但 也 奋起 抗战

File: test
去年 搜寻 中国 城区 所 从事 的 资格 整个 素质

compute-wer --mode=present ark,t:./work/ref.txt ark,t:./work/hyp.txt 
%WER -nan [ 0 / 0, 0 ins, 0 del, 0 sub ]
%SER -nan [ 0 / 0 ]
Scored 0 sentences, 0 not present in hyp.

效果不好。

在线识别识别示例:

chen@chen:online_demo[master*]$ ./run_2.sh  --test-mode live

在线识别话筒可能遇到的问题:https://blog.csdn.net/YoungLittleT/article/details/80854894

离线录音命令:arecord  -d 5 -f dat -r 16000HZ -c 1 -t wav test.wav

arecord 制作16 bit 16000HZ语音

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

arecord -Dhw:0,1 -d 10 -f cd -r 44100 -c 2 -t wav test.wav
参数解析
-D 指定了录音设备,0,1 是card 0 device 1的意思,也就是TDM_Capture
-d 指定录音的时长,单位时秒
-f 指定录音格式,通过上面的信息知道只支持 cd cdr dat 
-r 指定了采样率,单位时Hz
-c 指定channel 个数
-t 指定生成的文件格式
《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《

参考:https://blog.csdn.net/xiongtiancheng/article/details/80577478

效果同样糟糕

备注

测试完tri1的模型后,一定很想试试tri2或3.但当你操作时,会遇到如下的问题:

ERROR (online-wav-gmm-decode-faster:LogLikelihoods():diag-gmm.cc:533) DiagGmm::ComponentLogLikelihood, dimension mismatch 39vs. 40

怎么解决?

答案:

1、于是修改run.sh成如下这个样子  :

ac_model_type=tri4b

------------------------------------中间有代码------------

trans_matrix="$ac_model/final.mat"

if [ -s $ac_model/matrix ]; then
    trans_matrix=$ac_model/12.mat
fi

2、 再次修改run.sh(添加2个参数--left-context=3 --right-context=3)

online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85 \
            --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 --left-context=3 --right-context=3\
            scp:$decode_dir/input.scp $ac_model/final.mdl $ac_model/HCLG.fst \
            $ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
            ark,t:$decode_dir/ali.txt $trans_matrix;;

3、同时把把s5下的exp下的tri4b下的拷到models的tri4b下。

4、 运行./run.sh

相关链接:https://blog.csdn.net/allyli0022/article/details/78644690

kaldi训练thchs30做在线识别相关推荐

  1. 如何用kaldi训练好的DNN模型做在线识别

    在已经训练好模型的情况下,需要针对一个新任务做在线识别应该怎么做呢? 一种情况是,用已有的声学模型和新训练的语言模型. 语言模型可以同srilm等工具训练,但是怎样将语言模型与DNN声学模型一起来进行 ...

  2. 基于kaldi训练唤醒词模型的一种方法

    0. 前言 什么是唤醒?激活Google智能助手,你可以对手机说"Hey Google"或者"OK Google",其他诸如阿里的天猫精灵智能音箱(天猫精灵). ...

  3. AI从入门到放弃2:CNN的导火索,用MLP做图像分类识别?

    来源 | 腾讯知乎专栏 作者 | AIoys(腾讯员工,后台工程师) 项目文档和代码在此:github项目地址: https://github.com/zsysuper/AI_Notes ▌一.前言 ...

  4. 图像处理项目——基于机器视觉技术的人脸在线识别系统设计

    基于机器视觉技术的人脸在线识别系统设计 本设计研究人脸检测与识别技术,在基于机器视觉技术上,构建了一套人脸在线检测识别系统,系统将由以下几个部分构成:计算机图像预处理.数据收集和预处理. 人脸图像定位 ...

  5. 基于cnn的人脸识别_基于卷积神经网络(CNN)的人脸在线识别系统

    微信搜索"AI大道理",选择"置顶"公众号 重磅干货,深入讲解AI大道理 ------ 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统, ...

  6. 跨平台Android和IOS百度语音在线识别原生插件

    一.插件推荐 跨平台Office文档.图片在线预览,视频播放原生插件 Android和IOS图片在线预览,视频播放原生插件 跨平台Android和IOS百度OCR文字识别.证卡识别.票据识别原生插件 ...

  7. kaldi中的声纹识别

    kaldi中的声纹识别 文章目录 kaldi中的声纹识别 kaldi的安装 运行aishell例程 使用TIMIT数据库进行声纹识别 kaldi中声纹识别的流程 我的博客:https://yutouw ...

  8. tensorflow+python flask进行手写识别_python+flask搭建CNN在线识别手写中文网站!简直太屌了!...

    原标题:python+flask搭建CNN在线识别手写中文网站!简直太屌了! 使用python+flask搭建的一个网站,然后从网页的写字板上获取鼠标手写的汉字经过转码后传回后台,并经过图片裁剪处理之 ...

  9. 在线识别图片文字,分享识别技巧

    在这个信息科技发展的时代,必须要有过硬的知识才能跟的上时代的步伐.就像是同一个职位,我们必须要有自己独特的工作技巧或者是技能,才能更好的胜任.像是办公室文员,每天要接触的是很多文件,还有将文件转换成文 ...

最新文章

  1. 非常棒的 「Sublime Text 配色/主题」与「编程字体」
  2. python编程和c语言编程的区别-通过实例浅析Python对比C语言的编程思想差异
  3. 快排、寻找第k小数和前k小数
  4. 关于Oracle实时数据库的优化思路
  5. Fiddler抓包9-保存会话(save)
  6. LeetCode 344. Reverse String
  7. android系统中与内存有关的文件及路径
  8. python中!ls -r_光学现象的Python实现
  9. 20190820:(leetcode习题)有效的字母异位词
  10. 如何让别人看不懂java代码_为什么你写的代码别人看不懂?
  11. Win10巧用自带输入法轻松打出特殊字符
  12. jsmap(桔色棉袄配什么颜色打底衫)
  13. 微信朋友圈图片压缩算法
  14. 华为路由器Talent服务配置
  15. python生成exe运行慢_利用pyinstaller生成exe文件碰到的一些问题及解决方法
  16. Error: Canceled future for execute_request message before replies were done
  17. 200 OK (from cache) 与 304 Not Modified
  18. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)
  19. Join the IT | 一个初生程序猿的内心独白
  20. 网易云音乐ubuntu下安装

热门文章

  1. 555定时器回差电压计算公式_用 555定时器组成施密特触发器 , 当输入控制端外接 10V电压时,回差电压为( ) 。_学小易找答案...
  2. java运算优先级顺口溜_java运算符优先级记忆口诀
  3. 第二章 DMDSC集群搭建
  4. Python中encode和encoding的区别是什么?
  5. 重磅!中国数据生产力大赛获奖榜单揭晓
  6. js 输入出生年份计算年龄
  7. 大连理工计算机研究生复试名单,大连理工大学2020硕士研究生复试成绩和拟录取名单合集...
  8. 相机稳定性测试软件,用于天文观测的科学级相机成像和测试软件的研究
  9. 产品MVP:别让你的公司登上明年的企业死亡名单
  10. 郑州市养老院解决方案,苏州新导助力养老院行业发展