Google AI 博客:Hum to Search 项目,使用机器学习来识别随口哼唱的旋律
卡在您脑袋里的旋律通常被称为“耳虫”,这是一种众所周知的,有时会令人烦恼的现象-一旦“耳虫”在那里,就很难摆脱它。研究发现当你重新接触到原曲时,不管是听或唱,将消除“耳虫”的烦恼。但是,如果您不太记得歌曲的名称,只能哼出旋律,该怎么办?
随口哼出来的旋律与其原始的和弦录音室录音相匹配在目前现有方法看来是有若干挑战的。使用歌词,背景人声和乐器,音乐或录音室录音的音频可能与随口哼出来的音乐完全不同。无论是出于错误还是出于设计目的,当有人在哼唱歌曲时,其音调,键,速度或节奏通常可能会略有变化,甚至可能有很大差异。这就是为什么这么多现有的通过哼唱进行查询的方法会将哼唱的曲调与歌曲的仅现有旋律或哼唱版本的数据库进行匹配,而不是直接识别歌曲。但是,这种类型的方法通常依赖于需要手动更新的有限数据库。
Hum to Search 于10月推出,是Google Search中一种全新的完全机器学习的系统,该系统允许人们仅凭单调的歌词来查找歌曲。与现有方法相反,此方法从歌曲的频谱图中嵌入了旋律,而没有产生中间表示。这使模型可以将哼唱的旋律直接匹配到原始(和弦)录音,而无需每个轨道的哼唱或MIDI版本,也不需要其他复杂的手工工程逻辑来提取旋律。这种方法极大地简化了Hum to Search的数据库,使之可以不断嵌入来自世界各地的原始唱片(甚至是最新发行的唱片)进行刷新。
背景技术
许多现有的音乐识别系统在处理音频样本之前将其转换成声谱图,以便找到良好的匹配。然而,在识别哼唱旋律的一个挑战是,哼唱曲调通常包含信息相对较少,通过如示出的这个示例哼唱的啊朋友再见。哼唱版本与相应录音室录音中相同片段之间的差异可以使用频谱图可视化,如下所示:
给定左侧的图像,模型需要从超过5000万个相似外观的图像(对应于其他歌曲的录音棚片段)的集合中定位与右侧图像相对应的音频。为此,该模型必须学习专注于主导的旋律,并忽略背景人声,乐器和声音音色,以及背景噪声或房间混响所引起的差异。为了用肉眼找到可以用来匹配这两个声谱图的主要旋律,一个人可能会在上面图像底部附近的线条中寻找相似之处。
先前使得能够发现音乐的努力,特别是在识别在诸如咖啡馆或俱乐部的环境中正在播放的录制音乐的上下文中,证明了如何将机器学习应用于该问题。Now Play于2017年发布到Pixel手机,使用设备上的深度神经网络无需服务器连接即可识别歌曲,Sound Search进一步开发了这项技术,可提供基于服务器的识别服务,以实现更快,更准确的搜索超过一亿首歌曲 然后,下一个挑战是利用从这些发行版中学到的知识来识别相似的大型歌曲库中的哼唱或演唱音乐。
机器学习设置
开发Hum to Search的第一步是修改“即时播放”和“声音搜索”中使用的音乐识别模型,以处理哼唱的录音。原则上,许多这样的检索系统(例如图像识别)以相似的方式工作。用成对的输入(此处是录制的音频和哼唱或唱歌声配对)训练神经网络,以为每个输入产生输出,随后将其用于与哼唱的旋律匹配。
为了实现哼唱识别,网络应产生嵌入层,使包含相同旋律的音频对彼此靠近,即使它们具有不同的乐器伴奏和歌声。包含不同旋律的音频对应该相距较远。在训练中,会为网络提供此类音频对,直到它学会产生具有此属性的嵌入层。
然后,受过训练的模型可以生成与歌曲的参考唱片的嵌入层类似的音乐嵌入层。那么找到正确的歌曲仅是从根据流行音乐的音频计算出的参考唱片数据库中搜索类似嵌入层的问题。
训练数据
因为模型的训练需要歌曲数据对(录制和演唱),所以第一个挑战是获取足够的训练数据。我们的初始数据集主要由演唱的音乐片段组成(其中很少包含哼唱)。为了使模型更健壮,我们在训练过程中增加了音频样本集,例如,通过随机改变演唱输入的音高或速度来增加音频。最终的模型足以识别唱歌声,但对于哼唱或吹口哨来说却不够。
为了提高该模型在哼唱旋律上的性能,我们使用SPICE来从现有音频数据集中生成模拟“哼唱”旋律的其他训练数据,SPICE是我们更大的团队作为FreddieMeter项目的一部分开发的音高提取模型。SPICE从给定的音频中提取音高值,然后将其用于生成由离散音频音调组成的旋律。该系统的第一个版本将原始剪辑转换为这些音调。
后来,我们通过用神经网络代替简单的声音生成器来完善了这种方法,该神经网络生成的声音类似于实际的哼唱或啸叫声。例如,网络从上面的演唱剪辑生成此哼唱示例或吹口哨示例。
最后,我们通过混合和匹配音频样本来比较训练数据。例如,如果我们有来自两个不同歌手的相似剪辑,则可以将这两个剪辑与我们的初步模型对齐,从而能够向模型显示另一对代表相同旋律的音频剪辑。
机器学习的改进
在训练Hum to Search模型时,我们从三重损失函数开始。已经证明,这种损失在各种分类任务(例如图像和录制的音乐)中表现良好。给定一对与同一旋律相对应的音频(嵌入空间中的R和P点,如下所示),三重音丢失将忽略源自不同旋律的训练数据的某些部分。这可以帮助机器改善学习行为,或者是当它发现另一种太“容易”的旋律,因为它已经离R和P太远时(请参阅E点),或者因为考虑到模型的当前性而太难了。在学习状态下,音频最终与R过于接近-尽管根据我们的数据,它代表了不同的旋律(请参见H点)。
我们发现,我们可以通过采取这些额外的训练数据(点H和E)考虑提高模型的精确度,即通过在一个批次的例子制订的模式的信心一般概念:如何确保模型所看到的数据是可以正确分类,还是所看到的示例是不符合当前理解的?基于这种置信度概念,我们增加了一个损失,使模型置信度在嵌入空间的所有区域都达到100%,从而提高了模型的精度和召回率。
上述变化,尤其是我们对训练数据的变化,扩充和叠加,使部署在Google搜索中的神经网络模型能够识别出歌声或嗡嗡的旋律。当前的系统在包含超过50万首我们正在不断更新的歌曲的歌曲数据库上达到了很高的准确性。这首歌的语料库仍然有成长的空间,可以容纳世界上更多的旋律。
要试用该功能,您可以打开最新版本的Google应用,点击麦克风图标,然后说“这是什么歌?” 或单击“搜索歌曲”按钮,然后可以哼唱,唱歌或吹口哨!我们希望Hum to Search可以帮助您解决这种困扰,或者只是在您想要查找和播放歌曲而无需键入歌曲名称的情况下为您提供帮助。
致谢
此处描述的工作由Alex Tudor,Duc Dung Nguyen,Matej Kastelic,MihajloVelimirović,Stefan Christoph,Mauricio Zuluaga,Christian Frank,Dominik Roblek和Matt Sharifi创作。我们非常感谢Krishna Kumar,Satyajeet Salgar和Blaise Aguera y Arcas一直以来的支持,以及我们与之合作开发了完整的Hum to Search产品的所有Google团队。
我们还要感谢Google的所有同事,他们捐赠了自己演唱或哼唱的片段,因此为这项工作打下了基础,同时也感谢Nick Moukhine构建了Google内部的演唱捐赠应用程序。最后,特别感谢Meghan Danks和Krishna Kumar对早期帖子的反馈。
Google AI 博客:Hum to Search 项目,使用机器学习来识别随口哼唱的旋律相关推荐
- 试用google的博客
试用google的博客 最近试用了google的blogger,其实Google目前最好用的依然是邮箱,其他的一些产品的方便性上差那么一点火候. 怀着试试看的态度,用了一下Google的博客blogg ...
- 开源-一步步实现cnblogs博客采集工具-对项目需求的分析
欢迎继续关注CnblogsFan开源项目, 在昨天的项目时间中, 我们已经完成了项目开始前的一些准备工作, 今天, 我们就一起来分析下项目的一些需求. 在对需求进行分析之前我们先来再次熟悉下一个完整项 ...
- php开源项目博客,F2blog - 博客Blog - PHP开源项目 - 开源吧
相关开源项目 Bluetrait:Bluetrait是一个webblog工具.它支持多用户,XHTML输出,一个事件查看器,RSS和链接管理. NibbleBlog:NibbleBlog 是一个强大的 ...
- Diango博客--14.使用 Django 项目中的 ORM 编写伪造测试数据脚本
文章目录 0.思路引导 1.脚本目录结构 2.使用 Faker 快速生成测试数据 3.批量生成测试数据 4.执行脚本 5.效果展示 0.思路引导 1)为了防止博客首页展示的文章过多以及提升加载速度,可 ...
- BBS(仿博客园系统)项目03(主页搭建、个人站点搭建(侧边栏分类展示、标签展示、日期归档)、文章详情页相关功能实现)...
摘要: 主页面的搭建(导航条下面的区域) 个人站点 侧边栏分类展示 侧边栏标签展示 侧边栏日期归档 文章详情页 文章内容 文章点赞点踩 文章评论 一.主页面home.html的搭建(进一步完善) ho ...
- 解忧杂货店(博客系统)的项目测试——黑盒测试
一.项目描述: 一个一个的烦恼.忧愁,甚至于你内心深处的秘密,是否觉得无处搁置呢?把他们都放进解忧杂货店吧,来这里寻找内心的平静.本项目设计并实现了用户注册.用户登录.文章创作.文章列表查看以及用户注 ...
- 一个能瞬间提升你博客逼格的 GitHub 项目!
公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家好,我是小 G. 作为一名程序员,相信在座不少人在一开始接触编程的时候, ...
- 博客园app小项目有源码--在百度手机助手上线
这是一个基于博客园接口的app应用,自己花费了一段时间才完成,也算是自己第一个按照软件开发流程做的第一款比较像样子的android app应用,主要包括了: 1,需求分析 2,概要设计 3,接口分析 ...
- 手写数字识别实现课设cnsd博客_使用Tesseract轻松实现OCR字体识别
本教程翻译自PyImageSearch英文原文 实现效果 今天的博客文章是安装和是用Tesseract library 进行OCR识别的两章系列中的第一部分. OCR可以自动对手写或者印刷字体进行类型 ...
- 牛人的博客(图像处理,机器视觉,机器学习等)
1.小魏的修行路 http://blog.csdn.net/xiaowei_cqu 2.晨宇思远(邹宇华 北京航空航天大学) http://blog.csdn.net/chenyusiyuan 3. ...
最新文章
- sql查询第二大的记录(转)
- linux 读写时间变长,linux时钟变慢的原因分析【转】
- sqlDataAdapter的FillSchema用法
- Java中的一些坑,汇总篇(2万字)
- 【调用IP宏文件进行仿真】modelsim仿真时出现 Instantiation of 'xxx' failed. The design unit was not found....
- php-resque 轻量级队列
- [Guava源码日报](8)ImmutableCollection
- ListView删除选中的多项目
- 转:OGRE场景管理器介绍
- 45个python入门案例_给Python小白看的10个使用案例,入门Python就在这里了
- 如何自主搭建信息管理系统
- Perl教程-2.环境的安装
- GitCode 在线 Web IDE
- 腾讯云即时通讯im之获取userSig
- 计算机适合用mac吗,原神能用苹果电脑玩吗
- 树(前序,中序,后序)
- 关于队里面最菜的在博客打卡第六天这件事
- 微信分身 服务器,看了这个,你还敢用分身版微信吗?
- 解读《A Regularized Deep Learning Approach for Clinical Risk Prediction of Acute Coronary Syndrome》
- oracle基础语句练习
热门文章
- 将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中
- Android 语音助手
- 第二章 认识的本质及其规律笔记
- 用心成就精品海天讲述不一样的品牌故事
- 【SAS BASE】SAS格式、缺失值表示、命名规则及路径
- Unix/Linux环境C编程入门教程(14) Mandriva LinuxCCPP开发环境搭建
- 腾讯云服务器2003系统,腾讯云服务器windows2003系统续用的说明
- 灵芝酸大鼠血清白蛋白纳米粒|茯苓酸小麦麦清白蛋白纳米粒雷公藤内酯醇-牛血清白蛋白纳米粒(TRD-BSA NPs)
- 51单片机 程序 红外发射 红外接收 红外双机通信 红外遥控器 控制 灯 系统 proteus 仿真
- arm920t内核技术手册