上一篇的链接:多模态MLLM都是怎么实现的(4)-去噪声 (qq.com)

上上一篇的链接: 多模态MLLM都是怎么实现的(2)-DDPM (qq.com)

上上上一篇的链接:多模态MLLM都是怎么实现的(2) (qq.com)

上上上上篇的链接:多模态MLLM都是怎么实现的(1) (qq.com)

      我保证这部分内容不会像前面那么枯燥。

      因为我们这部分不需要那么多数学。

      那我们就直奔主题,之前我讲过,Vit也好,Sora也好,它就不是一个模型,是由许多模型构成的。

      我们现在来看一下,这些模型是怎么排布的能形成一个完成的链条,首先我们来一个简单的。

      回顾一下上两节,我们已经完成了一个从照片加噪,到去噪重新还原到原图(接近)的前向和后向的逻辑算法的提炼。

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_Text

      但是这东西似乎没那么好玩,我需要给它一些指令,让它能根据我的指令来生成图片,或者说让它能够告诉我,这些图片描述了什么?是的,从某种上GPT-4V是Dall-E3的一个反向过程,这么理解是没问题的,虽然网络结构有点差距。

      回到我们的项目上来,我既然想完成一个文生图的动作,是不是不能光训练图片啊?至少得让网络知道把我对这些训练图片的理解,得一起塞进来吧!

      所以我们首先要有个文字的embedding模型,这玩意就不在这讲了,感兴趣得可以看我的Transformer的文章:

      小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1) (qq.com)

      现在我们具备了文字部分,我要训练一个encoder,让它能识别我对和它一对的图片(视频)的理解(Text),其实就是个Label

      在具备了文字的encoder以后,我们还需要一个东西,就是进行图片编码,其实这个和文字严格说没啥区别,只不过它被定义为叫patch,其实你就当token看就可以了,这部分内容在多模态MLLM都是怎么实现的(2) (qq.com),Vit的部分里。

      还缺一个Backbone吧,这个Backbone的作用就是训练时做加噪音,去噪音。推理时纯去噪音的。

      基本的架子我们就搭起来了,如下图: 

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_模态_02

       这个东西能不能工作?我可以负责的说肯定可以工作,但是有一些问题,比如:

  • 你往Backbone里一直投喂1024*1024的图,你得有多些算力和显存,来做这个事情。
  • 又比如,你把一些图像和一些文字对应起来,那其他的你想生成的idea咋办,换句话说过拟合和鲁棒性缺失的风险。
  • 而且你要这么玩,推理速度你也受不了。

        我们能不能做个2段式的连招,比如?
        比如在这篇文章里,我们讲了VAE多模态MLLM都是怎么实现的(2) (qq.com),就是一种图像对图像的压缩技术



  • 多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_Text_03

       所以我们可以这么干,先训练处来一对VAE的encoder decoder,然后让他们先对图片组进行训练。最后就会得到一系列的正态分布(还真有人家不是生成code或者其他的,而是生成小图,比如Google家的imgGen)

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_Text_04

       进而,我们可以先让VAE去把像素空间Pixel Space,通过VAE给压缩到一个隐空间,或者叫潜在空间Latent Space,然后对潜在空间的Latent(被编码的code或者小图片)进行加噪,去噪。等推理的时候再由成对的VAE的decoder给解码出来,完成了训练效率和多样性的双重提升!

       好,我们现在把VAE给加进来。

 

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_Text_05

      加进来的网络就长这样子了,文字的encoder部分,我们没有变化,但是图像部分,我们不是输入给网络一个完整的样张,其实是加了噪的latent,实际的训练中,VAE的encoder和decoder可以独立于网络训练完,然后加网络里继续训练Backbone。

      下一个问题Backbone用啥,鉴于社会主义初级阶段,我们Backbone先用以前比较通用的Unet。

       

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_去噪_06

官方一点的说法就是,稠密预测任务,就像图像分割,图像去噪一样。这些传统的稠密预测任务UNet已经有了很牛B了,在新任务上自然也就沿用下来了。

      还有一个搞笑的Tips,SDXL的Backbone也叫Unet,结果你去看看,好几十层的Transfomer....

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_模态_07

,这块也没必要说那么细,自己体会...

 这个模式也叫做Latent Diffusion,又叫LDM,这玩意也是Stable Diffusion SD的组网总思路。

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_去噪_08

      

加了噪的latent,semantic Map,分辨率,Text文本这些东西我们都称其为条件,在条件具备的情况一起以conditioning(先决条件)的限制,经过Backbone绿色的部分,通过去噪,最终生成一个去了噪的Latent,然后通过decoder给解码成我们想要的比例的图片(视频),Tips:这里QKV别当Transformer啊,Unet一样可以做Attention甚至MHA机制。

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_模态_09

        这章就写这么多,看来得下一章能进Vit,Vivit,Navit

     

多模态MLLM都是怎么实现的(5)-Backbone, Unet or Transformer?从0搭建一个SD_模态_10