Codeformer -- 第二阶段
在做超分辨率(SR)时,输入输出的图像的尺寸维度是相同的。
输入一张低分辨率(LR)的图像,如何生成高分辨率(HR)的图像过程
低分辨率图像(1,3,512,512)通过编码器将原始输入映射到隐空间,加位置编码,假设现在是(1,16*16,512),通过Transformer生成每个像素对应的码本中所有索引的可能性大小,(1,16*16,1024)通过softmax(dim=2)后取top_index得到最相近的索引,(1,16*16,1)。
注:Transformer中的架构是堆叠了9个注意力层,每层注意力输出维度都为(1,16*16,512)再通过一层线性投影得到(1,16*16,1024)。
最相近的索引,(1,16*16,1),与码本矩阵相乘后得到量化后的特征(1,16*16,256),
输入量化后的特征(1,16*16,256)到解码器,生成最终高分辨率图像(1,3,512,512)。
我已经尝试的实验工作:
1、 将CodeFormer的第二阶段推理的模型架构codeformer_arc.py完整提取出来并保存到了txt中。
2、CodeFormer的第一阶段推理的模型架构vqgan_arc.py提取出来,尝试用MST++用到的高光谱图像数据集来训练第一阶段的CodeBook的生成,这个过程中我首先没用MST的划分patch,有问题,因为图像尺寸是(482,512),这样在采样过程中会出现尺寸不匹配的问题,MST++的做法是每个patch为(128,128),保持训练图像的高宽一致。一张图像就被划分为了2000+个patch,这个训练的体量还是非常大的。我现在训练时只是用了一个简单的MST++使用的MARE损失来训练第一阶段,出现的问题是我没搞懂CodeFormer中是如何对第一阶段进行训练的,在train.py中没看到vq_loss和commitment_loss,它所使用的量化器也不一样。
我现在的思路是:
先单独训练第一个阶段看看效果。