Artificial intelligence Google Deep Dream art:如何在神经网络中选择一层并增强它
我对谷歌最近的一篇博文很感兴趣,这篇博文描述了如何使用Artificial intelligence Google Deep Dream art:如何在神经网络中选择一层并增强它,artificial-intelligence,neural-network,deep-learning,caffe,deep-dream,Artificial Intelligence,Neural Network,Deep Learning,Caffe,Deep Dream,我对谷歌最近的一篇博文很感兴趣,这篇博文描述了如何使用nn制作艺术品 我对一种技术特别感兴趣: “在这种情况下,我们只需向网络提供任意图像或照片,并让网络分析图片。然后,我们选择一层并要求网络增强它检测到的任何内容。网络的每一层都在不同的抽象层次上处理特征,因此我们生成的特征的复杂性取决于我们选择增强哪一层。例如,较低的层次倾向于产生笔画或简单的装饰性图案,因为这些层次对边缘及其方向等基本特征敏感 这个职位是 我的问题:这篇文章将此描述为一个“简单”的案例——是否有一个nn的开源实现可以在相对即
nn
制作艺术品
我对一种技术特别感兴趣:
“在这种情况下,我们只需向网络提供任意图像或照片,并让网络分析图片。然后,我们选择一层并要求网络增强它检测到的任何内容。网络的每一层都在不同的抽象层次上处理特征,因此我们生成的特征的复杂性取决于我们选择增强哪一层。例如,较低的层次倾向于产生笔画或简单的装饰性图案,因为这些层次对边缘及其方向等基本特征敏感
这个职位是
我的问题:这篇文章将此描述为一个“简单”的案例——是否有一个nn的开源实现可以在相对即插即用的过程中用于此目的?
就所描述的技术而言,网络是否需要培训
毫无疑问,对于论文中提到的其他技术,我们需要一个已经在大量图像上训练过的网络,但对于我所描述的网络,是否已经有了某种开源的网络层可视化软件包?UPD:Google发布了更详细的说明,说明了他们是如何实现它的: 还有一个项目: 如果你从你的链接中阅读[2]、[3]、[4],你会看到他们使用了Caffe。这个框架已经包含了经过训练的网络。您不需要手动培训任何内容,只需使用
models/
文件夹中的.sh脚本下载模型即可
您需要“即插即用过程”,这并不容易,因为除了框架之外,我们还需要他们使用的脚本的代码,可能还有补丁Caffe。我试着用他们的描述做点什么。Caffe有Python和Matlab接口,但其内部还有更多
下面的文本描述了我对如何实现它的想法。我不确定我的话,所以这更像是邀请我一起研究,而不是“即插即用过程”。但是由于没有人回答,让我把它放在这里。也许有人会治好我
所以
据我所知,他们运行优化
[sum((净转发到(X,n)-增强层)。^2)+lambda*R(X)]->min
即,查找此类输入X
,以便网络的特定层将生成“增强”数据,而不是“原始”数据
有一个正则化约束R(X)
:X
应该看起来像“自然图像”(没有高频噪声)
X
是我们的目标图像。初始点X0
是原始图像。
forwardTo(X,n)
是我们的网络在层n
中产生的,当我们用X馈送输入时。如果谈到Caffe,您可以进行完全向前传递(net.forward
)并查看您感兴趣的blob(net.blob\u vec(n).get\u data()
)
增强层
-我们将原始层块和“增强”信号放入其中。这是什么意思,我不知道。也许他们只是把这些值乘以系数,也许是别的
因此,sum((forwardTo(X,n)-enced_net)。^2)
当您的输入图像在层n
中生成您想要的内容时,它将变为零
lambda
是正则化参数,R(X)
是X
看起来自然的方式。我没有实现它,我的结果看起来非常嘈杂。至于它的公式,你可以在[2]中找到
我使用Matlab和fminlbfgs
进行优化
关键部分是找到上面公式的梯度,因为问题的维数太多,无法用数值计算梯度
正如我所说,我没有找到R(X)
的梯度。至于公式的主要部分,我是这样找到的:
- 将层
上的diff blob设置为n
。(参见caffe文档了解forwardTo(X,n)-enchanced\u net
和set_diff
,set_data
用于转发和等待数据,set_data
用于反向传播和等待数据错误)set_diff
- 执行从层
到输入的部分反向传播n-1
- 输入diff blob将包含我们需要的梯度
Python和Matlab接口不包含部分反向传播,但CaseC++内部包含了它。我在下面添加了一个补丁,使其在Matlab中可用
增强第4层的结果: 我对结果不满意,但我认为这篇文章有一些共同之处- 下面是生成上述“原样”图片的代码。入口点为“run2.m”,“fit2.m”包含适应度函数:
- 以下是caffe到Matlab接口的补丁,以使部分反向传播可用: