本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。用GAN生成画作并不新鲜,但你见过“听得懂音乐”的GAN吗?老外开发的一个Python工具,可以让GAN生成的图像随着音乐动起来,几个小时内在reddit上获得了1.5k的点赞。Bestusage》>从它明朗的名字SonicDream,就能感受到一种梦幻的色彩,正如网友所说:这就像海市蜃楼,仿佛能看到描绘的物体或场景,但下一分钟,你再次看到就会意识到它们并不存在。最佳用法》>而这样的音乐视觉效果只需要几行代码就可以实现,而且还支持各种自定义。一起来一探究竟吧~给输入向量添加音乐特征LucidSonicDreams默认使用StyleGAN2-ADA架构,并使用来自JustinPinkney的仓库awesome-pretrained-stylegan2的预训练模型。根据指定风格的图像数据集进行训练,得到大量与其风格相似的图像。Bestusage》>模型首先从一个向量生成图像,然后图像通过动态效果显示音乐。在图像生成过程中,一个包含512个值的向量被输入到模型中以确定输出图像,并且向量的细微变化,在输出图像中也会产生相应的细微变化。因此,LucidSonicDreams在输入向量中加入了一个从音乐的声波中提取的数值(比如振幅)。这个操作是对视频中的每一帧进行表演,创造出随着音乐起舞变化的艺术效果作者开发这个工具的灵感来自于MattSiegelman的DeepMusicVisualizer项目——BigGAN,可以让它生成的图像随着音乐同步变化。Bestusage》>来源:MattSiegelman虽然之前也有过一些类似的项目,但LucidSonicDreams的不同之处在于它是一个Python包,可以实现定制。可以简单也可以复杂,以满足不同的需求。LucidSonicDreams的安装非常简单,只需运行pipinstalllucidsonicdreams即可安装。首先,实现基本的可视化,代码如下:fromlucidsonicdreamsimportLucidSonicDreamL=LucidSonicDream(song='song.mp3',style='abstractphotos')L.hallucinate(file_name='song.mp4')从这里,一个抽象stylevideocanbegenerated:bestusage">如果要更改样式,查看可用样式列表,可以运行命令:fromlucidsonicdreamsimportshow_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)例如,JeremyTorman训练的模型产生的效果:bestusage》>LucidSonicDreams的默认设置使其非常好用,但除此之外,它还有很多可调参数,作者在Colab上详细列出了这些参数。例如,参数pulse_react、motion_react和class_react分别控制三个主要的视觉组件:Pulse、Motion和Class。Pulse组件是指音乐中打击乐元素的视觉效果。从数学上讲,脉冲是声波幅度被暂时添加到输入向量的结果,而在下一帧视频中,向量恢复正常。最好的用法是">Motion,指的是视觉效果变形的速度,是输入向量加上振幅的结果。最好的用法是">Class,指的是物体在其中的标签结果图像。例如,使用WikiArt图片训练出来的样式有167种,包括:梵高、达芬奇、抽象画等。Bestusage">这些类别是由pitch控制的,具体来说,12个pitch对应12个类别。这些音调的不同幅度会影响第二个输入向量(类向量)的值,它决定了模型生成的对象。此外,参数speed_fpm控制运动的速度。当此参数为0时,图像将在歌曲的无声部分静止。FPM代表framesperminute,也就是每分钟初始化的向量数量。默认情况下,该程序还带有与音频中的打击乐元素同步的“对比度”和“闪光”效果,分别由contrast_strength和flash_strength参数设置。调整参数的代码是这样的:L=LucidSonicDream('pancake_feet.mp3',style='modernart')L.hallucinate(file_name='pancake_feet.mp4',speed_fpm=0,motion_react=0.8,contrast_strength=0.5,flash_strength=0.7)除了这些内置效果,LucidSonicDreams还支持创建自定义效果。只需创建一个至少包含3个参数的函数:一个数组,指示要应用效果的图像;强度决定了它对音乐的反应程度;振幅是任何给定时间点的音乐音量。然后,将此自定义函数传递给EffectsGenerator对象。例如使用scikit-image生成漩涡效果代码:importnumpyasnpfromskimage.transformimportswirlfromlucidsonicdreamsimportEffectsGeneratordefswirl_func(array,strength,amplitude):swirled_image=swirl(array,rotation=0,strength=100*strength*amplitude,radius=650)returnage(255).astype(np.uint8)swirl_effect=EffectsGenerator(swirl_func,audio='unfaith.mp3',strength=0.2,percussive=False)产生漩涡效果的例子:bestusage">如果你想使用其他GAN架构,只需定义一个以噪声向量和类向量(NumPy数组)为输入输出图像的函数。事实上,这个函数可以是任何将输入向量转换为图像的函数,即使不使用GAN。另外,LucidSonicDreams支持上传单独的音轨来控制参数,音乐制作人可以将其作为音乐可视化工具。例如,使用单独的打击乐音轨来控制Pulse,同时使用单独的“复合”Chord”音轨来控制Class:L=LucidSonicDream(song='lucidsonicdreams_main.mp3',pulse_audio='lucidsonicdreams_pulse.mp3',class_audio='lucidsonicdreams_class.mp3',style='wikiart')具有易于使用的默认模式,并支持各种自定义材料,难怪网友们都赞不绝口。OMG,我认为这是我见过的GAN的最佳用法。BestUsage》>也有想体验VR版的网友:BestUsage>也有部分“暗恐”患者表示:又爱又恨!最佳用法》>LucidSonicDreams在GitHub上开源,感兴趣的小伙伴快去听音乐体验吧~
