diffuser扩散模型\datawhale组队学习——v6.DDIM和音频

今日学习来源:‍‌⁣‌​⁤‍⁢‬‌‍‍​⁡‍⁤‌​‌​‍‍‬‌‌​​​⁣​⁤⁢⁤​⁢‬‬‌​⁢‍‌‍‬‌⁡《扩散模型从原理到实践》学习手册 - 飞书云文档 (feishu.cn) 任务四

学习内容:

1、DDIM(把小猫变成小狗)

2、音频生成。

 

 

首先还是熟悉的环境安装环节,会报错,先把unit1的环境安装搬过来。

%pip install -qq -U diffusers datasets transformers accelerate ftfy pyarrow
 
然后我们跟着代码生成一只沙滩上的企鹅。

接下来阅读模型的原理:

总之是一个函数,类似递推函数。加噪很简单,去噪很复杂。

可以看出来,训练函数里是对这个计算式的实现。

但计算式的对错,不知道咋验证。反正结果对就行。

 

图像反转,需要提供的参数有:

图像,图像的prompt,替换成的prompt,训练参数。

 

作者很贴心的替我们问了为啥不用图生图。因为新图拿旧图当训练对象,原图被tokenize,被encode,信息基本被解构了;而反转是将原图加噪到混沌,在去噪的过程中调整重现的方向,在此次生图的前半段用到了原图信息,相当于在枯木上重新抽芽,相似度更高。

 

 

本期作业:

使用DDIM反转技术把demo图片中的小猫替换为小狗
 
找不到demo的猫猫,就拿代码里面生成的猫猫当作底图,重新转成小狗。
 
这是对新猫猫,加噪去噪后,重新得到的新新猫猫。

 

接下来把它换成小狗:

 

虽然有点怪,但是成功啦。

代码也很怪。

贴一下看看,此前必要的环境安装和invert、sample函数要写好。

#把小猫放到image2里面
image2=sample(new_prompt, start_latents=inverted_latents[-(start_step+1)][None],
       start_step=start_step, num_inference_steps=50)[0]
image2

#将小猫的图片加噪,变成混沌态
prompt2=new_prompt
with torch.no_grad(): latent = pipe.vae.encode(tfms.functional.to_tensor(image2).unsqueeze(0).to(device)*2-1)
l = 0.18215 * latent.latent_dist.sample()
inverted_latents = invert(l, prompt2,num_inference_steps=50)
inverted_latents.shape

#混沌态
with torch.no_grad():
  im = pipe.decode_latents(inverted_latents[-1].unsqueeze(0))
pipe.numpy_to_pil(im)[0]

#这里将小猫重新加噪复原
pipe(prompt2, latents=inverted_latents[-1][None], num_inference_steps=50, guidance_scale=3.5).images[0]

#这里将小狗加噪复原
start_step=10
new_prompt2 = prompt2.replace('cat', 'puppy')
sample(new_prompt2, start_latents=inverted_latents[-(start_step+1)][None],
       start_step=start_step, num_inference_steps=50)[0]

  

 

 

第二部分是音频生成,这段代码训练时间太长,我挂机的时候colab给我中断了,结果不得不重新训练。刚好第二次,说我今天超时运行gpu。所以谨记,要一气呵成,别让它停下来。

 

然后恶补了一下音频的相关内容。

采样率,采样点,振幅,相位。

采样率是一秒采样频率,太低会听不到,太高的也会有部分听不到。

采样点,相当于将声音分解的最小单位,应该也算是时间单位吧。

振幅,声音大小。

相位,音色和音调。补一下初中知识:音色受振源影响。

 

于是它发出了一些声音。相比开头混乱的噪音,这里能听了一些。

 

原理是真不懂啊。

 

看看训练参数:

首先是音频参数:采样率,声音参数。(好像是一个范围内的数字)

epochs,训练次数?

lr,学习速度

batch,训练集数,建议4个。

 

 这里不能全都运行,因为上面说,他导入了一个自己的模型,如果运行的话,就引入了他的模型,把我们本来训练好的pipe给顶掉了。

而且他的pipe没有设置好sample_size的参数,我们就报错卡住了。

 

解决办法可能是重新训练自己的pipe,反正别用他给的了。

 

 

还是很奇妙的。

于是引人思考,有没有类似stable diffusion一样的音频生成模型呢?

模型没找到,(hugging face上应该有),找到一个公司,riffusion。

生成的还可以,可以给他歌词,让它唱。

但是没能成功部署到本地。

希望路过的大佬能研究研究

 

(18 封私信 / 82 条消息) 有没有像stable diffusion一样的ai音频生成开源模型? - 知乎 (zhihu.com)

 

 

 

 

 

 

posted @ 2023-11-01 17:53  windiest  阅读(92)  评论(0编辑  收藏  举报