参加 2019 Python开发者日,请扫码咨询 ↑↑↑
整理 | 一一
出品 | AI科技大本营(ID:rgznai100)
看到今天的 Google Doodle 图标了吗?(不能FQ的也请假装看到)
Google 在节日以及重大事件或人物纪念日上都会展示定制版谷歌图标,是的,它就叫 Google Doodle。近几年,Google Doodle 有时更是做成了有趣味性的小视频形式,其中包括声效与互动游戏功能,使得 Doodle 更具观赏性和娱乐性。
3 月 21 日(格林尼治时间)是世界著名作曲家巴赫的生日,为了纪念他,Google Doodle 在搜索主页上配上了巴赫的巴洛克式的乐曲。
不过每个用户听到的乐曲可以是多样化的,这主要是因为 AI 的作用,有了 AI 的 Doodle 能让用户输入任何旋律来生成巴赫风格的和声。据了解,Google 使用机器学习分析了 306 种巴赫作品的和声数据集,以此生成巴赫风格的复调音乐。
比如你可以输入两小节长的单行旋律,并且改变音乐的音调和节奏,你也可以将生成的作品下载为 MIDI 文件与朋友分享。Google Doodle 还有一些隐藏的惊喜,单击键盘右侧的迷你放大器能使乐器升级为 80 年代的合成器。总之,无论你点击输入怎样稀奇古怪的音符,它都能给你自动匹配出巴赫风格的旋律。
Doodle 是人工智能产生音乐的可能性和局限性的完美演示。Google Magenta 项目的人工智能研究员 Anna Huang 告诉外媒 The Verge ,基础的 AI 模型是根据巴赫的合唱和声训练而成的。
Huang 表示,那些数据特别适合人工智能进行学习。“这个数据集中的巴赫作品是高度结构化的,风格非常简洁,但具有丰富的和声,允许机器学习模型用更少的数据进行学习。”巴赫是巴洛克音乐的作曲家,这种音乐是一种有着高度形式化的一致规则的流派。
不过让 AI 完美生成一首音乐作品不太现实,比如机器学习生成器要解决的问题是创建长期的结构和一致性,如何像巴赫这样的艺术家平衡简洁度和表现力,对 AI 来说更是异常困难。
当然,让 AI 作曲与人类作曲家碰撞出火花,显然更多是希望给作曲者提供灵感来源,能让他们填补一首作品中难以谱写的乐章部分。
Doodle 背后的机器学习模型
这是一个称为 Coconet 的机器学习模型。经过训练后的 Coconet ,可以从乐曲片段中恢复出巴赫的音乐,比如从巴赫乐曲中取出一块,随机删除一些音符,然后让模型从上下文中猜出丢失的音符。Coconet 可以协调旋律,平滑过渡,甚至从头开始编写乐曲,这是传统模型所做不到的,这种灵活性使其成为支持作曲过程的很好的工具。
由于 Coconet 能重写乐章,能找到适应不平衡的协调旋律部分:
为了将Coconet 进行更广泛的交互,Doodle 团队还构建了一个名为 Coucou 的扩展接口 。它支持人类与 AI 协作作曲,例如音乐家可以通过删除不满意的部分并要求模型再次填充来迭代音乐作品,也可以反复单击 infill 以获得不同的乐曲变化。
可以设想,音乐家利用其反复填写乐谱,直到生成让自己满意的旋律。当然,如果你不熟悉编曲,不要紧,只需要记住这句话:这款模型会尽力让输出的音乐听起来像巴赫的作品。
Coconet 如何运作的?
Coconet 获得不完整的乐谱并填写缺失的内容。为了训练这个模型,Doodle 团队从四部分对位的巴赫合唱数据集作为例子,随机擦除一些音符,并要求模型重建擦除的音符。巴赫与 Coconet 作品之间的差别提供了一个学习信号,通过它可以训练模型。
通过随机删除音符,Doodle 团队希望获得一个可以处理任意不完整输入的模型,这相当于同时训练多个模型,每个模型适用于不同的场景。
对他们而言,“乐谱”是三维物体。巴赫的合唱曲分为四种声音:女高音(S)、中音(A)、男高音(T)和低音(B)。每个声音的音乐都以 piano roll (钢琴卷轴)表示:二维阵列、时间水平延伸(离散化)、音高垂直布置。假设每个声音在任何给定时间都只唱一个音高。
因此,通常对于每个声音,在每个时间点,都有一个 one-hot 音高向量,除了一个表示正在演唱的音高向量外,其他元素全部为零。在存在不确定性的情况下(如在模型输出中),该音高向量将包含音高上的分类概率分布。
1
将这堆 piano roll 视为卷积特征映射,时间和音高形成二维卷积空间,每个声音提供一个通道。由于放入模型的乐谱不完整,他们为每个声音提供一个额外的通道,带有一个掩码:即二进制值,表示在每个时间点上是否已知该声音的音高。因此,模型中的内容是八通道特性映射。
该模型是一个相当简单的卷积神经网络,具有批量归一化和残差连接(residual connections)。对于使用 Tensorflow.js 实现在浏览器中运行模型的 Doodle,能够通过切换到深度可分离的卷积来加速计算。与常规卷积的不同之处在于,研究人员将空间轴上的卷积和跨越通道轴的混合分开,这样需要的参数更少,更适合在浏览器中加速。由于空洞卷积(dilated convolutions),他们通过减少模型中的层数,同时在不损失性能的情况下来进一步实现加速。
2
模型的结果再次是一堆 piano rolls,但这次包含了删除音符的音高上的概率分布。该模型使用给出的音符来试图找出被删的音符,从而在每个时间点的每个声音演唱的音调上形成一个分类分布。
他们训练这个模型给真音高分配高概率,让 AI 去理解不完整的音乐含义——我们在唱什么音调,唱什么和弦,要去哪里,从哪里来?
3
一旦模型被训练,他们有几种方法从模型产生的概率分布中提取音乐。比如可以根据其分布同时对每个音高进行采样,但这并不能解释被采样的音高之间的相互作用。通常,确定其中一个音高会改变其他音高的分布。
考虑这些相互作用的一种方法是对其中一个音高进行采样,将其添加到不完整的乐谱,并再次通过模型传递结果以重新计算剩余音高的分布。通过重复此过程直到确定所有音高,他们在考虑所有交互的同时完成乐谱,该顺序采样程序期望模型能够一个接一个地准确地确定未知的音高。
不过,Doodle 团队使用更强大的过程:将模型的输出结果视为草稿,然后通过重复重写逐步完善。具体来说,他们同时对所有音高进行采样,获得完整(但通常是无意义的)乐谱,然后将其部分擦除并再次传递到模型中,之后重复该过程。随着时间的推移,通过擦除并重写越来越少的音符使该过程能够确定一致的结果。
以上过程中,有一个关键问题是:为什么 Coconet 会有效?
实际上,他们对 Coconet 作为一个自回归结构集合进行了更为技术性的理解,其中包括序列模型中常见的时间结构。他们还从一次建模一个变量来写,无序建模,以及使用从多个排序生成的吉布斯采样(Gibbs sampling)等三大方面进行了具体说明。
更多详情内容,给出传送门:
https://magenta.tensorflow.org/coconet
相关论文链接:
https://arxiv.org/abs/1903.07227
◆
精彩推荐
◆
推荐阅读:
❤点击“阅读原文”,查看历史精彩文章。
【专栏预告】每周天12:00更新,欢迎指导与交流。
专栏地址:《VR 360°全景视频开发:从GoPro到Unity VR眼镜应用实战》
前言
随着VR技术的不断发展,360°全景视频的需求也在逐年增长。尤其是在VR眼镜端,360°全景视频带来了更加沉浸式的体验,无论是在文旅、教育还是娱乐行业,都为用户提供了更为丰富的互动和观看体验。
作为一名专注于XR开发的从业者,我在工作中接触并深入研究了安卓原生VR播放器开发、Unity眼镜端应用开发等多方面的技术。为了分享我的学习和实践经验,我决定在CSDN发布一系列技术专栏,带大家一起走进360°全景视频的开发世界。无论你是对视频制作感兴趣,还是想要开发一个高效、流畅的VR播放器,本专栏都将为你提供从基础到进阶的全方位技术支持。
专栏目标
本专栏旨在系统地分享VR 360°全景视频的开发全流程。包括但不限于全景视频的拍摄与制作、安卓原生VR播放器的开发、以及如何在VR眼镜上实现全景视频播放器。
此外,本专栏将深入探讨如何优化高分辨率视频的播放性能,并重点介绍如何通过手势交互提升VR眼镜端的用户体验,以及分享一系列实践中积累的技术难点与解决方案。
内容一览
Part 1|全景视频拍摄与制作基础
全景视频的制作是一项复杂的工作,涉及从设备选型、拍摄技巧到后期拼接和渲染的多个环节。在本部分,我将分享如何使用市面上的设备(如GoPro、Insta360)进行360°全景视频拍摄,同时讲解后期的拼接与处理流程,帮助你从零开始制作出高质量的全景视频素材。
- 第一节|全景视频概述与应用场景(2025年3月23日12:00更新)
- 第二节|全景视频拍摄设备选型与使用技巧(2025年3月30日12:00更新)
- 第三节|全景视频后期拼接与处理流程(2025年4月6日12:00更新)
- 第四节|基于UE/Unity的全景视频渲染与导出(2025年4月13日12:00更新)
Part 2|安卓原生360°VR播放器开发实战
在安卓平台上开发一个高性能的360°VR视频播放器,是提升VR体验的关键。本部分内容将详细介绍如何利用安卓原生技术(如MediaCodec、OpenGL ES)实现视频解码和渲染,如何优化播放器性能,并介绍如何进行不同VR设备的适配,确保你能够为不同的用户提供流畅的播放体验。
- 第一节|通过传感器实现VR的3DOF效果(2025年4月20日12:00更新)
- 视频解码与渲染优化实战
- 传感器与交互控制实现
- 安卓VR播放器性能优化与设备适配
Part 3|Unity VR眼镜端播放器开发与优化
在本部分,我将以Unity实操的方式讲解如何开发一个完整的VR眼镜端播放器,包括360°视频渲染、播放性能优化、手势交互的集成等内容。你将学到如何在Pico、Oculus等主流VR设备上实现沉浸式的视频播放与控制。
- Unity VR播放器开发基础
- Unity眼镜端开发适配与交互设计
- Unity VR手势交互开发实战
- 8K/16K超清视频播放性能优化
Part 4|项目实战经验与避坑指南
在本部分,我将结合实际项目经验,总结常见的开发难点和问题,并给出解决方案。无论是在拍摄制作过程中,还是在播放器开发中,你都能通过这些经验避免一些常见的坑。
- VR 360°全景视频制作常见问题
- 安卓原生与Unity平台开发对比与融合
- 高分辨率VR视频播放优化实战总结
- VR眼镜端应用上线与用户体验优化
Part 5 |未来趋势与技术展望
最后,我将分享一些关于XR技术未来发展的趋势,探讨AI在XR中的应用,以及如何通过更先进的技术提升用户体验。毕竟,360全景视频仅是XR应用中的冰山一角。
- 技术上的抉择:三维实时渲染与VR全景视频的共生
- 未来已来,AI与XR的融合
专栏特点
全面系统的技术分享
这个专栏涵盖了从视频拍摄到播放器开发的全流程内容,涉及多个技术领域,帮助你全面掌握360°全景视频开发的技术点。
实践经验与技术积累
我将在专栏中分享我在开发中的真实案例与经验,帮助你避开常见的开发陷阱,并提供解决方案。
高分辨率视频与手势交互优化
高分辨率视频的播放优化是一个核心难点,本专栏将深入讲解如何在安卓与Unity中实现流畅播放。同时,手势交互是增强VR体验的关键部分,我会分享如何接入手势交互,提升用户的沉浸感。
适配多平台与设备
无论是安卓设备还是VR一体机,专栏都将讲解如何实现跨平台适配,确保你的应用能够在不同设备上流畅运行。
参与互动
专栏将以每周一篇的频率进行更新,帮助大家逐步深入了解360°全景视频开发的核心技术。如果你在学习过程中遇到问题,或者有任何技术讨论,欢迎在评论区留言,我们一起探讨解决方案。
结语
本专栏旨在系统地分享VR 360°全景视频的开发全流程。包括但不限于全景视频的拍摄与制作、安卓原生VR播放器的开发、以及如何在VR眼镜上实现全景视频播放器。
✅ 如果你对VR开发感兴趣,欢迎关注本专栏!
💬 有任何问题或想了解的内容,欢迎留言讨论,一起探索XR技术的更多可能!
👉 更新详情
【Part 1全景视频拍摄与制作基础】
- 第一节|全景视频概述与应用场景(2025年3月23日12:00更新)
- 第二节|全景视频拍摄设备选型与使用技巧(2025年3月30日12:00更新)
- 第三节|全景视频后期拼接与处理流程(2025年4月6日12:00更新)
- 第四节|基于UE/Unity的全景视频渲染与导出(2025年4月13日12:00更新)
【Part 2安卓原生360°VR播放器开发实战】
- 第一节|通过传感器实现VR的3DOF效果(2025年4月20日12:00更新)



评论记录:
回复评论: