声学发展史之——人工智能(AI)声学

引言

最近接手了一个EOL (End of Line)的项目,用高斯混合模型GMM (Gaussian Mixture Model)作生产线上产品的质量检测。虽然提取特征的过程很痛苦,不过还是很有意思。也是因为兴趣,去年在Coursera上了吴恩达的Machine Learning,算是对机器学习的入门。随着机器学习的兴起,各个学科都在积极蹭热度,寻找和机器学习的契合点。这个系列就和大家聊聊机器学习在声学上的应用,标题略显浮夸,有蹭人工智能热度的嫌疑,其实主要是谈机器学习。对机器学习的了解有限,欢迎交流指正。

17f21fc40d67938ed0d3c0e2bc4957e5.gif

背景

机器学习现在已经被广泛应用到计算机视觉、图像处理、语音处理、地球物理等领域。和其他技术,比如压缩感知等类似,在计算机和图像处理领域掀起热潮之后,机器学习开始在声学崭露头角。虽然起步不早,但是发展很快。在人类语言语音、动物发声、水下声源定位等声学子领域都有应用。

机器学习的定义想必大家或多或少都知道,可以被宽泛地定义为,无需明确指令的情况下,依赖数据中的模式和特征,通过电脑研究算法和统计模型,来完成特定任务的过程[1]。机器学习大体分为三类:监督学习 (Supervised learning) ,无监督学习 (Unsupervised learning) 和强化学习 (Reinforcement learning)。这篇文章我们只关注前两类。

吴恩达教授给出的监督学习的定义:

In supervised learning, we are given a data set and already know what our correct output should look like, having the idea that there is a relationship between the input and the output[2].

无监督学习:

Unsupervised learning allows us to approach problems with little or no idea what our results should look like. We can derive structure from data where we don't necessarily know the effect of the variables.

简单说就是监督学习对于输出我们已经有了预期,知道他们长什么样;无监督学习是不知道输出应该是什么,最后用数据来判断。比如同样是分类,垃圾邮件分类是监督学习;把同质类的新闻分类就是无监督学习,因为我们并不知道要分成几类,也没有具体分类标准。

声学是物理学分支,人们几百年来一直致力于发展声学的物理模型,如下图的x轴所示;随着数据量的增大,以数据为驱动的方法也逐渐被运用,如图的y轴。右上角方向就是声学发展的方向:更先进完备的物理模型和大数据驱动的机器学习的结合[3]。机器学习中,数据特征是关键。

9521a65b6fccc486d07c8043f644fd87.jpeg

机器学习的常见方法

机器学习有海量的学习资料,我一个外行就不再班门弄斧讲基础知识。在这里简单列几个比较常用的机器学习方法。

监督学习

1. 回归和分类

用吴恩达老师在Coursera的Machine Learning里面的一张图展示什么是回归。横坐标房子面积,纵坐标房价,我们可以用各种曲线来代表房价趋势,从而由面积预测房价。

b13750285cb62ff5122722d358091b50.jpeg

[Machine Learning, Coursera]

分类很好理解,一个简单的例子

486076eac38ca3d672fe02b639e8a4c2.jpeg

[Machine Learning, Coursera]

其他的方法还有支持向量机SVM (Support Vector Machine)、神经网络等。其中支持向量机要比回归更灵活,而神经网络可以利用非线性模型进行预测或分类。

00feb591f7bc99f84f75da0723246b35.png

神经网络非线性分类 [Machine Learning, Coursera]

无监督学习

主要方法有:

1. 主成分分析 PCA (Principal components analysis)

8eae0579456e498214af71f548e36c82.jpeg

PCA: 通过正交变换把数据转化成线性无关的主成分,对数据进行降维打击,让特征更具代表意义 [Wikipedia]

2. K-means

6af9deeba5199e47367be637faae6acb.gif

k-mean: 通过迭代找到不同类数据的中心点,从而对数据分类 [Wikipedia]

3. GMM 和最大期望Expectation Maximization (EM)

和k-mean类似,也是一种聚类分析。通过混合几个不同的高斯分布,对特征分类。

0139a7fdd01b2b3c29e2194928101dfb.png

GMM [https://towardsdatascience.com/gaussian-mixture-models-explained-6986aaf5a95]

其他方法还有字典学习 Dictionary learning,Autoencoder network、深度学习(包括卷积神经网络)等。

机器学习在声学中的应用

1. 音频处理中的声源定位

在音频处理中,对声源或者发声者的语音增强是核心问题。机器学习和声学的结合,在手机、汽车、助听器和智能家居等领域都有广泛应用。虽然这个方向的发展非常迅猛,但是在高背景噪声和房间混响的环境下准确识别声源依然是最大的挑战。LOCATA项目最近发起了一项声源定位和追踪的挑战,建立了一个基于现实生活录音的数据库可以用来训练声源定位算法[4]。现在国内外各大语音相关企业都在开展这方面的研究。

396d8c81825299cd1e866b1a0665ebad.jpeg

GMM结合EM提高定位精度 [3]

2. 海洋声学中的声源定位

海洋声源定位主要利用声呐系统结合Matched field processing (MFP)算法。由于空间中声源绝大多数为稀疏分布(不是空间里布满了声源),所以压缩感知 (Compressive sensing)在近十几年被引入声学。正如前述所说,声学一般都是滞后引入其他学科中的新技术,这似乎是声学学科的特点。

神经网络被用到过准确定位货轮位置[5]。对于浅海和倾斜的海洋环境,需要针对不同的海水深度训练time delay neural network (TDNN)模型从而避免mismatch [6]。今年又有学者成功利用单个水听器hydrophone结合deep residual CNN (Res-Net)预测声源范围和深度[7]。随着计算机能力的提升(比如量子计算机,虽然不知道还要多少年才能商用),结合机器学习和物理模型,有望实现更精准的实时海洋声源定位。

3e6093829cd36863160c2aff77133d65.jpeg

三个船不同时间的时频图 [5]

3. 生物声学

这个方向的应用比较有意思,主要研究自然界生物对各种声音的产生和感知,这里的声音不仅仅局限于语音。机器学习已经用于回答以下问题:为什么动物会发声?为什么会出现喊叫和歌声?这些声音之间有什么联系?这些方面有丰富的数据,可供机器学习使用。

通过采集动物叫声,来对他们的生物和生态方面的行为进行分类,从而鉴定某一个区域的动物分布密度,以及密度如何随时间变化,月亮圆缺如何影响动物觅食行为等。早在90年代就有人研究过海洋动物的特征 ,通过提取音频中特征对应的心理声学参数、时频特征等来训练机器学习模型。80年代就有人通过海豚的叫声来对海豚种类进行分类,后来GMM被用到了齿鲸叫声频谱参数数值变化的研究,用隐形马尔科夫模型HMM通过鸟叫来给鸟分类,用多层神经网络分类蝙蝠和鲸鱼,并识别出杀人虎鲸的叫声——方便及时跑路。还有用ensemble learning来给大黄蜂进行分类。无监督学习目前还没有被大面积用到生物声学领域。

718b4e0b1b1983c6a37cb104763e7131.jpeg

几个有趣的生物声学数据库:

https://www.macaulaylibrary.org

Sharing bird sounds from around the world

MobySound.org

British Library - Sounds

https://www.ngdc.noaa.gov/mgg/pad/

在医学领域机器学习和声学也有结合,用来做疾病诊断。比如澳大利亚的Noisy Guts(http://www.noisyguts.net/)公司用声学信号结合机器学习,诊断肠道疾病。

还有对语音信号进行情感情绪分析,来预判危险行为的发声,提前介入防止暴力发生,可以用在幼儿园和监狱等场所。荷兰的一家公司就在做这方面的研究。

7e92e43dc0c3d3e5169b3c4a5cd72139.jpeg

通过语音时频谱可以看出人的突然发生很大变化 [https://www.soundintel.com/products/overview/aggression/]

4. 地质探测

对碳水化合物的地质探测主要通过收集发射的地震波的反射波,来分析地表下反射层是否存在不连续,从而探测地下是否存在碳水资源。这个领域传统方法是结合信号和图像处理,利用声学做地质探测也是近期的事情。

96bdd33cc733c4c2c70f3d5a3892a1d5.jpeg

5. 混响和环境声

人类每天都在和复杂的声环境打交道,各种各样的声源包括语音、音乐、冲击、摩擦、流动、动物、机器等。每个声源发出的声音和其他声源以及周围环境发生交互,导致传到人耳里面的声音非常复杂,并不包含声源的原始声音。像之前提到的,去混响和反射、提取声源声音都是声学和机器学习结合面临的挑战,如何在混合信号中提取出声源声。比如,我们需要让助听器能够在背景噪声中分辨出人声,自动驾驶的汽车能在嘈杂的街道上听出警笛并让道(虽然这个功能在国内应该是鸡肋)。

在自然环境中,声源辨别面临以下几个问题:

声源种类繁多;

每种声源又有很大多样性;

自然环境中都是多个声音时间同时发生并互相干扰。

现在有好多的数据库来提供自然界的录音来训练classifier,比如DCASE challenges,ESC,TUT,Audio set,Urban Sound and scene classication (DCASE; TUT)。

通过声学结合先进的图像处理来进行声音场景和声源分类识别可以增强识别效果。还可以通过物理模型来模拟声音,用来方便产生更多数据来提取特征,训练模型[9]。

263c384572ef285f514bd769797209a0.jpeg

通过物理模型合成大型对比声音数据库 [9]

fb65d0fdc88cd644cb79486968e54863.gif

主要参考:Machine learning in acoustics: theory and applications. JASA, 2019。

参考

[1]https://en.wikipedia.org/wiki/Machine_learning

[2]https://www.coursera.org/learn/machine-learning/home/week/1

[3] Michael J. Bianco, Peter Gerstoft, James Traer, Emma Ozanich, Marie A. Roch, Sharon Gannot, Charles-Alban Deledalle. Machine learning in acoustics: theory and applications. JASA, 2019.

[4] Löllmann, Heinrich W., et al. "The LOCATA challenge data corpus for acoustic source localization and tracking." 2018 IEEE 10th Sensor Array and Multichannel Signal Processing Workshop (SAM). IEEE, 2018.

[5] Niu, Haiqiang, Emma Ozanich, and Peter Gerstoft. "Ship localization in Santa Barbara Channel using machine learning classifiers." The Journal of the Acoustical Society of America 142.5 (2017): EL455-EL460.

[6] Huang, Zhaoqiong, et al. "Source localization using deep neural networks in a shallow water environment." The Journal of the Acoustical Society of America 143.5 (2018): 2922-2932.

[7] Niu, Haiqiang, et al. "Deep learning for ocean acoustic source localization using one sensor." arXiv preprint arXiv:1903.12319 (2019).

[8] Fristrup K M, Watkins W A. Characterizing acoustic features of marine animal sounds[R]. Woods Hole Oceanographic Institution, 1992.

[9] Zhang Z, Wu J, Li Q, et al. Generative modeling of audible shapes for object perception[C]//Proceedings of the IEEE Int ernational Conference on Computer Vision. 2017: 1251-1260.

b3868f1ab1a16ebfe327a0b2aadb255a.jpeg

4fa3589e8bebada6004a104afc922e39.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个application多个 URL

需求: 希望一个sharepoint网站,有多个网址去访问。例如:http://moss:8080/的网站,http://aphla.prismshareusa.int/ 和 http://aphla.carat.int/ 两个网站同时访问。 解决方法如下: 1)创建DNS…

写的重采样文章被大佬看到了

他让我看重采样昨天写的重采样文章被一个大佬看到了,给我发了消息如下大佬是个技术原厂Linux方向的负责人,我在工作上遇到的好几次疑难杂症都是在他的指点下得到解决,而且平时讨论技术的时候,能感觉到他对技术问题理解很深。从他的…

根据IP地址获取主机名称

IP地址获得主机名称 1. 根据IP地址获得主机名称///<summary>///根据IP地址获得主机名称 ///</summary>///<param name"ip">主机的IP地址</param>///<returns>主机名称</returns>publicstringGetHostNameByIp(stringip) …

vector中的reserve() 与 resize()

resize()与reserve()都是vector容器中的方法&#xff1a; resize():改变了capacity()和size() reserve():增加了vector的capacity()&#xff0c;但是它的size()没有改变 #include <iostream> #include <stdio.h> #include <vector> #include<functiona…

【C++】考虑virtual函数以外的其他选择

假设你正在写一个视频游戏软件&#xff0c;游戏里有各种各样的人物&#xff0c;每个人物都有健康状态&#xff0c;而且不同的人物可能以不同的方式计算他们的健康指数&#xff0e;该如何设计游戏里的人物&#xff0c;主要如何提供一个返回人物健康指数的接口&#xff0e; 方法一…

不知道你们遇到这样的问题没?

最近在网上看到这样一个内容https://developer.horizon.ai/forumDetail/118363914936419003关于J5/J3/J2平台的底层软件地平线内部的释放计划和形式&#xff1f;您好&#xff1a;问题如题&#xff0c;我们当前在地平线J5平台展开进行的项目居多&#xff0c;跟贵司接触和合作的部…

boost::split()的使用方式

引用的头文件 <boost/algorithm/string.hpp> boost::split()函数用于切割string字符串&#xff0c;将切割之后的字符串放到一个std::vector<std::string> 之中&#xff1b; 有4个参数&#xff1a; 以boost::split(type, select_list, boost::is_any_of(",&…

第四周:机器学习知识点回顾

前言&#xff1a; 讲真&#xff0c;复习这块我是比较头大的&#xff0c;之前的线代、高数、概率论、西瓜书、樱花书、NG的系列课程、李宏毅李沐等等等等…那可是花了三年学习佳实践下来的&#xff0c;现在一想脑子里就剩下几个名词就觉得废柴一个了&#xff0c;朋友们有没有同感…

移植linux内核到i.MX6ULL过程

本文描述移植NXP官方 linux 5.4 内核到i.MX6ULL开发板。一、NXP官方linux内核1. 下载 NXP官方linux仓库地址为&#xff1a;https://github.com/Freescale/linux-fslc/tree/5.4-2.1.x-imx。选择该分支下载zip包即可&#xff0c;不要整个仓库下载&#xff0c;太大了&#xff1a;2…

Go语言之进阶篇http服务器获取客户端的一些信息

1、http服务器获取客户端的一些信息 示例: package mainimport ("fmt""net/http" )//w, 给客户端回复数据 //r, 读取客户端发送的数据 func HandConn(w http.ResponseWriter, r *http.Request) {fmt.Println("r.Method ", r.Method)fmt.Println…

R学习之——R用于文本挖掘(tm包)

首先需要安装并加载tm包。 1、读取文本 x readLines("222.txt") 2、建立语料库 > rCorpus(VectorSource(x))> rA corpus with 7012 text documents 3、语料库输出&#xff0c;保存到硬盘 > writeCorpus(r) 4、查看语料库 > print(r) A corpus with 7012…

学了STM32要继续学习Linux吗?

关注我的读者中&#xff0c;有很大一部分是单片机&#xff08;STM32&#xff09;的开发者&#xff0c;经常看到有人问类似的问题&#xff1a;学了STM32要继续学习Linux吗&#xff1f;每个人的情况不同&#xff0c;到底要不要学习Linux&#xff0c;要结合自身的情况。有的人已经…

模板函数与特化函数

本文转自&#xff1a;https://www.cnblogs.com/dracohan/p/3401660.html 转来收藏以便查阅&#xff0c;感谢原作者 今天在写代码时&#xff0c;遇到了模板和特化&#xff0c;在网上找了资料后问题呗一一解决&#xff0c;转载此文用于以后查阅&#xff0c;感谢原创者。其中增加…

这样调试内核启动流程

内核生命周期uboot 打印完 Starting kernel . . .&#xff0c;就完成了自己的使命&#xff0c;控制权便交给了 kernel 的第一条指令&#xff0c;也就是下面这个函数init/main.casmlinkage __visible void __init start_kernel(void){...rest_init();}start_kernel 相当于内核的…

ios 图片添加阴影

2019独角兽企业重金招聘Python工程师标准>>> UIimageView *imageView [[UIImageView alloc ] init]; imageView.layer.shadowColor [UIColor blackColor].CGColor; imageView.layer.shadowOffset CGSizeMake(3,2); imageView.layer.shadowOpacity 0.6; imageVie…

asp.net定时执行任务-解决应用池回收问题----转载

在复杂的业务应用程序中&#xff0c;有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行&#xff0c;比如定时备份或同步数据库&#xff0c;定时发送电子邮件&#xff0c;定期处理用户状态信息&#xff0c;支付系统中定期同步异常账单等等&#xff0c;我们…

bool与string互转

今天在工作中遇到了将string转换成bool类型数据&#xff0c;查阅了工具书解决了问题&#xff0c;现将注意要点总结如下&#xff1a; 增加头文件&#xff1a;#include <sstream> 代码如下&#xff1a; 在codeblocks软件上测试结果如下&#xff1a; 使用者需要根据自己的实…

Go语言之高级篇beego框架之参数配置与路由配置

一、参数配置 beego默认会解析当前应用下的conf/app.conf文件 1.1、beego的参数配置 appname WEB httpport 8080 runmode dev 几种开发模式 [dev] httpprot 8080 [prod] httpport 8081 [test] httpport 8082 //备注&#xff1a; beego.AppConfig.String( "dev::m…

C++ int转string以及源码

今天遇到一个int类型数据转换为string&#xff0c;查了资料在c11标准中增加了全局函数std::to_string来实现该功能&#xff1a; string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string t…

EUREKA原理总结

Eureka高可用架构 https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance 上图中主要的名称说明&#xff1a; Register&#xff1a;EurekaClient注册&#xff08;Http请求&#xff09;到EurekaServer&#xff0c;EurekaClient会发送自己元数据(ip,port,主页等)&#xff0…