VQ-VAE编码器的理解

VQ-VAE编码器其实我觉得更偏向于AE而不是VAE,他为什么是一种图像生成技术而不是图像压缩技术他是他的魅力所在。之前我一直都不太理解,后来我的老师给我看了一张图之后就豁然开朗(万一我还是理解错了请多多指教)。

首先要理解什么是AE。AE就是自编码器,他的目的是为了能够把一张图片完整、尽可能没有偏差的阐述出来,因此他的损失函数就是在计算输入的图片与输出的重构后的图片的误差。由于他的目的就是重构图片,因此他对于它内部怎么去编码是不在意的,所以他的编码空间的意义很难理解。且他只能作为一个图像压缩技术而不是一个图像生成技术。比方说你给他了一个完整的月亮和一个1/2的月亮进行了训练,然后拿一张3/4的月亮让他测试生成他是没有办法去生成的,因为他的编码并不理解这三张图之间有什么联系。而VQ-VAE加入了向量量化的概念。他讲原本的连续变成了离散,比如我们想让画家画一个人,我们会说这个是男是女,年龄是偏老还是偏年轻,体型是胖还是壮,而不会说这个人性别是0.5,年龄是0.6,体型是0.7。因此,VQ-VAE会把图片编码成离散向量。(这里可以去看看某呼上文章https://zhuanlan.zhihu.com/p/633744455 ,感觉这一块写的非常透彻)

把图像编码成离散向量后,又会带来两个新的问题。第一个问题是,神经网络会默认输入满足一个连续的分布,而不善于处理离散的输入。如果你直接输入0, 1, 2这些数字,神经网络会默认1是一个处于0, 2中间的一种状态。为了解决这一问题,我们可以借鉴NLP中对于离散单词的处理方法。为了处理离散的输入单词,NLP模型的第一层一般都是词嵌入层,它可以把每个输入单词都映射到一个独一无二的连续向量上。这样,每个离散的数字都变成了一个特别的连续向量了。

最后VQ-VAE的结构图就像下图所示。

但是到这里还是没有解释为什么VQ-VAE是图像生成模型,我们看下面这一张图就可以一目了然。

这张图里面的小蓝点就是codeword,所有的小蓝点的集合就是codebook,所谓的概念空间、代码本等等名称。向量量化(VQ)在图像重构中,首先,将输入图像分割成小块或特征向量,每个特征向量被映射到最接近的码字。这是通过计算特征向量与所有码字之间的距离,并选择距离最小的码字来实现的,然后用最接近的码字替换原始特征向量,这个过程称为量化。每个特征向量现在都表示为一个码字索引。在重构过程中,使用码书中的码字索引来替换每个量化后的特征向量,然后将所有替换后的码字重新组合成一个完整的图像。

具体而言,假设输入图像被分割成多个小块或特征向量。例如,将图像划分为8x8的小块。对每个8x8的小块,他都会去计算它与码书中所有码字的距离。然后会在这个过程中选择距离最小的码字,并将该小块用这个码字替换。这样,每个小块都对应一个码字索引。那么所有的小块都被量化成码字索引,并存储这些索引。在最后图像重构的使用存储的码字索引,从码书中检索对应的码字。将检索到的码字重新组合,形成完整的重构图像。但是码字还原的时候,由于他被离散化了,原本的码本里面还带有可扰动的距离,或者说是噪声。那么这个噪声可以让图像出现偏差,比如所某一块深一点,某一块浅一点,这样他和原本的图像就会有一定的差异,所有的差异组合起来那就是一张不同的图像了。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值