【问题标题】:Effectively take batch of rectangular slices in numpy or tensorflow (batch image cropping)在 numpy 或 tensorflow 中有效地取一批矩形切片(批量图像裁剪)
【发布时间】:2022-06-15 22:18:43
【问题描述】:

我想找到一种有效地进行批量图像裁剪的方法。输入图像是相同的。每种作物都有不同的输入偏移量、高度和宽度。

朴素的代码:

img = np.zeros([100, 100, 3])
ofsets_x = np.array([10, 15, 18])
img_w = np.array([10, 12, 15])
ofsets_y = np.array([20, 22, 14])
img_h = np.array([14, 12, 16])

crops= []
for i in range(ofsets_x.shape[0]):
    ofset_x = ofsets_x[i]
    ofset_y = ofsets_y[i]
    w = img_w[i]
    h = img_h[i]

    crop = img[ofsets_x:ofsets_x + w, ofsets_y:ofsets_y + h, :] 
    crops.append(crop)

因为这在 numpy 和 tensorflow 中都非常慢(在 tensorflow 中,我在循环结束时使用 tf.image.resize 将每个裁剪调整为特定大小)。在 tensorflow 中,我也尝试过 tf.vectorized_map 和 tf.while_loop - 并没有给我任何显着的速度提升。所有这些都比 C++ 慢 20 倍以上。作物很简单 内存。它应该是超快的,尤其是在预分配内存的情况下。

如何在 numpy 或 tensorflow 中更快?

【问题讨论】:

  • 你确定裁剪是瓶颈,而不是调整大小?您裁剪的图像大小不同,因此 tf.image.resize(这是一个更繁重的操作)不能用于批处理。

标签: numpy tensorflow


猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多