我对Google最近的一篇博客文章感兴趣,该博客描述了使用nn
制作艺术作品。
我对一种技术特别感兴趣:
'在这种情况下,我们只需向网络提供任意图像或照片,然后让网络分析图片。然后,我们选择一个层,并要求网络增强检测到的内容。网络的每一层都处理不同抽象层次的特征,因此我们生成的特征的复杂性取决于我们选择增强的层。例如,较低的层倾向于产生笔划或简单的装饰状图案,因为这些层对基本特征(例如边缘及其方向)敏感。
帖子为http://googleresearch.blogspot.co.uk/2015/06/inceptionism-going-deeper-into-neural.html?m=1。
我的问题:这篇文章将此描述为一个简单的' case - 是否有一个nn的开源实现,可以在相对即插即用的过程中用于此目的? 对于所描述的技术,网络是否需要接受培训?
毫无疑问,本文中提到的其他技术需要一个已经在大量图像上训练过的网络,但对于我所描述的那个,已经有某种开源网络层可视化包吗? / p>
答案 0 :(得分:9)
UPD:Google发布了更多详细信息说明:https://github.com/google/deepdream/blob/master/dream.ipynb
还有另一个项目:https://317070.github.io/Dream/
如果您从链接中读到1,[2],[3],[4],您会看到他们使用了Caffe。该框架已包含经过培训的网络。您不需要手动训练任何内容,只需使用models/
文件夹中的.sh脚本下载模型。
你想要"即插即用过程",它不是那么容易,因为除了框架之外,我们还需要他们使用的脚本代码,可能还有修补Caffe。我尝试使用他们的描述制作一些东西。 Caffe有Python和Matlab接口,但内部有更多。
下面的文字描述了我对如何实施的想法。我不确定我的话,所以它更像是邀请我研究而不是"即插即用过程"。但是,由于没有人仍然回答,让我把它放在这里。也许有人会解决我的问题。
所以
据我了解,他们运行优化
[sum((net.forwardTo(X, n) - enchanced_layer).^2) + lambda * R(X)] -> min
即。寻找这样的输入X
,以便网络的特定层产生"增强"数据而不是"原始"数据
有一个正则化约束R(X)
:X
应该看起来像#34;自然图像" (没有高频噪音)。
X
是我们的目标形象。初始点X0
是原始图像。
当我们使用X提供输入时,forwardTo(X, n)
是我们的网络在图层n
中生成的内容。如果谈论Caffe,您可以进行全向传递(net.forward
)并查看blob你感兴趣的是(net.blob_vec(n).get_data()
)。
enchanced_layer
- 我们采用原始图层blob和" enchance"信号在里面。这是什么意思,我不知道。也许他们只是将数值乘以系数,也许是别的。
因此,当您的输入图像在图层sum((forwardTo(X, n) - enchanced_net).^2)
中生成您想要的内容时,n
将变为零。
lambda
是正则化参数,R(X)
是X
看起来自然的方式。我没有实现它,我的结果看起来很吵。至于它的公式,你可以在[2]中找到它。
我使用Matlab和fminlbfgs
进行优化。
关键部分是找到上面公式的梯度,因为问题的维度太多,无法用数字计算梯度。
正如我所说,我没有设法找到R(X)
的渐变。至于公式的主要部分,我设法找到了这个方式:
n
的diff blob设置为forwardTo(X, n) - enchanced_net
。 (请参阅set_diff
和set_data
的caffe文档,set_data
用于转发和等待数据,set_diff
用于向后传播并等待数据错误。)n-1
执行部分反向传播。Python和Matlab接口不包含部分向后传播,但Caffe C ++内部包含它。我在下面添加了一个补丁,以便在Matlab中使用。
增强第四层的结果:
我对结果不满意,但我认为这篇文章有一些共同之处。
答案 1 :(得分:5)
在Dmitry提供的Ipython笔记本链接中,它表示渐变 上升,最大化 L2规范化。我相信这就是谷歌从算法角度来强化功能的意思。
如果您考虑一下,情况确实如此,最小化L2可以防止过度拟合,即使曲线看起来更平滑。如果你做相反的事情,你就会使这个特征变得更加明显。
这是理解gradient ascent的一个很好的链接,虽然它主要讨论梯度下降。
我对caffe中的实现细节知之甚少,因为我主要使用theano。希望它有所帮助!
<强>更新强>
所以我今天阅读了详细的文章[1],[2],[3],[4],并发现[3]实际上详细讨论了算法
反向传播可以找到本地最优的 I 方法。该过程与ConvNet训练过程有关,其中反向传播是 用于优化图层权重。不同之处在于,在我们的情况下,执行优化 相对于输入图像,权重固定为在训练阶段发现的权重。 我们用零图像初始化了优化(在我们的例子中,ConvNet是在训练过的 零中心图像数据),然后将训练集平均图像添加到结果中。
因此,在对网络进行分类培训后,再次使用渐变上升训练它到输入图像,以获得更高的分数。