Google Inceptionism:通过class获取图像

Google Inceptionism: obtain images by class

在著名的 Google Inceptionism 文章中, http://googleresearch.blogspot.jp/2015/06/inceptionism-going-deeper-into-neural.html 他们显示为每个 class 获得的图像,例如香蕉或蚂蚁。我想对其他数据集做同样的事情。

文章确实描述了它是如何获得的,但我觉得解释不够。

有相关代码 https://github.com/google/deepdream/blob/master/dream.ipynb

但它所做的是产生一个随机的梦幻图像,而不是指定一个class并学习它在网络中的样子,如上文所示。

谁能给出更具体的概述,或者code/tutorial 如何为特定 class 生成图像? (最好假设caffe框架)

我认为 this code 是重现 Google 团队发布的图像的良好起点。程序看起来很清楚:

  1. 从纯噪声图像和 class(比如 "cat")
  2. 开始
  3. 执行正向传递并反向传播错误 wrt 强加的 class 标签
  4. 使用在数据层计算的梯度更新初始图像

其中涉及一些技巧,可以在 original paper 中找到。

似乎主要区别在于 Google 人们试图获得更多 "realistic" 图片:

By itself, that doesn’t work very well, but it does if we impose a prior constraint that the image should have similar statistics to natural images, such as neighboring pixels needing to be correlated.