如何使用空间转换器在pytorch中裁剪图像?

时间:2019-03-27 08:47:52

标签: deep-learning pytorch torch

空间变换器网络的论文声称它可以用于裁剪图像。

给出裁剪区域(top_left,bottom_right)=(x1,y1,x2,y2),如何将该区域解释为变换矩阵并在pytorch中裁剪图像?

这里是关于火炬(http://torch.ch/blog/2015/09/07/spatial_transformers.html)中的空间变换器网络的介绍,在该介绍中,它可视化了变换器所看的边界框,在给定变换矩阵的情况下,如何确定边界框? / p>

[编辑]

我刚刚找到了第一个问题的答案[给了作物区域,找出了一个转换矩阵]

enter image description here

1 个答案:

答案 0 :(得分:0)

原帖中的图片已经提供了很好的答案,但提供一些代码可能会有用。

重要的是,此方法应正确保留梯度。在我的例子中,我有一批 y,x 值代表裁剪位置的中心(在 [-1,1] 范围内)。至于值 ab,它们是转换的缩放 x 和 y 值,在我的情况下,我将 0.5 与较小的输出大小(宽度的一半)结合使用和高度)以保留原始比例,即裁剪。您可以使用 1 不更改比例,但不会进行裁剪。

import torch.nn.functional as F

def crop_to_affine_matrix(t):
    'Turns (N,2) translate values into (N,2,3) affine transformation matrix'
    t = t.reshape(-1,1,2,1).flip(2) # flip x,y order to y,x
    t = F.pad(t, (2,0,0,0)).squeeze(1)
    t[:,0,0] = a
    t[:,1,1] = b
    return t

t = torch.zeros(5,2) # center crop positions for batch size 5
F.affine_grid(crop_to_affine_matrix(t), outsize)