zoukankan      html  css  js  c++  java
  • gated pixelCNN。

    这篇论文中提出了一个基于pixelRNN/CNN上进行改进的一个模型——gated pixelCNN。 gated pixelCNN依旧还是一个图片生成模型。它基于对像素点的概率分布进行建模只要给这个模型一组描述性的向量(这些向量可以是一组具有描述性的标签gated pixelCNN就可以生成大量的有变化的图片。 ———-

    图片生成模型

    生成模型是一种训练模型进行无监督学习的模型希望从数据中学习到信息后的模型能够生成一组和训练集尽可能相近的数据。 图片生成模型就是更具体的指向说给模型一组图片作为训练集让模型进行学习https://img-图像生成模型又可以根据模型对像素点分布的预测情况进一步细分。 ![generative models的分类](blog.csdn.net/20180129103934889?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlrZV9yZWQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 其中当下最流行的三种图片生成器模型当属:pixelRNN/CNN、VAE、GAN。 -**自回归模型**:auto regressive models一种概率图形模型进行图片再生成) -**生成对抗网络**:GAN(generative adversarial network)分别是生成器网络和判别式网络来联合进行建模 ———-

    pixelRNN/CNN

    怎么想

    现在需要构建一个模型来实现生成一张图片同时将前面生成的像素点作为参考。相当于将预测一张图上所有像素点的联合分布转换为对条件分布的预测。

    p(x)=i=1n2p(xi|x1...xi�6�11)p(x)=∏i=1n2p(xi|x1,xi�6�11)

    这里的xixi就是指在ii处的像素点。

    怎么做

    既然是用已经预测得到的像素来预测当前点的像素那么就应该可以想到用RNN来建模。因此这个模型就叫pixelRNN。 在pixelRNN中用了12个两维LSTM层。 在《pixel recurrent neural networks》这篇论文中由于本文是对gated pixelCNN进行梳理所以pixel RNN的训练时间特别长那为什么不可以使用 CNN来进行建模呢?用CNN构建出来的模型叫pixelCNN。 但是标准的卷积层会把所有像素的信息一次性进行提取用到masked convolutions以及去掉池化层来进行建模。

    masked convolutions

    这是一个5*5的掩膜卷积核。它的作用就是只保留中心点处之前的像素信息。
    可以看到当要提取中心点的像素信息的时候右边和后面的像素信息被“遮盖”住了maskA这种掩膜的传递方式是不传递给自己为什么三个通道之间的传递关系是这样的所以像素的信息传递不仅仅是基于前后的context的像素点信息的传递R算是前面的信息B是后面的信息同样的在pixelCNN中后面所有的层上都是使用的maskB这种掩膜。
    可以看到两种mask的区别就是在信息传递上RGB这三个通道中像素点信息是否传递给自己这一点上有不同。可以看到maskB这种方式是信息要传递给自己。
    这里还需要进行说明因为每个点的像素信息是由RGB这三个通道的值构成的还有自己的三个通道上面的值的一个传递。而按照RGB的位置顺序来说G属于中间的信息所以在记录当前像素点的R通道上面的信息时就不能把后面的GB信息当作已知条件在记录当前像素点的B通道上的信息时可以将RG两个通道上的信息当作已知条件。所以可以看到有这样的传递关系。
    论文中提到只有在第一个卷积层上使用了maskA所以不管是生成图片的过程还是训练的过程所以速度较慢所以训练时间较pixelRNN有提高这里也不展开多说。 ———-

    gated pixelCNN

    为什么要从pixelCNN到gated pixelCNN

    gated pixelCNN是在pixelCNN上进行了某些改进的到的从表现效果上面看但是模型的效果并没有它好pixelCNN存在“盲点”问题。在生成图像的时候因为使用了mask的原因可以推测是因为pixelRNN模型中每一个LSTM层都能够获取到之前像素的所有信息。
    而在CNN中获取到的信息也在不断增多。
    所以如果能够合理增加pixelCNN中的卷积层pixelRNN表现效果不错这些单元可以帮助模型的神经元之间有更加复杂的联系。所以可以将masked convolutions之间的简单线性链接单元换成和RNN中门与门之间的激活方式一样的连接方式:

    y=tanh(Wkf�6�5x)�8�6σ(Wkg�6�5x)y=tanh(Wk,g�6�5x)


    其中σσ是sigmoid激活函数�8�6指元素之间的点乘运算这也是为什么改进之后的这个模型叫gated pixelRNN的原因。

    “盲点”问题

    要如何改进“blind spot”问题论文中分别叫这两种卷积网络horizonal stack和vertical stack。
    Horizonal stack是将当前像素所在的行(当然也是指当前像素之前的像素值)作为条件进行卷积在horizonal stack中仍然要使用掩膜技术来实现只提取前面的信息。
    Vertical stack是将当前像素所在的行的前面所有行当作条件来进行卷积所以vertical stack中不进行掩膜操作。

    将每一层的两种stacks的结果进行结合这样就消除了“盲点”问题。

    所以使用门的技术和更多的卷积层来提高pixelCNN的表现效果就得到了论文最终想要的模型gated pixelCNN。

    A single layer in the gated pixelCNN architecture

    改后的gated pixelCNN的作用

    论文中提到

    这仍然是一个基于像素的概率分布进行预测的图像生成器(生成式模型)。

    论文中还提到

    只要给这个模型一组描述性的向量用ImageNet数据集中的分类标签(一组描述性的标签)进行生成图像比如说动物、风景等等;如果是用由其它卷积网络中间生成的没见过的人脸照片(其他网络生成的向量)输入pixel CNN模型中论文中也提到

    如果把门这种元件纳入条件pixelCNN中可以使pixelCNN的性能达到和pixelRNN的性能一样好所以gated pixelCNN仍然可以在训练好模型之后直接进行图片生成。在论文中作者在CIFAR-10这个数据集上训练了gated pixelCNN模型, training performance in brackets.

    这里的NLL值是指负对数似然的值这个值越小越好。
    可以看到gated pixelCNN的效果已经在pixelCNN上得到了很大的提升, training performance in brackets.

    可以看到可以看到gated pixel CNN的效果已经非常好了。

    conditional gated pixelCNN

    Gated pixel CNN作为一个条件图片生成器就是指添加一些先验信息来使生成的图片往我们想要的方向生成。上面提到的给模型一组向量来生成图片就是指作为conditional gated pixelCNN的作用。

    p(X|h)=i=1n2p(xi|x1...xi�6�11h)p(X|h)=∏i=1n2p(xi|x1,xi�6�11
    y=tanh(Wkf�6�5X+VTkfh)�8�6σ(Wkg�6�5x+VTkgh)y=tanh(Wk,fTh)�8�6σ(Wk,gTh)

    这里的hh就是我们给的一个先验信息hh可以以两种方式提供给模型:一组描述性的标签;基于其他网络生成的向量。

    hh是a one-hot encoding that specifies a class

    hh是a one-hot encoding that specifies a classgated pixel CNN可以准确的生成这个种类hh只告诉模型要生成的东西是什么训练好的模型会生成大量基于不同地点的图片。
    更NB的地方是hh甚至可以直接是imagenet 这个数据集中1000类别里面的类别id作者训练pixelCNN生成了八种不同类型的动物图片但是场景相似。

    Figure 3: Class-Conditional samples from the Conditional PixelCNN.

    hh是基于其他网络生成的向量

    hh是一个用由其它卷积网络中间生成的没见过的人脸信息然后给模型一张不在整个训练集中的完全陌生的人脸信息给模型一个auto-encoder由两部分组成encoder部分就是将输入的图片降维变成一个低纬度表示的特征hhhh送入decoder中hh进行重构它将encoder中生成的hh作为条件输入作者在ImageNet上训练了一个gated pixelCNN auto-encoder最后生成的图片效果如下:

    Figure 6: Left to right: original image,conditional samples from a PixelCNN auto-encoder. Both auto-encoders were trained end-to-end with a m = 10-dimensional bottleneck and a m = 100 dimensional bottleneck.

    最左边的这个张图是原图右边的是gated pixel CNN生成的图片。可以看到而gated pixelCNN在尽力去生成不同的但是相似的图像。


    总结

    最后作者对整个模型进行了一个总结作者指出gated pixel CNN可以生成在不同光照条件下的图片所以gated pixel CNN可以客服生成模型中训练集光照条件不好的问题。

  • 相关阅读:
    【jquery ,ajax,php】加载更多实例
    关于scrollTop
    jquery 底部导航透明度变化
    jquery 处理密码输入框(input type="password" ) 模仿placeholder
    物化视图基于rowID快速刷新
    ora-01653 无法通过1024扩展
    oracle临时表空间
    java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
    redis 简单使用
    BigDecimal 运算
  • 原文地址:https://www.cnblogs.com/noahzhixiao/p/10147713.html
Copyright © 2011-2022 走看看