让GAN随音乐律动的Python工具,网友:GAN的建议用法

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

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

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

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

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

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

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

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

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

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

图源:Matt Siegelman

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

可简可繁,满足不同需求

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

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

  1. from lucidsonicdreams import LucidSonicDream 
  2. L = LucidSonicDream(song = 'song.mp3'
  3.                     style = 'abstract photos'
  4. L.hallucinate(file_name = 'song.mp4'

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

  1. from lucidsonicdreams import show_styles 
  2. show_styles() 

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

  1. L = LucidSonicDream(song = 'raspberry.mp3', style = 'VisionaryArt.pkl'
  2.   L.hallucinate(file_name = 'raspberry.mp4',  
  3.                 pulse_react = 1.2,  
  4.                 motion_react = 0.7,  
  5.                 contrast_strength = 0.5,  
  6.                 flash_strength = 0.5

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

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

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

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

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

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

  1. L = LucidSonicDream('pancake_feet.mp3', style = 'modern art'
  2.   L.hallucinate(file_name = 'pancake_feet.mp4',  
  3.                 speed_fpm = 0,  
  4.                 motion_react = 0.8,  
  5.                 contrast_strength = 0.5,  
  6.                 flash_strength = 0.7

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

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

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

  1. import numpy as np  
  2.   from skimage.transform import swirl 
  3.   from lucidsonicdreams import EffectsGenerator   
  4.   def swirl_func(array, strength, amplitude): 
  5.     swirled_image = swirl(array,  
  6.                           rotation = 0,  
  7.                           strength = 100 * strength * amplitude, 
  8.                           radius=650
  9.     return (swirled_image*255).astype(np.uint8)   
  10.   swirl_effect = EffectsGenerator(swirl_func, 
  11.                                   audio = 'unfaith.mp3',  
  12.                                   strength = 0.2,  
  13.                                   percussive = False) 

生成的旋流效果示例:

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

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

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

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

  1. L = LucidSonicDream(song = 'lucidsonicdreams_main.mp3'
  2.                       pulse_audio = 'lucidsonicdreams_pulse.mp3'
  3.                       class_audio = 'lucidsonicdreams_class.mp3'
  4.                       style = 'wikiart'

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

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

让GAN随音乐律动的Python工具,网友:GAN的<span><span><span><i style=最佳用法">

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

责任编辑:张燕妮 来源: 量子位
相关推荐

2019-04-13 14:33:29

2021-09-26 18:52:14

AI 数据人工智能

2020-10-22 09:13:14

NVIDIA

2021-09-10 10:01:34

神经网络AI算法

2020-12-21 11:00:33

AI 数据人工智能

2023-12-18 08:57:22

GAN网络

2019-02-19 09:07:42

GAN生成对抗网络神经网络

2021-08-25 17:03:09

模型人工智能PyTorch

2023-08-06 12:42:02

AI模型

2017-03-28 08:53:22

2017-07-13 17:33:18

生成对抗网络GANIan Goodfel

2017-10-09 16:29:44

KerasWassertein 生成对抗网络

2017-08-07 17:09:46

GAN信息检索 IR

2024-12-04 07:59:48

2022-10-09 15:26:45

人工智能ML机器学习

2017-07-12 10:58:31

医疗大数据电子化服务

2019-09-03 10:55:20

Python函数lambad

2021-12-06 09:35:38

英伟达人工智能软件

2020-05-28 10:45:36

机器学习人工智能 PyTorch

2023-01-31 11:06:01

模型算力
点赞
收藏

51CTO技术栈公众号