【问题标题】:Is location-dependent convolution filter possible in PyTorch or TensorFlow?PyTorch 或 TensorFlow 中是否可以使用位置相关卷积滤波器?
【发布时间】:2018-06-28 03:43:54
【问题描述】:
假设除了图像之外,我还有一个图像的 X 轴从左到右的渐变,以及另一个从上到下的 Y 轴渐变。这两个梯度具有相同的图像大小,并且都可以在 -0.5 到 0.5 的范围内。
现在,我想让卷积核(又名卷积滤波器或卷积权重)依赖于梯度中的 (x, y) 位置。所以内核是梯度的函数,就好像内核是嵌套的迷你神经网络的输出一样。这将使过滤器的权重在每个位置都不同,但与它们的邻居略有相似。我如何在 PyTorch 或 TensorFlow 中做到这一点?
当然,我可以自己计算一个Toeplitz matrix (a.k.a. diagonal-constant matrix) ,但是如果假装x==y==n,矩阵乘法将采用O(n^3) 操作,而卷积可以在O(n^2) normally 中实现。或者我可以自己迭代每个元素并以非矢量化的方式进行乘法运算。
有更好的想法吗?我想在这里看到创造力,思考如何巧妙地实现它。我相信编码将是构建网络层的一种有趣方式,该网络层能够执行类似于Spatial Transformer Networks 的简化版本的操作,但其空间转换将独立于图像。
【问题讨论】:
标签:
machine-learning
neural-network
pytorch
conv-neural-network
convolution
【解决方案1】:
卷积比全连接层更有效的原因是因为它们是平移不变的。如果您希望进行依赖于位置的卷积,则需要向卷积添加两个额外参数,即具有 N+2 个输入通道,其中 x、y 坐标是两个附加通道的值(例如 CoordConv) .
至于替代方案,梯度有意义吗?如果不是,并且它在所有图像中是统一的,最好在预处理阶段手动删除它(类似于方向校正、裁剪等)。如果不是(例如光照、阴影的差异),那么在假设它们会学习不同光照的不变性的情况下包含其他层是一种常见的不干涉方法。
【解决方案2】:
想多了,这里有一个等效问题的解决方案。这个解决方案的问题在于,它通过将“迷你神经网络”放置在之后而不是之前以一种完全不同的方式来解决问题。所以它解决了这个问题,但提供了一个非常不同的优化空间和收敛行为,这对我来说比我如何制定问题更不自然。
从某种意义上说,该问题的解决方案可能非常类似于简单地将两个梯度连接到 1 个常规特征图(来自常规卷积),例如在连接后具有d_2 = d_1 + 2 的深度),然后执行在此之上进行更多的卷积。我不会证明为什么这是对等价问题的有效解决方案,但我经过深思熟虑,这似乎是可以证明的。
优化空间(权重)在这里会非常不同,我认为它不会以相同的行为收敛。我想知道你们对这个解决方案在优化收敛方面的看法。
【解决方案3】:
对于这个问题的简化版本,我想到了一个解决方案,其中将使用权重的线性组合,而不是真正使用嵌套的迷你神经网络:
可以进行 4 次不同的卷积通道以获得 4 个特征图,然后将这 4 个图与梯度(2 个垂直梯度和 2 个水平梯度)相乘,并将它们相加,从而只剩下 1 个图。然而,这将是不同映射的线性组合,这比真正使用嵌套神经网络更简单,嵌套神经网络首先会改变内核。