【问题标题】:(Differentiable Image Sampling) Custom Integer Sampling Kernel, Spatial Transformer Network(可微分图像采样)自定义整数采样内核,空间变换器网络
【发布时间】:2021-06-12 11:24:23
【问题描述】:

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

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

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

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

渐变 w.r.t.输入地图:

渐变 w.r.t 变换网格 (x_i^s):

渐变 w.r.t 变换网格 (y_i^s):

因为 Kronecker delta 函数的导数为零(我不确定!!-帮助)

克罗内克三角洲的导数?

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

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

非常感谢!

【问题讨论】:

    标签: math image-processing deep-learning pytorch


    【解决方案1】:

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


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

    他的回复很客气,表示论文中提到整数采样是为了介绍双线性采样方案,如果我真的想的话,他对如何实现整数采样给出了见解:

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

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

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

    【讨论】:

    • 在哪里可以找到这个网络的简单示例?谢谢!
    • @Green 您是指空间变换网络的简单示例还是双线性/整数采样器的实现?您可以在此处找到有关 STN 的教程:PyTorch Tutorials。我发现这个 repo 在双线性内核采样实现STN - kevinzakka 方面非常有用。至于整数采样方案,我还在研究数值实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多