TensorFlow 使用给定 theta 的 Spatial Transformer
TensorFlow use Spatial Transformer with given theta
我想在没有定位网的情况下将 Spatial Transformer 与 TensorFlow 一起使用,但改用给定的变换矩阵 theta。我尝试了带有不应该改变输入的单位矩阵的变压器。不幸的是,情况并非如此,如果我多次重复对输出进行转换,图像将越来越小地缩放到左上角。我以为会有一些离散化错误,但为什么要进行身份转换?
in = tf.placeholder(tf.float32, [None, H, W, C], name="input_image")
theta = tf.placeholder(tf.float32, [None, 6], name="input_theta")
transformed = transformer(in, theta, [H, W])
好的,我想我找到了答案:
问题是使用高度和宽度归一化坐标,例如 -1 <= x,y <= 1
,更具体地说,缩放回矩阵坐标 0 <= x < width
和 0 <= y < height
,在 [=14= 中按如下方式完成] 方法:
x = (x + 1.0)*(width_f) / 2.0
y = (y + 1.0)*(height_f) / 2.0
将 _meshgrid
方法中的 tf.linspace
函数从 0
更改为 width-1
或 heigth-1
并删除提到的反向缩放解决了我的问题.
我想在没有定位网的情况下将 Spatial Transformer 与 TensorFlow 一起使用,但改用给定的变换矩阵 theta。我尝试了带有不应该改变输入的单位矩阵的变压器。不幸的是,情况并非如此,如果我多次重复对输出进行转换,图像将越来越小地缩放到左上角。我以为会有一些离散化错误,但为什么要进行身份转换?
in = tf.placeholder(tf.float32, [None, H, W, C], name="input_image")
theta = tf.placeholder(tf.float32, [None, 6], name="input_theta")
transformed = transformer(in, theta, [H, W])
好的,我想我找到了答案:
问题是使用高度和宽度归一化坐标,例如 -1 <= x,y <= 1
,更具体地说,缩放回矩阵坐标 0 <= x < width
和 0 <= y < height
,在 [=14= 中按如下方式完成] 方法:
x = (x + 1.0)*(width_f) / 2.0
y = (y + 1.0)*(height_f) / 2.0
将 _meshgrid
方法中的 tf.linspace
函数从 0
更改为 width-1
或 heigth-1
并删除提到的反向缩放解决了我的问题.