math - (可微分图像采样)自定义整数采样内核,空间变换器网络
问题描述
我正在查看Spatial Transformer Network论文,并尝试在 PyTorch 中为整数采样内核实现一个自定义 grid_sample 函数(继承 autograd.Function 类)。
在定义后向函数时,我遇到了以下难题。
鉴于整数采样的工作原理如下:
我认为输入地图和转换后的网格 (x_i^s, y_i^s) 的梯度应该如下所示:
因为克罗内克三角函数的导数为零(我对此不确定!!-帮助)
克罗内克三角洲的导数?
因此,我得出一个结论,即输入的梯度应该是:与输入相同大小的张量,如果像素被采样,则填充为 0,如果未采样,则为 0,并且变换后的网格的梯度应该是一个充满零的张量。
但是,如果变换后的网格的梯度为 0,则由于链式法则,不会将任何信息传递到整数采样器之前的层。因此我认为关于网格的导数应该是别的东西。谁能指出我做错了什么?
提前谢谢了!
解决方案
供将来参考,以及那些可能对我发布的问题有类似问题的人。
我已经通过电子邮件向 Jaderberg 博士(“空间变换器网络”的作者之一)发送了关于这个问题的电子邮件,他已经确认:“整数采样坐标的梯度为 0。” . 所以我没有做错任何事,而且一直都是对的!
他的回应非常友好,并表示论文中提到了整数采样以介绍双线性采样方案,并且如果我真的想的话,他对如何可能实现整数采样给出了见解:
“您可以考虑使用一些数值微分技术(例如查看 x 与其邻居的差异)。这将假设图像 wrt 坐标中的平滑度。”
非常感谢 Jaderberg 博士,我很高兴结束这个问题。
我想考虑如何使用数值方法来实现采样函数的整数内核是我自己的另一个挑战,但在那之前我猜双线性采样器是我的朋友!:)
推荐阅读
- azure-devops - 将 Azure 签名工具安装到本地路径
- c# - ITurnContext turnContext 在使用 MS Proactive 示例中的 NotifyController 成功进行主动消息传递 1 小时后抛出 nullreference 错误
- google-apps-script - 我的 Google 表格代码中的 url 参数错误
- python-3.x - 稀疏矩阵python上的元素除法
- android - 用户正在注册但显示的 Toast 消息是“注册失败!再试一次!”(Firebase)
- c# - microsoft graph api sdk 无法通过主体名称/电子邮件检索用户
- javascript - 使用javascript将数组值替换为另一个键值
- php - 如何在编写 WooCoomerce 函数时摆脱 VS-Code 错误
- reactjs - 下拉onchange时的formik表单验证问题
- sql - 使用 SQL 清理数据 - 获取列差异