当前位置: 首页 > news >正文

黑白键上的字节跳动:全球最大钢琴MIDI数据集背后的故事

‍‍‍‍‍‍‍在上海纽约大学的 Music X Lab,一架自动演奏钢琴正在播放古典钢琴独奏曲《钟》。原本只有两个人的实验室里,不断有人循着钢琴声加入,大家安静地听着,直至曲终。


听众里的孔秋强来自字节跳动,作为 GiantMIDI-Piano(钢琴转谱)研究项目的牵头人,是他的团队创造了这首可以通过录音转谱、被自动演奏的MIDI琴曲。‍‍‍‍‍‍‍

通过自动演奏钢琴播放转谱MIDI

重构李云迪演奏的《钟》

“之前从来没想象过,播放一瞬间才感受到钢琴家亲自演奏的震撼,这种感觉非常满足。” 

不久后,一则「钢琴转谱」相关的科技新闻在国内外引发了关注。

01

全球最大

古典钢琴数据集发布

10月,字节跳动发布全球最大的古典钢琴数据集 GiantMIDI-Piano,开发并开源了一套高精度钢琴转谱系统。


数据集中筛选并转谱了来自 2,786 位作曲家的 10,854 部钢琴作品,不同曲目的总时长达到了 1,237 小时,是谷歌 MAESTRO 数据集的 14 倍,填补了计算机音乐领域一直缺少一个大规模的钢琴 MIDI 数据集的空白


GiantMIDI-Piano 的用途包括但不限于音乐信息检索、自动作曲、智能音乐创作、计算机音乐学等

简单说,GiantMIDI-Piano 把国际音乐数字图书馆上能找到,并能在网上搜索到的所有古典钢琴曲转换成了 MIDI 文件,并且在数据规模和精度上做到了世界顶级。

“我们发表的第一篇论文介绍了钢琴转谱系统,被 Twitter 上一位硅谷科技博主转发推广后,收到了很多正面反馈。”孔秋强注意到不少人对这套钢琴转谱系统的易用性精确性大加赞叹。

团队发表的第一篇论文

团队紧接着发表了第二篇论文《GiantMIDI-Piano: A large-scale MIDI dataset for classical piano music》,公布了数据集、将数据和代码进行了开源,在计算机音乐科学领域接连投下重磅惊喜。

这套数据集和相关论文一经发布,就收获了来自硅谷和世界各地的科技大V、音乐家、作曲家、研究学者和科技媒体的转发和好评。

很多音乐家、作曲家试用了这个钢琴转谱系统的工具包,体验了在1-2分钟里搭建起一个系统、把自己的曲子转换成 MIDI 的过程,使用门槛大大降低了。部分使用者认为,GiantMIDI-Piano 比市场上现有的转谱系统要更加流畅、自然

另外,他们发现这套转谱系统里包含了对钢琴按键力度、钢琴踏板等等这些非常复杂、对钢琴的表现力也非常重要的数据维度,整体更加精确。

美国纽约知名钢琴家、作曲家Dan Tepfer“点赞”

有了这个数据集,想把钢琴曲谱转换成 MIDI 文件,可能只需要点几下鼠标就可以下载。不少人表示“梦想了这么多年的事,终于有人实现了!”、“这是计算机音乐史上一个重要的里程碑!”

02

不仅要追赶领先者

也要成为领先者

去年12月,在英国萨里大学拿到电子信息工程博士学位的孔秋强经过小半年实习后,正式加入字节跳动 Speech, Audio and Music Intelligence (SAMI)组,这是一支从硅谷成长壮大,base在美国、欧洲和国内三地的国际化团队,致力于通过智能音频技术赋能内容互动和创作

在和众多拥有博士学位、曾供职于 Google、Spotify 等业内顶尖公司的专家的共事中,秋强专注于对通用声音的识别、监测和分类的工作。

除了支持集团业务需求之外,围绕潜在的实际场景,团队也会布局更长期的前沿研究工作。

做钢琴转谱这个项目的动机,就是通过基础性研究,与 Google、Facebook 这些业内顶尖的公司一道,运用技术解决本质的问题,甚至实打实地在研究领域去引领一些方向,“我们不仅要跟随别人,也要让别人跟随我们。”

抱着这样的想法,孔秋强把目光投向了他一直颇感兴趣、并随时关注着最新研究动态的计算机音乐领域。

“如果稍微熟悉这个领域就会发现,在图像和声音领域分别有 ImageNet 和 AudioSet 等大型数据集,在业界的影响力都非常大。但是在音乐领域,缺少一个这样量级的数据集。

做 GiantMIDI-Piano,就是希望能引领未来 10 年甚至 30 年里计算机音乐学的发展。我们为大家准备好数据材料,方便后续的研究者们在这个领域做更深入的研究。

除了数据集,在技术层面,最让行业内的专家觉得惊喜的是,GiantMIDI-Piano 的转谱系统可以将钢琴按键的时间精确到 1 毫秒这个量级,突破了之前 Google 算法 32 毫秒识别精度的限制

“这是一个非常平滑的预测,实现了任意时间精度的音符检测,所以我们叫做高精度预测。”

媒体报道后,孔秋强收到了几十个人发来的邮件,向他表示祝贺、希望交流分享等等。也有不少朋友表示希望加入字节跳动,一些在海外科技大厂工作的博士生同学说,“在 ByteDance 可以做这么有意思的事情,影响未来发展,非常了不起。

机器之心海外版报道

对于技术的未来前景,机器之心海外版引用业内专家的分析——

“这项工作无疑是令人振奋的,字节跳动可能会将这项技术应用于后疫情时代的线上音乐直播、智能音乐创作中。”

03

“能做GiantMIDI-Piano

是因为我们有领先的技术”

孔秋强坦言,在 2018 年读博的时候就有了这个 idea,但受限于当时的技术手段无法实现。


“很多人都意识到制作一个大型 MIDI 数据库的必要性,可是受到技术制约做不出来。做这个事情是需要技术积累的,我们现在拥有领先的技术,充足的计算资源,顶级的科学家团队,才有能力制作 GiantMIDI-Piano。

从今年1月份开始,有了不断的积累沉淀和团队的支持,觉得技术手段上允许了,他开始着手准备 GiantMIDI-Piano 的工作。

GiantMIDI-Piano 项目涉及到的技术问题非常庞杂,其中最困难的部分是怎么把所有的 idea 组织起来、做好顶层设计,并一一拆解技术难点

经过从上往下的梳理,团队列出了想要做成 GiantMIDI-Piano 必须攻克的难关——

  • 如何做钢琴转谱?

  • 如何把古典钢琴音乐家的信息收集起来?

  • 如何找到钢琴曲对应的音频并保证正确?

  • 如何设计钢琴独奏检测系统?

  • 如何评价转谱结果?

这些难点,每一个都可以拆开成无数个更小的点,需要一一解决。比如「钢琴转谱」这一项,可能随便数一下就有一系列小的挑战——

  • 动态范围大:钢琴琴键按下的时间非常精确,差 0.1 秒,听着都会不舒服;

  • 力度估量难:有功力的人听一段钢琴曲可能就能扒谱子扒下来,但是很难判断每个音的音量;

  • 复音乐系统:钢琴是复音乐器,不同的按键随机组合有上万种可能,很难精准识别;

  • 风格多样:巴赫、李斯特、近现代等等不同的钢琴流派和音乐风格之间,跨度很大;

  • 踏板因素:钢琴踏板这个因素在之前的研究里很少被触及,但其实很重要。

GiantMIDI-Piano 中前 100 位不同作曲家的曲目数量分布

为了搞定这些技术难点,做到高精度,GiantMIDI-Piano 的技术方案中用到了诸多当今领先的技术。

  • 提出通过回归具体的时间,而不是分类去实现高精度,在训练过程中采用了回归距离的方法,去代替 Google 用的分类的方法,让训练的目标能以任意精度描述钢琴的起始时间和结束时间,这是一个创新,而且这个方法同时运用到了 onset 和 offset 当中,比分类的方法要稳定;

  • 测试过程中提出了一种数学解析的算法,能够以任意精度预测 onset 开始点和 offset 结束的时间位置信息,同样这套高精度的算法也运用到了钢琴踏板转谱的技术里。

第1 - 3行:前人提出方法的训练目标

第4行:我们提出方法的训练目标

04

低头做事的同时

也别忘了仰望星空

团队认为,GiantMIDI-Piano 这项研究的意义在于,通过研究钢琴转谱,可以反哺基础技术的研究。


比如在音乐信息检索的场景中,钢琴转谱反哺的音频事件检测技术可以帮助识别一首歌曲中哪一部分是歌声,另外在短视频和特效领域也值得期待。

说起 GiantMIDI-Piano 在未来可能的应用场景,孔秋强难掩激动,描述了通过转谱后的 MIDI 文件来重构伟大钢琴家们演出场景的可能性。

转谱之后,把谱子用U盘插到特制的钢琴上,就可以现场听,立体声环绕。以后大家就不用买钢琴 CD 了,相当于把音乐家请到自己家里来。

比如今年是贝多芬诞辰 250 周年,把观众聚集到一个音乐厅,台上放一架可以自动演奏的钢琴,插上U盘,听众身临其境,真实还原钢琴现场演奏的美妙。

通过自动钢琴播放转谱MIDI与演奏原版的比对合辑

在研究过程中,他们发现古典钢琴音乐的数据集竟然只有 1 万部钢琴作品,比之前想的少很多。

通用的、大规模的、音乐领域的音频数据集,有很多可以专注的方向和可能性。这个项目叫 GiantMIDI-Piano,加一个 Piano 的后缀,其实就是给之后留空间,这个后缀说不定也可以是交响乐。”

此外,GiantMIDI-Piano 的研究也是学术界和工业界合作的典型案例。“学术界的很多想法不能顺利落地,就是因为缺少公司合作渠道和实际场景的驱动。”

我们能把这个事情做成,是因为有足够的计算资源、优秀的人才、良好的机制和创新氛围,这些都是我们公司的优势。

未来是大数据的时代,需要学术界和工业界紧密合作。

GiantMIDI-Piano 项目的成果发表后,同事们都在祝贺孔秋强和项目团队。他有些不好意思:

团队有很多博士,每个人都会发起科研项目,公司会提供空间鼓励大家找到自己专注的研究领域。除了钢琴转谱之外,SAMI 团队在语音合成、音频处理和识别、音乐理解和创作等等方向都有很多积累和创新。其实大家做得都非常好、非常棒。”

但让团队感触最深还是 leader 给他们的激励——希望大家在低头做事的时候,也要抬头仰望星空

延伸阅读:

  • "High-resolution Piano Transcription with Pedals by Regressing Onsets and Offsets Times".

    论文地址:https://arxiv.org/abs/2010.01815

  • "GiantMIDI-Piano: A large-scale MIDI dataset for classical piano music".

    论文地址:https://arxiv.org/abs/2010.07061


技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。

推荐阅读:

音视频面试基础题

OpenGL ES 学习资源分享

开通专辑 | 细数那些年写过的技术文章专辑

NDK 学习进阶免费视频来了

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

相关文章:

  • 当当福利,音视频开发囤书活动!
  • 推荐我录制的免费 Android NDK 进阶视频
  • 炫酷的Android时钟UI控件,隔壁产品都馋哭了
  • 面试官:如何监测应用的 FPS ?
  • 一张图概括淘宝直播背后的前端技术 | 赠送多媒体前端手册
  • 活用 Shader,让你的页面更小,更炫,更快
  • 再见!onActivityResult!你好,Activity Results API!
  • 10 个你可能还不知道 VS Code 使用技巧
  • 细数 2020 年官方对 Android 的那些重大更新!
  • 64位系统究竟牛逼在哪里?
  • 如何区分IO密集型、CPU密集型任务?
  • 一起来玩玩WebGL--第一弹
  • 便利贴撕页效果,隔壁产品都馋哭了
  • 没错,华为开始对移动开发下手了!
  • 移动手机病毒编年史(Cabir、Skulls、FakePlayer、HummingBad)
  • 【个人向】《HTTP图解》阅后小结
  • 3.7、@ResponseBody 和 @RestController
  • angular组件开发
  • ERLANG 网工修炼笔记 ---- UDP
  • Koa2 之文件上传下载
  • Median of Two Sorted Arrays
  • Redis 中的布隆过滤器
  • redis学习笔记(三):列表、集合、有序集合
  • Vue2.0 实现互斥
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 大主子表关联的性能优化方法
  • 对象引论
  • 构建二叉树进行数值数组的去重及优化
  • 计算机常识 - 收藏集 - 掘金
  • 聊一聊前端的监控
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 智能合约Solidity教程-事件和日志(一)
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # 数据结构
  • #NOIP 2014# day.2 T2 寻找道路
  • #stm32驱动外设模块总结w5500模块
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (BFS)hdoj2377-Bus Pass
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (多级缓存)多级缓存
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (规划)24届春招和25届暑假实习路线准备规划
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (算法)N皇后问题
  • (轉貼) UML中文FAQ (OO) (UML)
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?