子豪 发自 凹非寺
量子位 报道 | 公众号 QbitAI

用GAN生成画作已经不是新鲜事了,不过你见过“懂音乐”的GAN吗?

一位外国小哥开发的Python工具,能让GAN生成的图像随音乐律动,几个小时内就在reddit上收获了1.5k个赞。

这个工具名叫Lucid Sonic Dreams,先来感受一下它炫酷的效果:

从它的名字清晰的声波梦就能感受到一种梦幻色彩,正如网友所说:

这就像海市蜃楼,好像能看出描绘的物体或场景,但是下一分钟,你又会意识到它们并不存在。

而这样的音乐视效,只需几行代码就可以实现,还支持各种自定义,一起来了解一下吧~

在输入向量中加入音乐特征

Lucid Sonic Dreams默认使用StyleGAN2-ADA架构,并且使用Justin Pinkney的存储库awesome-pretrained-stylegan2中的预训练模型。

根据指定风格的图像数据集进行训练,得到与其风格相似的大量图像。

模型首先从向量生成图像,图像再通过动态效果来展现音乐。

在图像生成过程中,向模型中输入包含512个数值的向量来决定输出图像,而向量的细微变化,在输出图像中也会产生相应地细微的变化。

因此,Lucid Sonic Dreams将从音乐的声波中提取的数值(例如:振幅),添加到输入向量中。对视频中的每一帧都执行此操作,创造出随音乐跳动和变化的艺术效果。

作者开发这一工具的灵感,来自Matt Siegelman的Deep Music Visualizer项目——BigGAN,它能够使其生成的图像与音乐同步变化。

图源:Matt Siegelman

虽然以前也有一些类似的项目,但Lucid Sonic Dreams与众不同的地方在于,它是能够实现自定义Python软件包

可简可繁,满足不同需求

Lucid Sonic Dreams的安装十分简单,只需要运行pip install lucidsonicdreams进行安装就可以了。

首先要实现基本可视化,代码是这样的:

from lucidsonicdreams import LucidSonicDream
L = LucidSonicDream(song = 'song.mp3',style = 'abstract photos')
L.hallucinate(file_name = 'song.mp4')

由此就可以生成抽象风格的视频:

如果想要改变风格、查看可用风格的列表,可以运行命令:

from lucidsonicdreams import show_stylesshow_styles()

此外,也可以使用其他风格,只需要将参数值style设为相应的pkl文件路径,就像这样:

L = LucidSonicDream(song = 'raspberry.mp3', style = 'VisionaryArt.pkl')L.hallucinate(file_name = 'raspberry.mp4', pulse_react = 1.2, motion_react = 0.7, contrast_strength = 0.5, flash_strength = 0.5)

例如,使用Jeremy Torman训练的模型生成的效果:

Lucid Sonic Dreams的默认设置使它用起来十分容易,但除此在外,它也有很多可调的参数,作者在Colab上详细地罗列了这些参数。

例如,参数pulse_react、motion_react和class_react,分别控制着3个主要视觉组件:Pulse(脉冲)、Motion(运动)和Class(种类)。

Pulse组件,是指视音乐中打击乐元素的视觉效果。从数学上讲,脉冲是声波振幅临时添加到输入向量的结果,而在下一帧视频中,向量则恢复正常。

Motion,指的是视觉效果变形的速度,是将振幅累加到输入向量中的结果。

Class,则是指生成的图像中对象的标签。例如,利用WikiArt图像训练的样式,共有167个种类,包括:梵高、达芬奇、抽象绘画等。

这些类别由音调控制,具体来说,就是将12个音高映射到12个类别。而这些音高的不同振幅,会影响第二输入向量(类向量)的数值,该向量则决定了模型生成的对象。

此外,参数speed_fpm控制该运动的速度,该参数为0时,则使图像在歌曲的无声的部分静止。FPM代表每分钟帧数,也就是每分钟初始化的向量数。

在默认情况下,程序还带有与音频中打击乐元素同步的“对比”和“闪光”效果,分别通过contrast_strength和flash_strength参数进行设置。

调整参数的代码就像这样:

L = LucidSonicDream('pancake_feet.mp3', style = 'modern art')L.hallucinate(file_name = 'pancake_feet.mp4', speed_fpm = 0, motion_react = 0.8, contrast_strength = 0.5, flash_strength = 0.7)

除了这些内置的效果外,Lucid Sonic Dreams还支持创建自定义效果。只需创建一个函数,其中至少包含3个参数:

array用来指示应用效果的图像;strength决定对音乐的反应程度;amplitude则是指音乐在任何给定时间点的音量。

然后,将此自定义函数传递给EffectsGenerator对象。比如,利用scikit-image生成旋流效果的代码:

import numpy as np from skimage.transform import swirlfrom lucidsonicdreams import EffectsGenerator  def swirl_func(array, strength, amplitude):swirled_image = swirl(array, rotation = 0, strength = 100 * strength * amplitude,radius=650)return (swirled_image*255).astype(np.uint8)  swirl_effect = EffectsGenerator(swirl_func,audio = 'unfaith.mp3', strength = 0.2, percussive = False)

生成的旋流效果示例:

如果想要使用其他的GAN架构,只需定义一个函数,将噪声向量和类向量(NumPy数组)作为输入,从而输出图像。

实际上,这个函数可以是将输入向量转换为图像的任何函数,甚至不需要使用GAN。

除此之外,Lucid Sonic Dreams支持上传分离后的音轨来控制参数,音乐制作者可以用它作为音乐可视化程序。

例如,使用分离后的打击乐音轨来控制Pulse,同时用一个分离后的“合成和弦”音轨来控制Class:

L = LucidSonicDream(song = 'lucidsonicdreams_main.mp3',pulse_audio = 'lucidsonicdreams_pulse.mp3',class_audio = 'lucidsonicdreams_class.mp3',style = 'wikiart')

既有简便易用的默认模式,又支持各种自定义素材,难怪网友们对它大加赞赏。

OMG,我认为这是我见过的GAN的最佳用法。

还有网友想体验一下VR版本:

也有部分“密恐”患者表示:对它又爱又恨!

Lucid Sonic Dreams在GitHub上开源,感兴趣的小伙伴,快去听个音乐感受一下吧~

相关链接:
[1]https://www.reddit.com/r/MachineLearning/comments/m554cq/project_new_python_package_sync_gan_art_to_music/
[2]https://towardsdatascience.com/introducing-lucid-sonic-dreams-sync-gan-art-to-music-with-a-few-lines-of-python-code-b04f88722de1
[3]https://github.com/mikaelalafriz/lucid-sonic-dreams

—  —

福利来了|AI算力免费领

500元 卡时GPU资源「限时」免费领!并行®AI云面向AI深度学习和高性能计算,提供A100、V100、T4等丰富的云算力资源;预置TensorFlow、PyTorch等环境,开箱即用;三线专家团队7*24小时在线提供多元化服务,助开发者提升科研效率,降低科研成本。欢迎扫码免费体验~:

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见~

让GAN随音乐律动的Python工具,网友:这是我见过的GAN的最佳用法 | reddit高赞相关推荐

  1. 我的世界红石音乐高级教程 python辅助制作工具

    我的世界红石音乐高级教程 python辅助制作工具 https://www.bilibili.com/video/av52803181/ QQ群:374821554 游戏资源下载(材质.MOD等)提取 ...

  2. 覆盖所有领域的 Python 工具库汇总!建议收藏!!!

    文章首发于个人站点 覆盖所有领域的 Python 工具库汇总 公众号:[DreamHub] 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. py ...

  3. Python知识体系-Python工具大全

    1.环境管理:管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. ...

  4. Python 工具和库整理

    管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtua ...

  5. 在线音乐推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化音乐推荐系统 音乐网站+协同过滤推荐算法 机器学习、分布式大数据、人工智能开发

    在线音乐推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化音乐推荐系统 音乐网站+协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 MusicRec ...

  6. 整理了上千个热门的 Python 工具库,涵盖24个大方向!

    前言 大家好,Python 编程语言以语法简单.语言简洁.功能强大而闻名,根本原因是在于强大的社区生态. 今天我就给大家分享一下这些天梳理的近千个热门 Python 库,当我们需要某个方向的工具包时, ...

  7. Python培训教程分享:“高效实用” 的Python工具库

    作为一名合格Python技术员,对于Python工具库的使用是少不了的,本期Python培训教程就为大家分享的是""高效实用" 的Python工具库",希望能够 ...

  8. python爬取淘宝商品做数据挖掘_Python 3爬虫 数据清洗与可视化实战 Python数据抓取技术 python3网络爬虫教程书籍 运用Python工具获取电商平台页面数据挖掘书籍...

    A8 书    名:Python 3爬虫 数据清洗与可视化实战 作 译 者:零一,韩要宾,黄园园 出版时间:2018-03 千 字 数:200 版    次:01-01 页    数:212 开   ...

  9. python语言模型工具_Python工具整合,为程序员和新手准备的 8 大 Python 工具

    Python 是一种开源编程语言,用于 Web 编程.数据科学.人工智能和许多科学应用.学习 Python 使程序员能够专注于解决问题,而不是专注于语法,其丰富的库赋予它完成伟大任务所需的力量. 1) ...

最新文章

  1. 企业管理,难的是什么?
  2. php 模块指令,php artisan module常用命令
  3. PHP中使用redis执行lua脚本示例
  4. linux操作小技巧
  5. 系统架构师笔记(2)
  6. MySQL关闭查询缓存(QC)的两种方法
  7. 第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)
  8. 非root用户ssh 执行 sudo远程机器免密钥
  9. java this.name= name_thread(this, ThreadName)对于Java中这个语句,this是什么?
  10. android spinner保存对象,Android Spinner默认值问题
  11. 大整数相乘 + 分治法(JS)
  12. linux 系统启动级别,LINUX系统启动级别介绍与解释
  13. html鼠标点击事件代码,HTML onmousedown事件用法及代码示例
  14. Windows部署KMS服务器
  15. 柯尔莫哥洛夫拟合优度检验函数(Matlab实现)
  16. IDL 解析葵花8Himawari-8标准数据(HSD),辐射定标、重投影、裁剪
  17. 推荐几款好用的云笔记软件
  18. 将项目部署到云服务器上
  19. python 计算TIFF图像相关性 根据相关性筛选特征 使用PCA提取主要特征
  20. Java技术之AQS详解

热门文章

  1. 美国计算机语言学比较好的大学,美国哪所大学数据分析专业最好?
  2. 地理空间(geospatial)
  3. 打开和关闭输入法软键盘
  4. 朗强:HDMI自动切换器的功能与作用
  5. matlab 导出高分辨率透明背景图像
  6. 微信登录58同城代码
  7. MATLAB编程(4)——MATLAB绘制二维高斯函数的三维图
  8. 基于SaaS的呼叫中心应用思考
  9. 全国高德POI矢量数据集shp|免费获取|30个G
  10. php根据当天日期生成编号,前台js根据当前时间生成订单号