【发布时间】: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