首页 > 解决方案 > (可微分图像采样)自定义整数采样内核,空间变换器网络

问题描述

我正在查看Spatial Transformer Network论文,并尝试在 PyTorch 中为整数采样内核实现一个自定义 grid_sample 函数(继承 autograd.Function 类)。

在定义后向函数时,我遇到了以下难题。

鉴于整数采样的工作原理如下:

在此处输入图像描述

我认为输入地图和转换后的网格 (x_i^s, y_i^s) 的梯度应该如下所示:

梯度 wrt 输入图: 在此处输入图像描述

梯度 wrt 变换网格 (x_i^s): 在此处输入图像描述

梯度 wrt 变换网格 (y_i^s): 在此处输入图像描述

因为克罗内克三角函数的导数为零(我对此不确定!!-帮助)

克罗内克三角洲的导数?

在此处输入图像描述

因此,我得出一个结论,即输入的梯度应该是:与输入相同大小的张量,如果像素被采样,则填充为 0,如果未采样,则为 0,并且变换后的网格的梯度应该是一个充满零的张量。

但是,如果变换后的网格的梯度为 0,则由于链式法则,不会将任何信息传递到整数采样器之前的层。因此我认为关于网格的导数应该是别的东西。谁能指出我做错了什么?

提前谢谢了!

标签: mathimage-processingdeep-learningpytorch

解决方案


供将来参考,以及那些可能对我发布的问题有类似问题的人。


我已经通过电子邮件向 Jaderberg 博士(“空间变换器网络”的作者之一)发送了关于这个问题的电子邮件,他已经确认:“整数采样坐标的梯度为 0。” . 所以我没有做错任何事,而且一直都是对的!

他的回应非常友好,并表示论文中提到了整数采样以介绍双线性采样方案,并且如果我真的想的话,他对如何可能实现整数采样给出了见解:

“您可以考虑使用一些数值微分技术(例如查看 x 与其邻居的差异)。这将假设图像 wrt 坐标中的平滑度。”

非常感谢 Jaderberg 博士,我很高兴结束这个问题。

我想考虑如何使用数值方法来实现采样函数的整数内核是我自己的另一个挑战,但在那之前我猜双线性采样器是我的朋友!:)


推荐阅读