I tried this code for Alignment. It seems not the same as the output in opencv
but is F.affine_grid
really expecting values in range [-1,1] or is F.grid_sample
(which is typically called after affine_grid
) expecting grids in this range?
Strictly speaking one, but F.grid_sample
would pad for values outside of [-1, 1]
. Unsure if I’ve mixed it up with affine_grind
in a previous post.
I went down the rabbit hole in [1] and as far as I understand, the theta values (input to affine_grid
) should also lie in [-1,1]. In one of my experiments where I learn the theta values, I noticed that F.grid_sample
produced wild image transformations if the the thetas were unbounded which makes sense because theta and the [-1,1] linspace grid in grid_sample
are matrix-multiplied (see [1]), potentially leading to many values outside of [-1,1] in the image projections. I bounded the thetas with a torch.tanh
and the transformations now look decent. Have to complain though…the docstring of these two functions could really be improved in terms of what value ranges are expected.
[1] pytorch/AffineGridGenerator.cpp at master · pytorch/pytorch · GitHub
I don’t think this is right. Not sure what a negative scale factor (diagonal elements in 3x3 matrix) would even mean…