【问题标题】:Cropping a minibatch of images in Pytorch -- each image differently在 Pytorch 中裁剪一小批图像——每张图像都不同
【发布时间】:2018-06-22 11:39:39
【问题描述】:

我有一个名为 input 的张量,尺寸为 64x21x21。它是 64 张图像的小批量,每张 21x21 像素。我想将每个图像裁剪为 11x11 像素。所以我想要的输出张量的尺寸为 64x11x11。

我想围绕不同的“中心像素”裁剪每张图片。中心像素由名为center 的二维长张量给出,尺寸为 64x2。对于图像 i,center[i][0] 给出行索引,center[i][1] 给出应该在输出中心的像素的列索引。我们可以假设中心像素始终距离边界至少 5 个像素。

在 pytorch 中(在 gpu 上)有有效的方法吗?

更新:让我澄清一下center 张量是由深度神经网络形成的。它充当“硬注意力机制”,使用强化学习术语。在我“裁剪”图像后,该子图像成为另一个神经网络的输入。这就是我想在 Pytorch 中进行裁剪的原因:因为裁剪前后的操作都在 Pytorch 中。我想避免将任何东西从 GPU 传输回 CPU。

【问题讨论】:

  • 为什么不试试pytorch的transform方法?
  • 您可以在图像预处理阶段执行此操作,然后将这批图像输入网络。这就是 pytorch 的工作方式。
  • 不幸的是,在预处理期间,我还不知道center 张量。 center 的值每次迭代都会改变。

标签: pytorch


【解决方案1】:

我在 pytorch 论坛上提出了这个问题,并从 smth 那里得到了答案。 grid_sample 函数应该可以完全解决问题。

https://discuss.pytorch.org/t/cropping-a-minibatch-of-images-each-image-a-bit-differently/12247

【讨论】:

    【解决方案2】:

    torchvision 包含包括RandomCrop 在内的转换,但如果您希望以特定方式裁剪图像,它似乎不适合您的用例。我认为深度学习框架 PyTorch 不适合裁剪图像。

    相反,请查看使用 pillowthis tutorial。你应该能够用这个来实现你的用例。还可以查看pillow-simd,它可以更快地执行一些操作。

    【讨论】:

    • 感谢您的想法。不幸的是,我认为这对我不起作用:在我运行 pytorch 以获取 center 张量之前,我不知道要裁剪哪个区域,因此在使用枕头进行预处理期间我无法裁剪图像。在后期处理中我也不能用枕头做,因为我也必须用 pytorch 处理裁剪的图像。
    • 好吧,我明白了。我想你必须自己实现操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2015-02-02
    • 2017-05-22
    • 2020-04-12
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多