音画代码(这个Python包只需几行代码)
音画代码(这个Python包只需几行代码)
Lucid Sonic Dreams 包可以实现 GAN 生成图像的「音画同步」效果,且支持自定义。
GAN 生成图像奇幻诡谲,对此我们早已不陌生。如果它们还可以卡音效呢?最近,有人就创建了一个实现类似效果的 Python 包——Lucid Sonic Dreams,只用几行代码就可以实现 AI 生成画作与音乐的同步。
GitHub 地址:https://github.com/mikaelalafriz/lucid-sonic-dreams
Colab 教程地址:https://colab.research.google.com/drive/1Y5i50xSFIuN3V4Md8TB30_GOAtts7RQD?usp=sharing
在该项目提供的 demo 视频中,伴随着 Saje 的歌「Raspberry」,GAN 生成的图像不断变换且呈现出了对应的节奏。
工作原理
生成艺术品通常是由 GAN 网络来完成的。Lucid Sonic Dreams 包默认使用 StyleGAN2-ADA 架构,不过 GAN 架构也可以自定义。将这些模型在特定「风格」的图像数据集上进行训练,使之能够输出与训练图像风格一致的无穷多张图像。此外,Lucid Sonic Dreams 使用 Justin Pinkney 创建库中的 StyleGAN2 预训练模型(地址:
https://github.com/justinpinkney/awesome-pretrained-stylegan2) 。
那么这些图像到底是如何生成的呢?
将输入馈送至 StyleGAN2 模型(输入为有 512 个数字的向量),输入决定了模型的输出图像,因此对输入向量进行微小更改也将带来输出图像的微小变化。
现在,有趣的部分到了:如果我们从音乐中获取声波,从声波中提取数值(如振幅)并添加至输入向量,会发生什么?
Lucid Sonic Dreams 对视频每一帧执行这些操作,生成脉冲与变换与音乐一致的图像。
具体而言,利用 Lucid Sonic Dreams 包,音乐控制了 3 个主要视觉组件:脉冲(Pulse)、运动(Motion)和类别(Class):
脉冲指视觉画面随着音乐的敲击性节奏而「跳动」。从数学角度来看,「脉冲」是向输入向量暂时添加声波振幅的结果(即在下一帧中该向量仍是初始向量);
运动指视觉画面变换的速度。从数学上看,它是向输入向量累积添加振幅(即添加的振幅后续不会被清零);
类别指生成图像中物体的标签,例如基于 WikiArt 图像训练的风格中就有 167 个类别(包括梵高、达芬奇、抽象派等)。而这些由音调进行控制,具体而言,12 个音高分别对应 12 个不同类别。这些音高的振幅对传输至第二个输入向量(类别向量)的数字造成影响,而这由模型生成的对象来决定。
项目作者表示,这个想法受到 Matt Siegelman 的 Deep Music Visualizer 项目的启发。目前网上也有一些类似的项目,但 Lucid Sonic Dreams 的独特之处在于以 Python 包形式实现,且允许自定义。
使用 Lucid Sonic Dreams 包,你可以做到这些
Lucid Sonic Dreams 具备极强的易用性和灵活性。用户可以使用 pip 进行安装:
然后只需输入几行 Python 代码即可:fromlucidsonicdreamsimportLucidSonicDream L=LucidSonicDream(song='chemical_love.mp3',style='abstractphotos') L.hallucinate(file_name='chemical_love.mp4')
改变风格
运行以下代码,我们可以查看默认可用的风格:fromlucidsonicdreamsimportshow_styles show_styles()
这样就可以得到一组风格名称,这些风格来自 Justin Pinkney 创建的库。你还可以输入自己的 StyleGAN 权重,或者使用其他 GAN 架构。
调整参数
Lucid Sonic Dreams 包的默认设置很好用,但它实际上有很多参数——30 多个,不过这些参数是可以调整的(参数详细信息参见 Colab 教程)。
哪些参数最重要呢?我们来看整个视频生成 pipeline:
首先,对输入向量进行初始化和插值,作为视频的「基础运动」(base motion)。参数 speed_fpm 控制运动的速度,fpm 表示「每分钟帧数」,即每分钟初始化的向量数。对于每个后续帧而言,参数 pulse_react, motion_react, and class_react 控制音频操纵每个对应组件的程度。
模型基于这些向量生成图像后,图像被传输经过一系列特效(也对音乐产生反应)。默认情况下,Lucid Sonic Dreams 包具备「contrast」和「flash」特效,可以与音频的敲击性节奏同步。通过设置 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)
使用自己的 StyleGAN 权重
如果你自己训练过 StyleGAN,或者在网上获得了一些模型权重,你可以选择将文件路径传输至这些权重,作为风格参数的值。
例如,文章开头的视频使用的是 Jeremy Torman 训练的模型。生成视频所用代码如下所示: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)
使用单独的音轨
这个包还可以用作音乐可视化工具,使用者可以上传单独的音轨,进而控制 Pulse、Motion、Class、Contrast 和 Flash。如果你想使这些视觉组件与特定的乐器同步,使用这个包是不错的选择。你还可以利用这些单独的音轨自定义特效。
以下是示例代码:L=LucidSonicDream(song='lucidsonicdreams_main.mp3', pulse_audio='lucidsonicdreams_pulse.mp3', class_audio='lucidsonicdreams_class.mp3', style='wikiart')L.hallucinate('lucidsonicdreams.mp4', pulse_react=0.25, motion_react=0, classes=[1,5,9,16,23,27,28,30,50,68,71,89], dominant_classes_first=True, class_shuffle_seconds=8, class_smooth_seconds=4, class_pitch_react=0.2, contrast_strength=0.3)
自定义特效
除了内置的「Contrast」和「Flash」特效外,Lucid Sonic Dreams 包还允许用户自定义创建特效。用户只需创建一个包含至少以下 3 个参数的函数即可:array,表示应用特效的图像;strength,决定对音乐的反应强度;amplitude 表示在任意给定时间点的音量。之后,将该自定义函数传输至 EffectsGenerator 对象。
作者用以下代码进行了试验,其使用的是 scikit-image 的 swirl 特效:importnumpyasnpfromskimage.transformimportswirlfromlucidsonicdreamsimportEffectsGeneratordefswirl_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)L=LucidSonicDream('unfaith.mp3', style='textures')L.hallucinate('unfaith.mp4', motion_react=0.15, speed_fpm=2, pulse_react=1.5, contrast_strength=1, flash_strength=1, custom_effects=[swirl_effect])files.download("unfaith.mp4")
使用其他 GAN 架构
你还可以使用其他 GAN 架构。只需定义一个函数,该函数以一组噪声向量和类别向量(NumPy 数组)作为输入,输出一组 Pillow 图像。事实上,该函数甚至不需要使用 GAN,它可以是能够将输入向量转换成图像的任意函数。
下列代码使用 BigGAN 的 PyTorch 实现复现了 Deep Music Visualizer:frompytorch_pretrained_bigganimportBigGAN,convert_to_imagesimporttorchbiggan=BigGAN.from_pretrained('biggan-deep-512')biggan.to('cuda:0')defbiggan_func(noise_batch,class_batch): noise_tensor=torch.from_numpy(noise_batch).cuda() class_tensor=torch.from_numpy(class_batch).cuda() withtorch.no_grad(): output_tensor=biggan(noise_tensor.float(),class_tensor.float(),truncation=1) returnconvert_to_images(output_tensor.cpu())L=LucidSonicDream('sea_of_voices_inst.mp3', style=biggan_func, input_shape=128, num_possible_classes=1000)L.hallucinate('sea_of_voices.mp4', output_audio='sea_of_voices.mp3', speed_fpm=3, classes=[13,14,22,24,301,84,99,100,134,143,393,394], class_shuffle_seconds=10, class_shuffle_strength=0.1, class_complexity=0.5, class_smooth_seconds=4, motion_react=0.35, flash_strength=1, contrast_strength=1)
李世民之墓(李世民陵墓为何那么寒碜)李世民之墓(李世民陵墓为何那么寒碜)649年7月10日,唐太宗李世民因病驾崩于终南山上的翠微宫含风殿。享年52岁。李世民的一生,是无比辉煌的一生。他17岁投身军伍,去雁门关营救被突
朱军采访周润发(周润发为什么调侃朱军)朱军采访周润发(周润发为什么调侃朱军)朱军主持的艺术人生曾是央视收视率最高的节目,也是给朱军迎来高光时刻的节目,曾经红火一时,成就了朱军的艺术人生,也成全了央视的收视保证。十多年来
钱学森老婆(李双江承认与蒋英关系吗)钱学森老婆(李双江承认与蒋英关系吗)原创纪人物20191106142833两弹元勋钱学森顶着那么多的头衔,获奖无数,却总是在是获奖后,很俏皮的对妻子说奖(蒋英)是我的,钱(钱学森)
汪峰的老婆(汪峰婚史)汪峰的老婆(汪峰婚史)汪峰作为中国内地乐坛的重要人物,他的作词作曲水平毋庸置疑,曾推出过很多传唱度很高的歌曲,如花火怒放的生命春天里等等。然而许多人在关注他的作品的同时,更关注他的
薛丁山与樊梨花(樊梨花传奇)薛丁山与樊梨花(樊梨花传奇)樊梨花为会薛丁山,向爹爹请令出战。她回到自己屋里,顶盔贯甲,罩袍束带,系甲揽裙,满身戎装,在嫂嫂房中挑了四名精明能干的丫鬟,让她们悬刀佩剑,随自己出战。
邓丽君哪年死的(张国荣活了多少岁)邓丽君哪年死的(张国荣活了多少岁)5月8日是邓丽君逝世26周年的忌日,这天诸多她的粉丝前去墓园进行悼念,场面令人动容。邓丽君的墓地周围已经摆满了各种鲜花以及粉丝寄语,即使已经离开人
雍正皇帝是怎么死的(真相让人恍然大悟,只有四个字)雍正皇帝是怎么死的(真相让人恍然大悟,只有四个字)作为康熙晚年九子夺嫡的胜利者,雍正皇帝仅在位十三年,可他死后产生了各种争议,至今还是人们关注的重点。雍正究竟是怎么死?雍正十三年八
顺治帝的皇后(顺治帝一共有几位皇后?)顺治帝的皇后(顺治帝一共有几位皇后?)清朝入关后的第一位皇帝顺治帝一生共拥有四位皇后,关于这四位皇后的结局你知道么?她们之中哪位是最幸运的呢?谁又笑到了最后呢?顺治帝的这四位皇后,
辽国皇帝列表及简介(金朝皇帝列表及简介)辽国皇帝列表及简介(金朝皇帝列表及简介)公元1083年,耶律乙辛身死。算起来,他或许能称的上是大辽二百余年最大的巨奸。他来到人间,似乎是带着诅咒的使命,那就是摧毁辽道宗的家族。他最
刘启的皇后(刘恒的皇后是谁)刘启的皇后(刘恒的皇后是谁)原创文史倾诉20210515221306西汉初年,汉朝统治者们遵循黄老学说,开始让天下百姓们休养生息。在现今江苏苏州这个地方,人们过着安乐的生活,经历过
诸葛亮之墓(诸葛亮墓真实墓地)诸葛亮之墓(诸葛亮墓真实墓地)熟读三国历史,诸葛亮无疑是三国时代杰出的代表人物之一,家喻户晓,其一生的丰功伟业,尤其一生鞠躬尽瘁死而后已更是名垂千古。诸葛亮不仅仅只是政治家,更是军
2018运势(免费测一生有几次婚姻)2018运势(免费测一生有几次婚姻)原创运势君20180427213714运势君运筹帷幄,势在必得。2018年已经过了4个月了,今年的工作计划能不能完美实现呢?还是要看看自己201
数码知识vivox60怎么打开nfcnfc在哪如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多小技巧的,这些技巧很多小伙伴一般都是不知道如何来实用的,就好比最近就有很多小伙伴们想要知道vivox60怎么
为什么叫张杰闰土(张杰闰土造型)按照上面的那些评论,张杰是因为苏醒打人以后,张杰才被重视,并逐渐成为赢家的?这个意思就是要是苏醒不打人,就没有张杰什么事了?01苏醒是快乐男声亚季军,张杰是第四名,差距不大啊在07
后宫小说网(诸天万界推倒女主角小说)后宫小说网(诸天万界推倒女主角小说)大家好,点击关注,远离书荒,我是推书酱水色冷无痕。今天为大家推荐的几本小说,评分9。9的后宫流小说,本本封神爆火一时,熬夜看味道十足。世子很凶作
离婚五年太久吗(女主死了男主崩溃后悔的小说)离婚五年太久吗(女主死了男主崩溃后悔的小说)创格物致知知行合一202106022244二婚离婚率有多高?离婚能坚持多久?二婚结婚率要多高有多高,因为不愿意单身一辈子离婚能坚持多久就
治糖尿病秘方(偏方改善糖尿病症状)治糖尿病秘方(偏方改善糖尿病症状)大家总是会误以为糖尿病一定需要药物上的治疗方能见效,这是完全错误的,其实在饮食方面只要多留心也能对糖尿病的治疗起到很大的作用,那糖尿病的饮食治疗是
近视眼的研究报告(近视眼的来源)近视眼的研究报告(近视眼的来源)原创每日经济新闻202106051344每经记者孙嘉夏每经实习记者许立波每经编辑汤辉正值第二十六个全国爱眼日到来之际,6月5日,信息化时代如何落实儿
硫酸亚铁的作用(硫酸亚铁对植物的作用)硫酸亚铁的作用(硫酸亚铁对植物的作用)养花黄叶?浇点硫酸亚铁!别急,用错了不如不用!用硫酸亚铁养花的朋友会比较熟悉,特别是北方的朋友,我们养的大部分的盆栽花卉都属于南方花卉,喜欢微
数码知识支付宝充q币在哪怎么充Q币如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多小技巧的,这些技巧很多小伙伴一般都是不知道如何来实用的,就好比最近就有很多小伙伴们想要知道支付宝充q币在哪怎
长江大桥图片(重庆长江大桥图)长江大桥图片(重庆长江大桥图)万里长江大桥行革命工作干了60年,生日当天能否休息?武汉长江大桥位于湖北省武汉市武昌蛇山和汉阳龟山之间的长江上,是长江上第一座大桥,被称为万里长江第一
长江大桥图片(重庆长江大桥图)长江大桥图片(重庆长江大桥图)万里长江大桥行革命工作干了60年,生日当天能否休息?武汉长江大桥位于湖北省武汉市武昌蛇山和汉阳龟山之间的长江上,是长江上第一座大桥,被称为万里长江第一