在上一篇《适用于Transformer的图像编码/解码技术探索 ViT/VAE》中,我门开始了一项非常有挑战性的工作,接下来会陆续发布实验测试结果
实验1:
实验1希望尽可能从本质出发,分析ViT图像编码方案的缺陷,代码如下:
# 输入张量尺寸为(B, 1, 256, 256)
# 图像编码
nn.Sequential(
nn.Conv2d(1, 512, kernel_size=16, stride=16, bias=False),
Rearrange("B C H W -> B (H W) C"),
)
也可以换种写法:
nn.Sequential(
nn.PixelUnshuffle(16),
Rearrange("B C H W -> B (H W) C"),
nn.Linear(16*16, 512, bias=False),
)
我们先验证一下,缺陷是来自于nn.Linear,还是在nn.PixelUnshuffle这步就已经引入了
下面给出对比测试代码:
nn.Sequential(
nn.Conv2d(1, 2, kernel_size=1, stride=1, bias=False),
nn.PixelUnshuffle(16),
Rearrange("B C H W -> B (H W) C"),
)
先以《字体图片生成:Rectified Flow控制条件》中的实验进行测试,将生成图片的尺寸扩大到256*256像素。由于图像编码方案很轻量化,所以使用单卡RTX4090也能轻松训练。生成的结果如下:
我觉得局部细节生成质量很差。初步认为通过“kernel_size等于stride”的卷积、nn.PixelUnshuffle等方式压缩图片尺寸,再输入Transformer,压缩比越高越容易引起局部细节的丢失
需要说明的是:虽然我在每次给出结论的背后都尽可能有实验数据进行支撑,但由于资源有限,所设计的实验非常简陋,因此给出的结论也带有较强的主观因素,仅供读者参考