VQGAN2_latent diffusion model
task1 txt2image 先根据config一层层调用
-
先是ldm.models.diffusion.ddpm.LatentDiffusion 里面super().init(conditioning_key=conditioning_key, *args, **kwargs) 然后跑到DDPM类里面 DDPM里面调用了DiffusionWrapper 然后ldm.modules.diffusionmodules.openaimodel.UNetModel 1困惑这个里面的timestepblock是干什的 2里面有一个encoderUnetModel 其实ddpm就相当于前半部分来获得z,一个encoder的过程 获得一个更好,更感知压缩的情况下attention到更多的特征 用这个ddpm的前半段取代了codebook的离散过程 其中encoder是和vqgan1相同的VAE??离散化(连续的高斯?) ldm.models.autoencoder.AutoencoderKL condition 是ldm.modules.encoders.modules.BERTEmbedder
DDIM 减少了step 不满足马尔可夫链条件下的迭代 在ldm中运行 运行txt2image文件 先执行了ddpm文件,调用了LDM方法 里面有model= DiffusionWrapper() ddpm 中, condition-key 变成了crossattn unet config 是 openaimodel 文件里的Unetmodel 其中 DiffusionWrapper 里面 model=txt2image.yaml里面里面的配置 第一步在openaimodel里面配置Unet(这里面有transformer) 第一阶段应该是autoencoderKL 第二阶段有条件应该是Bertembedder,这里调用了x_transformer 里面额q与kv相比 然后执行了openaimodel 文件
clip 在ldm/encoders/modules里面用到 Class FrozenCLIPEmbedder(AbstractEncoder): “”"Uses the CLIP transformer encoder for text
先调用 diffusionWrapper 作为model 参数有 unet-config 和 conditioning-key = ‘crossattn’
diff_model_config咱也不知是啥,但是是这样调用的
openaimodel下 time_embed linear,silu,linear 其中 先是一个Unetmodel 不懂modelchannle为什么是320 channel-mult 是啥??? 里面用到了restblock 有时间看一下restnet bro nn.identity 输入是啥输出是啥
restBlock,,,,是2维度的?
zero——module 是二维的????,目前还不懂在干啥
什么num_head 是8 是因为 embed_dim// num_heads_channels 得8、 dim_head = ch // num_heads 得40
越来越不懂,咋回事
去看attention 的实现吧bro 现在跳到attention了
spatial transformer (空间变换)
https://blog..net/jiaojiaolou/article/details/90383340 STN的作用是想让CNN具备平移、旋转、缩放、剪切不变性,虽然说CNN中的Pooling可以让网络具备一点平移不变性,但这毕竟是隐性的,如果能让网络直接具备这样的能力岂不是更好
提到了仿射变换 将图片进行缩放平移旋转
实现两个空间向量之间的变化
用了crossattention 来完成有条件啥 其中innerdim 是320, context_dim 是320
feedforward 向前传输 ??? 上采样??? 3个laryernorm
上面那个变换都是在openaimodel里面 resblock 变成了这样???
最后,让我们再看一下这个Unet的结构哈 用了?时间序列? 咱也不懂为啥这么设计的 也没人画个图 说清楚里面的结构 我都不信,这玩意我能学明白。。。。。 11个 TimestepEmbedSquential ?????? 我真不懂了。。。。 接下来还是 Unet middleblock 我谢谢 最后output time2多了个upsample,好吧每个都不一样 我放弃,这个也有11个 把断点放到openAImodel 中的682 self.out哪里 自己看去吧 溜溜,明天继续整理
day02 taming transformer 直接看VQGAN1 的代码即可!
其中vqvae中 quantize 用到了einsu,,VectorQuantizer 矢量量化器