在Pytorch中裁剪图像的小批量 - 每个图像都不同

时间:2018-01-13 00:48:37

标签: pytorch

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

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

有没有一种有效的方法在pytorch中执行此操作(在gpu上)?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

相反,请查看使用this tutorialpillow。您应该能够使用此实现您的用例。另请查看pillow-simd,它可以更快地完成某些操作。