DeepSpeech 调参备忘

最优解

迄今为止训练效果最好的一组参数集是:

1
python DeepSpeech.py --train_files /mnt/g/myowncorpus/dst.csv --dev_files /mnt/g/myowncorpus/dst.csv --export_dir /mnt/g/myowncorpus/ --checkpoint_dir /mnt/g/myowncorpus/checkpoints128 --alphabet_config_path /mnt/g/myowncorpus/alphabet.txt --dropout_rate 0.3 --early_stop True --n_hidden 128 --export_file_name hidden128 --export_author_id hidden128 --epochs 200 --export_model_version 0.0.3 --lm_alpha 0.6940122363709647 --lm_beta 4.777924224113021 --export_language cmn-Hans-CN --reduce_lr_on_plateau False --es_epochs 800 --test_files /mnt/g/myowncorpus/dst.csv --learning_rate 0.001 --beam_width 100
阅读更多

Ubuntu上安装并训练DeepSpeech

全程参照官方文档 ,仅少许浅坑。这篇文章算是摘要 + 翻译 + 注解吧。

前提条件

  • Python 3.6

    严格遵守,实测 3.8 版本会有诸多错误。

  • Mac 或 Linux 环境

    建议避过 Mac,缺失的依赖比 Linux 多很多,问题也多,我是半途放弃 Mac 转到 Ubuntu 的。可以通过启用 Windows 10 的 WSL 功能创建 Ubuntu 环境,可以使用所有的硬件能力。

  • CUDA 10.0 / CuDNN v7.6 per Dockerfile.

    这条为非必须,因为我是新手,直接用 CPU 训练的。

阅读更多

准备训练自己的智能家居语音助手

Mozilla 实现的 DeepSpeech 语音识别引擎可以离线使用、可以运行在树莓派 4 上,简直就是给我准备的。

它附赠了一个训练好的普通话模型,我暂时没有试用。但训练自己专属的语音助手明显更带感,也更能贴近自己的说话习惯。

阅读更多

智能家居产品调研备忘

协议

调研中发现,小米开放了一套自研的控制协议 https://github.com/OpenMiHome/mihome-binary-protocol 。对应的 python 实现在这里 https://github.com/rytilahti/python-miio 。下文提到的云仪开窗器就是采用的 miio 。miio 涉及一个 token,看了下源码,token 大概是端到端的数据加密密钥的作用,https://github.com/al-one/hass-xiaomi-miot#obtain-miio-token 这里有获取 token 方法。

灯具

yeelight。控制协议完全开放,https://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf,有可直接使用的 python 包, https://pypi.org/project/yeelight/ 。大概看了下是参照 spec 实现的。

阅读更多

通过 HomeAssistant 查询市面上开源/开放协议的智能家居产品小攻略

HomeAssistant 是一个开源的、Python 实现的、可本地部署 的智能家居自动化服务。至今已集成了上千种智能家电、开放平台,比如 Yeelight、Opple(欧普)、Google Assistant 等等等等。

可以说,HomeAssistant 基本满足了我对智能家居中控系统的要求,尤其我一直强调的安全性问题。市面上绝大多数智能家居平台都是远程式的、不可部署的,直接引入了两大安全隐患:

阅读更多

用FFmpeg打印音频波形图

1
ffmpeg -i input.mp4 -filter_complex showwavespic=s=1800x600:split_channels=1 output.jpg

把 input.mp4 里的默认音频流的采样波形图打印到 output.jpg 。s=1800x600 指定输出图片尺寸;split_channels=1 可以把多个声道分别打印一行。

AVX2 优化 C++ 混响算法

这里 是一份 C++ 混响算法的实现,修正掉索引下溢 BUG 后大概是这样:

1
2
3
4
5
6
7
8
9
size_t samples = file.file_size / 4;
size_t ir_samples = sizeof(ir) / 4;
for (size_t i = 0; i < samples; ++i)
{
for (size_t j = 0; j < ir_samples && i >= j; ++j)
{
file.out_file_data[i] += file.in_file_data[i - j] * ir[j];
}
}

在我的 Intel i7-7700 4 核机器上,混响一段 60s、单声道、float 采样的 pcm 音频需要 12452 ms 的时间。

阅读更多

C++17 并行算法探究

C++17 终于把并行计算引入到了 STL,且更新成本极低,只是把 大多数迭代算法函数 多加了一个并行版本的重载,实现了并行、并发两个维度上的性能优化。

比如,对一组数据做一个加倍的 transform:

  • 串行版本,同以前:
    1
    std::transform(std::execution::seq, iter_begin, iter_end, output_iter, [](int val) { return val * 2; });
阅读更多