Giter Site home page Giter Site logo

audio-toy's Introduction

基于CNN的音频识别

通过Inception v3MobileNet对音频数据生成的时频图进行分类,来判断特定的音频类型。

依赖

建议使用Anaconda安装依赖,在mac上使用时,librosa和自带的matplotlib可能存在兼容性问题。

  • librosa
  • tensorflow
  • scipy
  • matplotlib
  • numpy

训练

如果需要自己训练模型,需要准备好音频数据和对应的标注数据。

  • 首先将音频数据放入./data/audio/ ,支持大部分常见音频格式,例如mp3、wav、flac等,对于m4a可能需要额外安装解码包。

  • 将标注数据写入./data/train.xml,xml格式类似于:

     <dir audio_dir="audio">
     	<file audio_file="1.m4a">
     		<section type="1" start="19076" end="19233"/>
     		<section type="1" start="19076" end="19233"/>
     	</file>
     	<file audio_file="2.m4a">
     		<section type="1" start="19076" end="19233"/>
     	</file>
     </dir>

    其中audio_dir指向./data/audio/audio_file代表文件名或者相对路径,type是此文件对应的类型,详细信息定义在./data/config.xmlstartend分别代表此音频片段的起始和结束时间,单位是毫秒;

  • 修改./data/config.xml中的内容,格式类似于:

     <type>
     	<item name="type1">0</item>
     	<item name="type2">1</item>
     </type>

    需要注意这里的type值需要跟./data/train.xml保持一致。

  • 数据准备好以后,按需修改./src/ml/train_config.xml中的内容,大部分保持默认即可,需要注意的是最后一项,architecture表示识别模型,因为项目是基于Google的CNN迁移学习脚本开发的,支持两种:Inception v3MobileNet,前者的准确率最高,但模型大速度慢,后者与之相反。默认选用Inception v3

    MobileNet支持多种规格,合法字段如mobilenet_0.25_128_quantized,第一个数字代表模型参数的多少,选择范围 [1.0, 0.75, 0.50, 0.25] ,第二个参数代表模型的输入图片的尺寸,选择范围 [224, 192, 160, 128] ,两者的数字越小代表模型越小,速度越快,准确度越低。

  • 训练参数和数据准备完成后,进入项目根目录,执行train.py脚本,在默认参数下,最终生成的模型位于audio-toy/src/ml/model/output_graph.pb

     cd ./audio-toy
     python src/train.py
  • 训练过程中的log会放在 audio-toy/src/ml/temp/retrain_logs中,可以使用tensorboard看到可视化的结果:

     tensorboard --logdir audio-toy/src/ml/temp/retrain_logs

使用

假设模型已经训练完毕,现在需要预测某个音频文件中某种特征声音出现的时机。同样进入项目根目录,执行apply.py脚本。如果路径均为之前的默认路径,那么可以直接使用下面的命令:

cd ./audio-toy
python src/apply.py \
        --audio /path/to/your/audio_file \
        --start 1000 \
        --end 5000

其中audio代表待预测的音频文件,startend分别代表预测的起始和结束时间,单位是毫秒。程序会在console中输出预测结果。

关于人声识别

项目之初是希望在10毫秒量级上识别出人声,但是标准的人声数据难以寻找,而且还需要手动进行标注,目前没有找到合适的人声数据集,因此需要花费大量时间跟进数据问题。

  • 目前人声数据集少且不平衡,目前人声训练数据总时长不到4分钟,按照25/15(ms)切片后可以生成9600/16000张时频图,其中浊音(voice)占了绝大部分(90%左右),导致轻音(unvoice)识别不准确;同时人声数据绝大部分源自一名女生,数据缺少多样性;

  • 即使在数据量严重匮乏的情况下,训练出的模型还是能够比较精确的定位人声起始点,数据待补充

  • 时频图的生成是基于stft,对于人声可能存在更好的特征,参见基于 TensorflowLite 在移动端实现人声识别

特性和潜在问题

  • 基于迁移学习,绝大部分参数不用重新训练,因此模型收敛速度快;而且这两类模型可以方便的转换成tf-lite,可以进一步减少模型尺寸,有利于移动端部署。

  • 将音频识别转换成图像识别,利用cv上成熟的模型框架,提升识别准确度。

  • 模型基于Google迁移学习的脚本开发,支持Inception v3MobileNet,前者的准确率最高,但模型大速度慢,后者与之相反。现在看两者的accuracy相差不大,不过还需要进一步验证;

  • 音频数据增强,目前训练没有对原始音频数据做进一步增强,为了提升模型的泛化性,类似的噪声增强等方法是有必要的;

  • 移动端集成,移动端的集成需要有两部分工作,首先需要用c++重新实现stft和时频图,其次 MobileNet中最小的模型大概是970Kb,对于移动端而言还是过大,需要转换成tflite;

TODO

  1. 人声数据集
  2. 音频数据增强
  3. tflite模型转换+移动端集成
  4. 新的人声特征

参考

audio-toy's People

Contributors

zerozeus avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.