赞
踩
这是一个5*5的掩膜卷积核。它的作用就是只保留中心点处之前的像素信息。
可以看到当要提取中心点的像素信息的时候,这个点的左边和前面的像素信息都得到了提取,右边和后面的像素信息被“遮盖”住了,而关于这个点的信息的提取论文中又提出了两种方式进行获取(这两种方式对应了mask A和mask B这两种掩膜方式)。
可以看到两种mask的区别就是在信息传递上RGB这三个通道中像素点信息是否传递给自己这一点上有不同。可以看到,maskA这种掩膜的传递方式是不传递给自己,maskB这种方式是信息要传递给自己。
这里还需要进行说明,为什么三个通道之间的传递关系是这样的,因为每个点的像素信息是由RGB这三个通道的值构成的,所以像素的信息传递不仅仅是基于前后的context的像素点信息的传递,还有自己的三个通道上面的值的一个传递。而按照RGB的位置顺序来说,R算是前面的信息,G属于中间的信息,B是后面的信息,所以在记录当前像素点的R通道上面的信息时就不能把后面的GB信息当作已知条件,同样的,在记录当前像素点的B通道上的信息时可以将RG两个通道上的信息当作已知条件。所以可以看到有这样的传递关系。
论文中提到,在pixelCNN中,只有在第一个卷积层上使用了maskA,后面所有的层上都是使用的maskB这种掩膜。
可以看到两种mask的区别就是在信息传递上RGB这三个通道中像素点信息是否传递给自己这一点上有不同。可以看到,maskA这种掩膜的传递方式是不传递给自己,maskB这种方式是信息要传递给自己。
这里还需要进行说明,为什么三个通道之间的传递关系是这样的,因为每个点的像素信息是由RGB这三个通道的值构成的,所以像素的信息传递不仅仅是基于前后的context的信息传递,还有自己的三个通道上面的值的一个传递。而按照RGB的位置顺序来说,R算是前面的信息,G属于中间的信息,B是后面的信息,所以在记录当前像素点的R通道上面的信息时就不能把后面的GB信息当作已知条件,同样的,在记录当前像素点的B通道上的信息时可以将RG两个通道上的信息当作已知条件。所以可以看到有这样的传递关系。
论文中提到,在pixelCNN中,只有在第一个卷积层上使用了maskA,后面所有的层上都是使用的maskB这种掩膜。
(所谓的“盲点”就是指当前的像素值信息提取的过程中无论如何都不会包括到灰色区域的像素信息。)
作者分别针对两个需要改进的方面提出了相应的解决方案:
为什么pixel RNN的效果不错,可以推测是因为pixelRNN模型中每一个LSTM层都能够获取到之前像素的所有信息。
而在CNN中,随着卷积层的层数的增加,获取到的信息也在不断增多。
所以如果能够合理增加pixelCNN中的卷积层,那么有可能提高其表现效果。
另外一个方面,pixelRNN表现效果不错,是因为RNN可以对更复杂的结构进行建模。因为RNN模型结构中存在大量的单元(输入门、遗忘门、输出门),这些单元可以帮助模型的神经元之间有更加复杂的联系。所以,在对pixel CNN的改进工作中,可以将masked convolutions之间的简单线性链接单元换成和RNN中门与门之间的激活方式一样的连接方式:
要如何改进“blind spot”问题,论文中提到将两种卷积网络进行结合使用,论文中分别叫这两种卷积网络horizonal stack和vertical stack。
Horizonal stack是将当前像素所在的行(当然也是指当前像素之前的像素值)作为条件进行卷积,所以horizonal stack的卷积核的规格为1*n,在horizonal stack中仍然要使用掩膜技术来实现只提取前面的信息。
Vertical stack是将当前像素所在的行的前面所有行当作条件来进行卷积,由于vertical stack是对前面的信息进行提取,所以vertical stack中不进行掩膜操作。
将每一层的两种stacks的结果进行结合,就可以得到当前像素点的信息,这样就消除了“盲点”问题。
所以使用门的技术和更多的卷积层来提高pixelCNN的表现效果,使用horizonal stack和vertical stack结合的方式来解决“盲点”问题之后,就得到了论文最终想要的模型gated pixelCNN。
论文中提到
这仍然是一个基于像素的概率分布进行预测的图像生成器(生成式模型)。
论文中还提到
只要给这个模型一组描述性的向量,就可以生成相应的图片。提供给模型的向量可以有两种:可以是一组描述性的标签;也可以是基于其他网络生成的向量。
这两种向量的生成效果具体来说的话,用ImageNet数据集中的分类标签(一组描述性的标签)进行生成图像,这个模型可以生成大量多变的真实场景,比如说动物、风景等等;如果是用由其它卷积网络中间生成的没见过的人脸照片(其他网络生成的向量)输入pixel CNN模型中,则可以生成这个人不同的表情、姿势等等的图片。
另外,论文中也提到
如果把门这种元件纳入条件pixelCNN中,则可以把这个条件pixelCNN当作图片自动编码器的解码器,可以使pixelCNN的性能达到和pixelRNN的性能一样好,但计算时间减小很多。
下面将对这三种情况进行具体的阐述:
unconditional gated pixelCNN是指直接用gated pixelCNN生成图像。
gated pixelCNN本身还是一个基于像素的概率分布进行预测的图像生成器(生成式模型),所以gated pixelCNN仍然可以在训练好模型之后直接进行图片生成。在论文中作者在CIFAR-10这个数据集上训练了gated pixelCNN模型,并基于同一个数据集进行训练的生成模型进行了对比。
这里的NLL值是指负对数似然的值,是用来衡量一个生成模型的总体效果的,这个值越小越好。
可以看到gated pixelCNN的效果已经在pixelCNN上得到了很大的提升,而且和pixel RNN的效果已经很接近了(虽然还是赶不上pixelRNN)。
可以看到,在ImageNet这个数据集上,可以看到gated pixel CNN的效果已经非常好了。
Gated pixel CNN作为一个条件图片生成器就是指,在预测像素点的概率的时候,添加一些先验信息来使生成的图片往我们想要的方向生成。上面提到的给模型一组向量来生成图片就是指作为conditional gated pixelCNN的作用。
若
更通俗的说
更NB的地方是,作者指出,
在作者的实验中,作者训练pixelCNN生成了八种不同类型的动物图片,可以看到这些图片角度光线等等环境条件是不同的,但是场景相似。
若
作者在训练过程中用Flicker这个数据集中的人脸图片来对gated pixelCNN进行训练,然后给模型一张不在整个训练集中的完全陌生的人脸信息给模型,最后模型生成了大量这个人的新图片。
最后Gated pixelCNN还可以在一个auto-encoder中用作一个强有力的图片decoder。
就像前面介绍VAE中介绍到的那样,一个auto-encoder由两部分组成,一个encoder一个decoder。
在将gated pixelCNN 用作一个auto-encoder的时候,encoder部分就是将输入的图片降维变成一个低纬度表示的特征,这个特征就是在前面conditional pixelCNN中提到的那个
在作者的实验中,作者在ImageNet上训练了一个gated pixelCNN auto-encoder,和使用MSE进行模型选择的convolutional auto-encoder,最后生成的图片效果如下:
最左边的这个张图是原图,中间的是用卷积auto-encoder生成的图片,右边的是gated pixel CNN生成的图片。可以看到,卷积auto-encoder是尽力去重构真实的图像,而gated pixelCNN在尽力去生成不同的但是相似的图像。
最后作者对整个模型进行了一个总结,并提出了展望,作者指出,从前面的各种案例中可以看到,gated pixel CNN可以生成在不同光照条件下的图片,所以gated pixel CNN可以客服生成模型中训练集光照条件不好的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。