参与 | shawn
编辑 | Donna
什么是风格迁移?
过去十年间,深度神经网络(DNN)被用于解决多种人工智能的任务,例如:图像分类、语音识别和游戏等,并迅速成为最先进的解决方法。
研究人员致力于开发可以帮助我们理解DNN模型学习原理的可视化工具(例如:Deep Dream、Filters),揭开DNN在图像分类领域成功的秘密。他们开发出了一个有趣的应用:从一个图像中提取风格并将其应用于另一个“内容不同”的图像。这就是所谓的“图像风格迁移”。
左图:内容图像,中间:风格图像,右图:内容+风格(图像来源: Google Research Blog)
这个应用不仅吸引了大量的研究人员,而且还催生了几个非常成功的手机应用(如:Prisma)。在过去几年间,这些图像风格迁移方法获得了巨大的进步,并有了一些非常出色的结果。
Adobe风格迁移,图像来源:Engadget
Prisma网站的示例
虽然这些算法在图像上取得了成功,但是在音频或音乐等其他领域却效果不佳,得出的结果远远不如在图像上那样令人满意。这说明音乐风格迁移更为困难。
在本研究中,我们将更加具体地探索音乐风格迁移,试图找出解决这个问题的方法。
为什么音乐风格转移更为困难?
在研究这个问题之前,我们需要搞清:什么是音乐风格转移?
回答这个问题很重要。对于图像而言,内容和风格的概念都是直观的。图像内容是指图像中出现的事物,例如狗、房屋、脸等,图像风格则是指图像的颜色、光线明暗、笔触和质感。
但是,音乐在语义上更加抽象,并且拥有多层面的性质。情境不同,音乐内容所指的含义有时也不同。人们常常认为音乐内容是指曲调,音乐风格是指编曲或和声。但是,音乐内容也可以指歌词内容,不同的曲调可以诠释为不同的风格。
在经典音乐中,音乐内容可以被定义为书面形式的乐谱(包括和声),音乐风格则是演奏者在加入自己的音乐表现力(现场修改乐谱)后对乐谱的诠释。因此,音乐风格迁移很难定义。另外还有几个关键因素让定义变得更加困难:
机器目前还无法很好地理解音乐:图像风格迁移之所以能成功实现,实际上是因为DNN可以出色地完成图像识别任务(例如:目标识别)。由于DNN能学习可以用来区分图像中不同目标的特征,因此它可以利用反向传播算法改变目标图像,使其与内容图像的特征相匹配。
虽然我们在开发基于DNN的音乐理解(例如:曲调转录、类型识别等)模型上取得了很大的进展,但是我们仍然远远无法实现在图像上实现的结果。这对音乐风格迁移而言是一个很大的限制。
由于我们现在的模型还无法学习可以对音乐进行分类的“优秀”特征,因此直接套用图像风格迁移算法无法得出类似的结果。
音乐是时序性的:音乐是一种时间序列数据,也就是说音乐随时间变化。对模型而言,这使得音乐学习起来十分困难。
虽然循环神经网络(RNN)和长短期记忆网络(LSTM)可以使模型更加高效地学习时序数据,但是我们仍没有开发出能够学习复制音乐中长期结构的模型。
顺便说一下:这是一个热门的研究课题,谷歌的Magenta团队在这方面取得了不错的成果。
音乐是离散的(至少在乐符上是这样的):符号音乐或乐谱在本质上是离散的。十二平均律系统是当前使用最普遍的调音系统,其音高在连续的频率谱中处于离散的位置。
同样,音符时值也离散的(通常表示为四分音符、全音符等)。这使得(在图像上使用的)反向传播算法很难应用于符号音乐。
十二平均律系统中音高的离散性
因此,图像风格迁移中使用的算法在逻辑上是无法直接套用在音乐上的。为了让风格迁移算法可以适用于音乐风格迁移,必须根据音乐概念和原理重新设计这些算法。
为什么要进行音乐风格迁移?
在探讨如何解决这个问题之前,我们必须理解解决这个问题有什么意义。和图像风格迁移一样,音乐风格迁移的潜在应用也相当有趣。开发供作曲家使用的编曲工具就是一种直接的应用。
例如,可以开发使用不同风格的管弦乐来改编乐曲的自动化工具,让作曲家可以使用这种工具快速地尝试不同的想法,是不是十分有用呢?这样的工具也可以用来混搭不同风格的歌曲,这可能会受到DJ们的追捧。
音乐风格迁移上取得的进步可以间接带来音乐信息学系统的进步。正如上文所述,为了让风格迁移算法可以适用于音乐数据,我们开发出的模型必须能够从不同层面上更好地“理解”音乐。
简化音乐风格迁移问题
由于此任务相对复杂,我们决定先分析不同类型的音乐的单音乐曲。单音乐曲就是音符序列,每个音符都有自己的音高和时值。音高的变化通常取决于曲调的音阶,时值的变化则取决于节奏。
这样,我们就可以得出音高内容和节奏风格的明确区别,借助这些区别我们可以转化风格迁移问题。另外,分析单音乐曲还可以让我们不必处理管弦乐编曲和歌词之类的问题。
由于我们没有可以用来区分音高变化和单音乐曲节奏的预训练模型,于是我们先提出了一种非常简单的迁移音乐风格的方法。
我们尝试学习不同类型的乐曲的音高和音符时值的模式,然后将这些模式整合在一起。
下图为这种方法的说明图。
音乐风格迁移法说明图
分别学习音高和节奏变化
数据表达:
我们将单音曲调表示为乐符序列,每个乐符都有一个音高和一个时值。
为了确保表达音符(representation key)相互独立,我们使用了一种基于音程的表达方法,将下一个音符的音高表示为相对于前一个音符的音高的偏离(+/- x半音)。我们为音高和音符时值分别创建了两个库。每个离散状态(音高、四分音符、全音符、附点四分音符、时值等偏离+1, -1, +2, -2)都分配有一个库索引。
模型架构:
在本研究中,我们使用的架构类似于Colombo等人使用的架构,即用一种类型的音乐同时训练两个基于LSTM的网络:
在给定前一音符和音符时值的条件下,学习如何预测下一音高的音高网络;
在给定下一音符和前一音符时值的条件下,学习如何预测下一音符时值的时值网络。
在Colombo等人的架构的基础上,我们在LSTM网络之前添加了嵌入层(embedding layers),利用其将输入音高和音符时值映射至可学习的嵌入间(embedding spaces)上。
网络架构图
训练过程:
使用每一种类型的音乐同时训练音高网络和时值网络。
我们使用了两个数据集:
包含2000首爱尔兰和瑞典民谣的Norbeck Folk数据集;
包含500首爵士乐曲的爵士乐数据集(未公开)。
整合训练后的模型:
在测试期间,先使用第一种类型的音乐(例如民谣)训练的音高网络和时值网络生成一首乐曲。然后,用另一种不同类型的音乐(例如爵士乐)训练一个时值网络,将所生成乐曲的音高序列作为该时值网络的一个输入,这样就可以生成一个新的时值序列。
通过整合这两个网络所生成的乐曲的音高序列与第一种类型的音乐(民谣)的音高相一致,时值序列则与第二种类型的音乐(爵士乐)的音符时值相一致。
初步结果
下方是样本输出的几个节选片段:
乐谱节选(民谣音高和民谣音符时值)
乐谱节选(民谣音高和爵士乐音符时值)
乐谱节选(爵士乐音高和爵士乐音符时值)
乐谱节选(爵士乐音高和音高和民谣音符时值)
结论
虽然我们当前的算法可以为之后的研究提供一个不错的起点,但是它仍有一些严重的缺陷:
如果只给定一首目标乐曲,模型无法实现“风格迁移”:模型需要从一种类型的音乐学习音高和音符市值模式,然后将学习到的所有模式泛化到另一种类型的音乐。我们的目标是可以将一首给定乐曲的风格转变成目标歌曲/乐曲的风格。
无法控制风格改变的程度:如果有一个“按钮”可以控制风格改变的程度,那就太完美了。
在迁移风格时无法保留被转变乐曲的音乐结构:一般而言,长期结构(Long-term structure)对音乐鉴赏价值至关重要。如果要想让生成的乐曲具有音乐美感,就必须保留原乐曲的音乐结构。
我们将在之后的工作中努力探索克服这些缺陷的方法。
作者 | Ashis Pati
原文链接 | https://ashispati.github.io//style-transfer/
精彩预告
2018年1月16日“AI生态赋能2018论坛暨CSDN AI新战略发布会”即将重磅开启!
国内权威专家/名企CTO/CIO/精英大伽齐聚,各路高手全方位多视角共话AI时代。更有《2017-2018 AI行业应用&技术人才成长路线图》重磅发布,敬请期待!
点击“阅读原文”查看详细信息☟☟☟